Also worth noting is that there's a setting to "reduce power when idle", which throttles screen scraping frame rate when relative CPU utilization is high. Additionally, you can disable "Use full resolution" to turn off Retina support, which should further improve performance for you. We'll work on surfacing these settings better, since it's not obvious that they're buried inside the settings page.
"Reduce Power When Idle" is always selected, but there's no explanation of what it actually does. I would've expected it to be based off the user being idle in regards to the shared screen (e.g. no input for x time), not based on relative CPU usage calculations. It's hard for the system to increase CPU usage if Pop is already consuming most of it, so I wonder how long it takes for this to actually kick in.
"Use Full Resolution" also doesn't explain what it does, so it's unclear how bad the video would get if it was turned off. Even "turn[ing] off Retina support" is unclear, as it doesn't tell me what the alternative is. Does it scale down to the 1x version of the screen? Ideally we'd just have a resolution selector here, for both local and remote.
I've also long had issues with the keyboard shortcuts and various settings, again because it's unclear how the settings actually effect anything. I've also encountered bugs where just typing certain characters (I think it was ".") to a remote share toggled my ability to control the remote at all, which was extremely irritating. I really need more explanation of local vs. remote short cuts and which go where and when.
Reduce Power When Idle: decreases the frame rate from 30fps gradually down to 15fps when there's no user activity after a few seconds, and also drops frame rate due to CPU utilization. But you're right, we need to rethink this.
Resolutions: yes, it does scale down to 1x, and yes, selecting a resolution would be better.
Re: shortcuts, do you remember when it was that you experienced these issues? We had a few bugs around these that have been fixed. We're also working on a revamp of our keyboard handling code for all three platforms to address some of the remaining issues. If you're still running into a specific issue, let us know via hello@pop.com and we'll make sure it's fixed in our keyboard overhaul.
The native module coupled with Electron could be a great solution to the performance issue: it would give native performance for the most critical part of the product, while still providing a cross-platform foundation for a shared user interface across 4 platforms (Mac, Windows, Linux & browsers).
Given the feedback today on performance and resource bloat, we're going to dive deeper into benchmarking our product against the competition, and will post an update on what we find.
When you develop for Electron, you're lured in with an attractive proposition, shipping more & sooner than you otherwise could, at the expense of ever being able to make the best version of your app. As a tradeoff, that's not too bad. You can at least, with just the few of you, get the product out the door sooner rather than later and pick up your first users. You keep going with Electron, because it has the least friction, allowing you to introduce new features and fix bugs at pace you otherwise couldn't sustain.
At some point you've listened to the silver tongue'd serpent for a little too long and you've got a slick app with all the value-adds you could want. Also, a giant user base. And that user base consists of people who all have a vague distaste for the app, but they use it anyway, because that's the game, that's how they get work done. Dragging everyone a little closer to hell if only by the amount of heat of their laptop CPU is putting out.
But hey, at least your app is still not as bad as Teams, right?
Based on the discussion, we're going to look a lot deeper into finding ways to reduce Electron's memory bloat especially when idle, and reduce CPU usage when screen sharing by attempting to offload the most computationally intensive parts to purely native code, while still leveraging Electron as a unified, cross-platform presentation layer. We'll report on our progress on this front, and our goal will be to get the best of both worlds: one cross-platform code-base, coupled with native levels of performance.
This reads like "you need to let perfect be the enemy of good", which is typically not the tradeoff to take while trying to build a business.
I would further even posit that the "best version" of many apps is the one that has been iterated on the most, and if Electron allows for faster iteration, then the Electron version will be the best version, even if it uses a few more runtime compute resources (which everyone has plenty of anyway...).
> people who all have a vague distaste for the app, but they use it anyway, because that's the game, that's how they get work done
There are plenty of Electron apps I use daily that I have no distaste for or reservations around; some are done poorly, yes, but you can build shitty apps with or without Electron. I've found that most Electron apps I use are better for having used Electron.
I don't care one bit if an app uses an extra 100 megs of my RAM or whatever - it's 2021, memory is cheap, dev time is expensive.
The native-performance-purist crusade against Electron is really overblown, and I mostly see it from people who've never actually used Electron or otherwise tried to ship a desktop application themselves.
In spots where performance actually matters, and Electron is actually a performance barrier, yea sure go native (like putting record/encode/send in a native module as mentioned further up here), but otherwise please do eat a few more of my computer's resources if it ultimately lets you offer me more polished tools.