[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3] ui/cocoa: Take refresh rate into account
From: |
Akihiko Odaki |
Subject: |
[PATCH v3] ui/cocoa: Take refresh rate into account |
Date: |
Tue, 21 Jun 2022 05:29:21 +0900 |
Retreieve the refresh rate of the display and reflect it with
dpy_set_ui_info() and update_displaychangelistener(), allowing the
guest and DisplayChangeListener to consume the information.
Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
---
meson.build | 3 ++-
ui/cocoa.m | 12 ++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 0c2e11ff071..0f83f3730af 100644
--- a/meson.build
+++ b/meson.build
@@ -575,7 +575,8 @@ if get_option('attr').allowed()
endif
endif
-cocoa = dependency('appleframeworks', modules: 'Cocoa', required:
get_option('cocoa'))
+cocoa = dependency('appleframeworks', modules: ['Cocoa', 'CoreVideo'],
+ required: get_option('cocoa'))
if cocoa.found() and get_option('sdl').enabled()
error('Cocoa and SDL cannot be enabled at the same time')
endif
diff --git a/ui/cocoa.m b/ui/cocoa.m
index 84c84e98fc5..0000a3949c6 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -561,8 +561,20 @@ - (void) updateUIInfoLocked
CGDirectDisplayID display = [[description
objectForKey:@"NSScreenNumber"] unsignedIntValue];
NSSize screenSize = [[[self window] screen] frame].size;
CGSize screenPhysicalSize = CGDisplayScreenSize(display);
+ CVDisplayLinkRef displayLink;
frameSize = isFullscreen ? screenSize : [self frame].size;
+
+ if (!CVDisplayLinkCreateWithCGDisplay(display, &displayLink)) {
+ CVTime period =
CVDisplayLinkGetNominalOutputVideoRefreshPeriod(displayLink);
+ CVDisplayLinkRelease(displayLink);
+ if (!(period.flags & kCVTimeIsIndefinite)) {
+ update_displaychangelistener(&dcl,
+ 1000 * period.timeValue /
period.timeScale);
+ info.refresh_rate = (int64_t)1000 * period.timeScale /
period.timeValue;
+ }
+ }
+
info.width_mm = frameSize.width / screenSize.width *
screenPhysicalSize.width;
info.height_mm = frameSize.height / screenSize.height *
screenPhysicalSize.height;
} else {
--
2.32.1 (Apple Git-133)
- [PATCH v3] ui/cocoa: Take refresh rate into account,
Akihiko Odaki <=