display: default FPS limit to 120Hz on supported devices

Except on iPhone where battery life is a concern.
This commit is contained in:
osy
2026-01-19 14:42:52 -08:00
parent a255260698
commit fae923de4b
3 changed files with 17 additions and 5 deletions
@@ -93,11 +93,6 @@ static const NSInteger kResizeTimeoutSecs = 5;
return;
}
// Initialize our renderer with the view size
if ([self integerForSetting:@"QEMURendererFPSLimit"] > 0) {
self.mtkView.preferredFramesPerSecond = [self integerForSetting:@"QEMURendererFPSLimit"];
}
[self.renderer changeUpscaler:self.delegate.qemuDisplayUpscaler
downscaler:self.delegate.qemuDisplayDownscaler];
@@ -142,6 +137,19 @@ static const NSInteger kResizeTimeoutSecs = 5;
[super viewDidAppear:animated];
self.delegate.displayViewSize = [self convertSizeToNative:self.view.bounds.size];
[self addObserver:self forKeyPath:@"vmDisplay.displaySize" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context:nil];
if ([self integerForSetting:@"QEMURendererFPSLimit"] > 0) {
self.mtkView.preferredFramesPerSecond = [self integerForSetting:@"QEMURendererFPSLimit"];
}
#if !TARGET_OS_VISION
else if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
// only apply ProMotion by default on iPad which has a larger battery
// on iPhone, we depend on the user manually setting the FPS limit to 120
NSInteger maxFps = self.view.window.screen.maximumFramesPerSecond;
if (maxFps > 0) {
self.mtkView.preferredFramesPerSecond = maxFps;
}
}
#endif
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
+2
View File
@@ -142,5 +142,7 @@
</array>
</dict>
</dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
</dict>
</plist>
@@ -98,6 +98,8 @@ class VMDisplayQemuMetalWindowController: VMDisplayQemuWindowController {
}
if rendererFpsLimit > 0 {
metalView.preferredFramesPerSecond = rendererFpsLimit
} else if #available(macOS 12, *), let maxFps = self.window?.screen?.maximumFramesPerSecond {
metalView.preferredFramesPerSecond = maxFps
}
renderer.changeUpscaler(displayConfig?.upscalingFilter.metalSamplerMinMagFilter ?? .linear, downscaler: displayConfig?.downscalingFilter.metalSamplerMinMagFilter ?? .linear)
vmDisplay?.addRenderer(renderer) // can be nil if primary