From ca442b3da49728b29cf4fba14eaffcb746e79f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 30 Sep 2024 19:53:10 +0800 Subject: [PATCH] Monitor (macOS): improve performance --- src/detection/monitor/monitor_apple.m | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/detection/monitor/monitor_apple.m b/src/detection/monitor/monitor_apple.m index 04163bc7c..8a9487443 100644 --- a/src/detection/monitor/monitor_apple.m +++ b/src/detection/monitor/monitor_apple.m @@ -9,6 +9,7 @@ #ifdef MAC_OS_X_VERSION_10_15 extern CFDictionaryRef CoreDisplay_DisplayCreateInfoDictionary(CGDirectDisplayID display) __attribute__((weak_import)); +extern Boolean CoreDisplay_Display_SupportsHDRMode(CGDirectDisplayID display) __attribute__((weak_import)); #else #include #endif @@ -43,6 +44,19 @@ static bool detectHdrSupportWithNSScreen(FFDisplayResult* display) return false; } +static bool detectHdrSupport(CFDictionaryRef displayInfo, FFDisplayResult* display) +{ + #ifdef MAC_OS_X_VERSION_10_15 + if (CoreDisplay_Display_SupportsHDRMode) + { + if (CoreDisplay_Display_SupportsHDRMode(display->id)) + return true; + } + #endif + return CFDictionaryContainsKey(displayInfo, CFSTR("ReferencePeakHDRLuminance")) || + detectHdrSupportWithNSScreen(display); +} + const char* ffDetectMonitor(FFlist* results) { #ifdef MAC_OS_X_VERSION_10_15 @@ -77,8 +91,7 @@ const char* ffDetectMonitor(FFlist* results) monitor->width = width; monitor->height = height; ffEdidGetPhysicalSize(edidData, &monitor->physicalWidth, &monitor->physicalHeight); - monitor->hdrCompatible = CFDictionaryContainsKey(displayInfo, CFSTR("ReferencePeakHDRLuminance")) || - detectHdrSupportWithNSScreen(display); + monitor->hdrCompatible = detectHdrSupport(displayInfo, display); continue; } } @@ -97,8 +110,7 @@ const char* ffDetectMonitor(FFlist* results) CGSize size = CGDisplayScreenSize((CGDirectDisplayID) display->id); monitor->physicalWidth = (uint32_t) (size.width + 0.5); monitor->physicalHeight = (uint32_t) (size.height + 0.5); - monitor->hdrCompatible = CFDictionaryContainsKey(displayInfo, CFSTR("ReferencePeakHDRLuminance")) || - detectHdrSupportWithNSScreen(display); + monitor->hdrCompatible = detectHdrSupport(displayInfo, display); monitor->serial = CGDisplaySerialNumber((CGDirectDisplayID) display->id); FF_CFTYPE_AUTO_RELEASE CFArrayRef modes = CGDisplayCopyAllDisplayModes((CGDirectDisplayID) display->id, NULL);