Chromium Code Reviews| Index: ui/gfx/mac/io_surface.cc |
| diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc |
| index b10780249f693fcc976f75673616e67bf2cdf7e8..90dadff5dd1100e922b5953d115a89f68b93a763 100644 |
| --- a/ui/gfx/mac/io_surface.cc |
| +++ b/ui/gfx/mac/io_surface.cc |
| @@ -7,6 +7,7 @@ |
| #include <stddef.h> |
| #include <stdint.h> |
| +#include "base/command_line.h" |
| #include "base/logging.h" |
| #include "base/mac/mac_util.h" |
| #include "base/mac/mach_logging.h" |
| @@ -14,6 +15,7 @@ |
| #include "base/metrics/histogram_macros.h" |
| #include "base/trace_event/trace_event.h" |
| #include "ui/gfx/buffer_format_util.h" |
| +#include "ui/gfx/switches.h" |
| namespace gfx { |
| @@ -187,16 +189,14 @@ IOSurfaceRef CreateIOSurface(const gfx::Size& size, gfx::BufferFormat format) { |
| DCHECK_EQ(kIOReturnSuccess, r); |
| } |
| - bool force_system_color_space = false; |
| + bool force_color_space = false; |
| // Displaying an IOSurface that does not have a color space using an |
| - // AVSampleBufferDisplayLayer can result in a black screen. Specify the |
| - // main display's color profile by default, which will result in no color |
| - // correction being done for the main monitor (which is the behavior of not |
| - // specifying a color space). |
| + // AVSampleBufferDisplayLayer can result in a black screen. Ensure that |
| + // a color space always be specified. |
|
Avi (use Gerrit)
2017/05/09 14:53:22
... always is specified.
? I'm in an argument wit
ccameron
2017/05/09 16:18:25
This was intended to be the subjunctive mood ... b
|
| // https://crbug.com/608879 |
| if (format == gfx::BufferFormat::YUV_420_BIPLANAR) |
| - force_system_color_space = true; |
| + force_color_space = true; |
| // On Sierra, all IOSurfaces are color corrected as though they are in sRGB |
| // color space by default. Prior to Sierra, IOSurfaces were not color |
| @@ -205,10 +205,20 @@ IOSurfaceRef CreateIOSurface(const gfx::Size& size, gfx::BufferFormat format) { |
| // color space. |
| // https://crbug.com/654488 |
| if (base::mac::IsAtLeastOS10_12()) |
| - force_system_color_space = true; |
| - |
| - if (force_system_color_space) { |
| - CGColorSpaceRef color_space = base::mac::GetSystemColorSpace(); |
| + force_color_space = true; |
| + |
| + // Ensure that all IOSurfaces start as sRGB when color correct rendering |
| + // is enabled. |
| + static bool color_correct_rendering_enabled = |
| + base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kEnableColorCorrectRendering); |
| + if (color_correct_rendering_enabled) |
| + force_color_space = true; |
| + |
| + if (force_color_space) { |
| + CGColorSpaceRef color_space = color_correct_rendering_enabled |
| + ? base::mac::GetSRGBColorSpace() |
| + : base::mac::GetSystemColorSpace(); |
| base::ScopedCFTypeRef<CFDataRef> color_space_icc( |
| CGColorSpaceCopyICCProfile(color_space)); |
| // Note that nullptr is an acceptable input to IOSurfaceSetValue. |