Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: content/test/gpu/gpu_tests/color_profile_manager_mac.py

Issue 2944733002: Force sRGB color profile on Mac for pixel tests (Closed)
Patch Set: All platforms 3rd try Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/test/gpu/gpu_tests/color_profile_manager_mac.py
diff --git a/content/test/gpu/gpu_tests/color_profile_manager_mac.py b/content/test/gpu/gpu_tests/color_profile_manager_mac.py
new file mode 100644
index 0000000000000000000000000000000000000000..a3719c779da4ffbf39852192b366d17072258f9c
--- /dev/null
+++ b/content/test/gpu/gpu_tests/color_profile_manager_mac.py
@@ -0,0 +1,88 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# The Foundation and Quartz modules are opaque and will trigger no-member
+# warnings on Mac. They will not exist on other platforms and will trigger
+# import-error warnings.
+# pylint: disable=no-member
+# pylint: disable=import-error
+# Variables will be pulled into globals() from the ColorSync framework, and will
+# trigger undefined-variables.
+# pylint: disable=undefined-variable
+
+import sys
+if sys.platform.startswith('darwin'):
+ import Foundation
+ import Quartz
+ import objc
+ # There is no module for the ColorSync framework, so synthesize one using
+ # bridge # support.
+ color_sync_framework = '/System/Library/Frameworks/ApplicationServices.' \
+ 'framework/Versions/A/Frameworks/ColorSync.framework'
+ # This string is the output of running gen_bridge_metadata on the ColorSync
+ # headers.
+ color_sync_bridge_string = """<?xml version='1.0'?>
+ <signatures version='1.0'>
+ <constant name='kColorSyncDeviceDefaultProfileID' type='^{__CFString=}'/>
+ <constant name='kColorSyncDisplayDeviceClass' type='^{__CFString=}'/>
+ <constant name='kColorSyncProfileUserScope' type='^{__CFString=}'/>
+ <function name='CGDisplayCreateUUIDFromDisplayID'>
+ <arg type='I'/>
+ <retval already_retained='true' type='^{__CFUUID=}'/>
+ </function>
+ <function name='ColorSyncDeviceCopyDeviceInfo'>
+ <arg type='^{__CFString=}'/>
+ <arg type='^{__CFUUID=}'/>
+ <retval already_retained='true' type='^{__CFDictionary=}'/>
+ </function>
+ <function name='ColorSyncDeviceSetCustomProfiles'>
+ <arg type='^{__CFString=}'/>
+ <arg type='^{__CFUUID=}'/>
+ <arg type='^{__CFDictionary=}'/>
+ <retval type='B'/>
+ </function>
+ </signatures>"""
+ objc.parseBridgeSupport(color_sync_bridge_string, globals(),
+ color_sync_framework)
+
+# Set |display_id| to use the color profile specified in |profile_url|. If
+# |profile_url| is None, then use the factor default.
+def SetDisplayCustomProfile(device_id, profile_url):
+ if profile_url == None:
+ profile_url = Foundation.kCFNull
+ profile_info = {
+ kColorSyncDeviceDefaultProfileID : profile_url,
+ kColorSyncProfileUserScope : Foundation.kCFPreferencesCurrentUser
+ }
+ result = ColorSyncDeviceSetCustomProfiles(
+ kColorSyncDisplayDeviceClass, device_id, profile_info)
+ if result != True:
+ raise
+
+# Returns the URL for the system's sRGB color profile.
+def GetSRGBProfileURL():
+ srgb_profile_path = '/System/Library/ColorSync/Profiles/sRGB Profile.icc'
+ srgb_profile_url = Foundation.CFURLCreateFromFileSystemRepresentation(
+ None, srgb_profile_path, len(srgb_profile_path), False)
+ return srgb_profile_url
+
+# Return a map from display ID to custom color profiles set on the display or
+# None if no custom color profile is set.
+def GetDisplaysToProfileURLMap():
+ display_profile_url_map = {}
+ online_display_list_result = Quartz.CGGetOnlineDisplayList(32, None, None)
+ error = online_display_list_result[0]
+ if error != Quartz.kCGErrorSuccess:
+ raise
+ online_displays = online_display_list_result[1]
+ for display_id in online_displays:
+ device_info = ColorSyncDeviceCopyDeviceInfo(
+ kColorSyncDisplayDeviceClass,
+ CGDisplayCreateUUIDFromDisplayID(display_id))
+ device_id = device_info['DeviceID']
+ custom_profile_url = None
+ if 'CustomProfiles' in device_info and '1' in device_info['CustomProfiles']:
+ custom_profile_url = device_info['CustomProfiles']['1']
+ display_profile_url_map[device_id] = custom_profile_url
+ return display_profile_url_map
« no previous file with comments | « content/test/gpu/gpu_tests/color_profile_manager.py ('k') | content/test/gpu/gpu_tests/maps_integration_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698