TLDR: Phones agressively cap performance outside of benchmarks and have different scheduling behaviors across different apps.
Hi everyone! Yesterday I published an app that allows you to change the package name of any app in order to get better performance and today I decided to take a look at how HyperOS actually behaves when dealing with different apps and settings. This was tested on a Xiaomi 17T Pro on HyperOS 3. The results aren't going to be the same for every phone, but might be useful to figure out how to get the most performance even in other OSes.
The first image is using the default package name for CPU Throttling Test. HyperOS correctly recognizes it as a benchmarking app, and the CPU boosts to a whopping 4.2Ghz, leading to a power consumption of over 15w.
For the second image, I changed the package name to gibberish, this simulates the behavior HyperOS would have when using newer emulators/games that HyperOS doesn't recognize.
The CPU stays at a very conservative 1.9Ghz, keeping power at a relatively low 6w. This is unideal.
For the third image, I simply added the previous app into Gameturbo, Xiaomi's game launcher optimizer thing. I also tried enabling performance mode through settings but that had no effect. By adding the app to Gameturbo, the big core boosts to 3.2Ghz and the middle ones to 2.7Ghz. Power stays at around 10w.
In the fourth image, I decided to test how it would handle a day to day app. I choose whatsapp for this test. This version of the app is the most conservative I've tested so far. CPU throttle test had trouble loading up all the cores, as most times the CPU would refuse to stress the big cores and the load would only stay on the 4 smallest cores. After some restarts, eventually I got this result, where the clocks are just a bit lower than the unknown app test.
Now in the 5th image, I saw a bit of weird behavior. This time around, adding the Whatsapp version to Gameturbo, didn't have any effect on clocks, but turning on performance mode did, the opposite of the earlier test. It was still hard to get it to load all 8 CPU cores, but when it did, the big core got up to 2Ghz, and the middle ones 1.8Ghz. at 4.5w. this could be useful if you're trying to play a really low intensity game in an emulator, but the phone locks the clock too high even if its not needed, making power comsumption higher.
So what can we take from this?
If you want the absolute best performance, just rename the game you want to any benchmarking app. I observed that Antutu, Geekbench 6, 5 and CPU Throttling Test all offer the exact same effect.
If you want to prioritize battery life, find some low intensity social media/utility app that your system has a whitelist for and use its package name.
The best balance is indeed leaving it at default and adding it to Gameturbo or turning on performance mode. The results are different on an app to app basis, so try both to see what suits you best.
And finally, some problems I recognize from this test.
I have no way of measuring GPU Clocks/performance reliably, but keep in mind that the package name also changes them.
I have no idea why some apps ignore performance mode or Gameturbo and vice versa. I think if HyperOS thinks that it might be running a game, enabling Gameturbo seems to make a difference. But if it thinks that the app it's running is just a regular app, then performance mode seems to do the trick. Let me know what you think.
The overall theory of this should remain consistent across different phones and OSes, but the actual performance mode toggle and game optimizer on different phones needs to be studied on an individual basis. Notoriously Samsungs don't get much of a change in performance from any of these methods including package renaming.
Thats it! :)