mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[macOS] Set the display refresh rate (flutter/engine#21095)
Fixes: https://github.com/flutter/flutter/issues/49222
This commit is contained in:
parent
0a16b3a8de
commit
fc8b468d84
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user