[macOS] Set the display refresh rate (flutter/engine#21095)

Fixes: https://github.com/flutter/flutter/issues/49222
This commit is contained in:
Kaushik Iska 2020-09-26 06:47:26 -07:00 committed by GitHub
parent 0a16b3a8de
commit fc8b468d84

View File

@ -281,6 +281,7 @@ static bool OnAcquireExternalTexture(FlutterEngine* engine,
[self sendUserLocales];
[self updateWindowMetrics];
[self updateDisplayConfig];
return YES;
}
@ -317,6 +318,31 @@ static bool OnAcquireExternalTexture(FlutterEngine* engine,
return _resourceContext;
}
- (void)updateDisplayConfig {
if (!_engine) {
return;
}
CVDisplayLinkRef displayLinkRef;
CGDirectDisplayID mainDisplayID = CGMainDisplayID();
CVDisplayLinkCreateWithCGDisplay(mainDisplayID, &displayLinkRef);
CVTime nominal = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(displayLinkRef);
if (!(nominal.flags & kCVTimeIsIndefinite)) {
double refreshRate = static_cast<double>(nominal.timeScale) / nominal.timeValue;
FlutterEngineDisplay display;
display.struct_size = sizeof(display);
display.display_id = mainDisplayID;
display.refresh_rate = round(refreshRate);
std::vector<FlutterEngineDisplay> displays = {display};
FlutterEngineNotifyDisplayUpdate(_engine, kFlutterEngineDisplaysUpdateTypeStartup,
displays.data(), displays.size());
}
CVDisplayLinkRelease(displayLinkRef);
}
- (void)updateWindowMetrics {
if (!_engine) {
return;