fix: Make the --disable-color-correct-rendering
switch work again (#23787)
This regressed once again in Electron 8 due to Chromium changes. Test Plan: - Confirm that test case from https://github.com/electron/electron/pull/15898#issuecomment-443191770 now works Notes: Fix disabling color correct rendering with `--disable-color-correct-rendering`
This commit is contained in:
parent
5218a6e6ab
commit
95037a7d2a
1 changed files with 39 additions and 20 deletions
|
@ -19,6 +19,21 @@ This can be removed once web content (including WebGL) learn how
|
||||||
to deal with color spaces. That is being tracked at
|
to deal with color spaces. That is being tracked at
|
||||||
https://crbug.com/634542 and https://crbug.com/711107.
|
https://crbug.com/634542 and https://crbug.com/711107.
|
||||||
|
|
||||||
|
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
||||||
|
index 461198cc1c11bbd15e6bdc846ba563f4f62916af..454dc37ab4b46cd449ae10c6a5dc9014f57e74e8 100644
|
||||||
|
--- a/cc/trees/layer_tree_host_impl.cc
|
||||||
|
+++ b/cc/trees/layer_tree_host_impl.cc
|
||||||
|
@@ -1830,6 +1830,10 @@ void LayerTreeHostImpl::SetIsLikelyToRequireADraw(
|
||||||
|
|
||||||
|
gfx::ColorSpace LayerTreeHostImpl::GetRasterColorSpace(
|
||||||
|
gfx::ContentColorUsage content_color_usage) const {
|
||||||
|
+ if (!settings_.enable_color_correct_rendering) {
|
||||||
|
+ return {};
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
constexpr gfx::ColorSpace srgb = gfx::ColorSpace::CreateSRGB();
|
||||||
|
|
||||||
|
if (settings_.prefer_raster_in_srgb &&
|
||||||
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
|
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
|
||||||
index c2684645484c7e1b6a555ba31f6634496a4fec76..9250d3b772fdeb6eb943f6cddeb96200e0f819f4 100644
|
index c2684645484c7e1b6a555ba31f6634496a4fec76..9250d3b772fdeb6eb943f6cddeb96200e0f819f4 100644
|
||||||
--- a/cc/trees/layer_tree_settings.h
|
--- a/cc/trees/layer_tree_settings.h
|
||||||
|
@ -294,7 +309,7 @@ index 6bf7541499dd849439f191cfddae92dded99ef85..a023ddd9f8311bff998bb6655445bb44
|
||||||
|
|
||||||
gfx::ColorSpace::TransferID transfer_id =
|
gfx::ColorSpace::TransferID transfer_id =
|
||||||
diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc
|
diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc
|
||||||
index 2674784dca1ed12b2f5afc7b728e0c6e8cd6ca4a..5b661c70c9c89883a1aaaf1a29a9ec9fe7f16da6 100644
|
index 2674784dca1ed12b2f5afc7b728e0c6e8cd6ca4a..93a9652b71d86441e15b87aafd7a6b1a13f45830 100644
|
||||||
--- a/ui/gfx/mac/io_surface.cc
|
--- a/ui/gfx/mac/io_surface.cc
|
||||||
+++ b/ui/gfx/mac/io_surface.cc
|
+++ b/ui/gfx/mac/io_surface.cc
|
||||||
@@ -16,6 +16,7 @@
|
@@ -16,6 +16,7 @@
|
||||||
|
@ -305,33 +320,37 @@ index 2674784dca1ed12b2f5afc7b728e0c6e8cd6ca4a..5b661c70c9c89883a1aaaf1a29a9ec9f
|
||||||
|
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
|
||||||
@@ -258,6 +259,11 @@ IOSurfaceRef CreateIOSurface(const gfx::Size& size,
|
@@ -119,6 +120,14 @@ void IOSurfaceMachPortTraits::Release(mach_port_t port) {
|
||||||
IOSurfaceSetValue(surface, CFSTR("IOSurfaceColorSpace"), kCGColorSpaceSRGB);
|
// Common method used by IOSurfaceSetColorSpace and IOSurfaceCanSetColorSpace.
|
||||||
} else {
|
bool IOSurfaceSetColorSpace(IOSurfaceRef io_surface,
|
||||||
CGColorSpaceRef color_space = base::mac::GetSRGBColorSpace();
|
|
||||||
+ auto* cmd_line = base::CommandLine::ForCurrentProcess();
|
|
||||||
+ if (cmd_line->HasSwitch(switches::kDisableColorCorrectRendering)) {
|
|
||||||
+ color_space = base::mac::GetSystemColorSpace();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
base::ScopedCFTypeRef<CFDataRef> color_space_icc(
|
|
||||||
CGColorSpaceCopyICCProfile(color_space));
|
|
||||||
IOSurfaceSetValue(surface, CFSTR("IOSurfaceColorSpace"), color_space_icc);
|
|
||||||
@@ -274,6 +280,14 @@ bool IOSurfaceCanSetColorSpace(const ColorSpace& color_space) {
|
|
||||||
|
|
||||||
void IOSurfaceSetColorSpace(IOSurfaceRef io_surface,
|
|
||||||
const ColorSpace& color_space) {
|
const ColorSpace& color_space) {
|
||||||
+ auto* cmd_line = base::CommandLine::ForCurrentProcess();
|
+ auto* cmd_line = base::CommandLine::ForCurrentProcess();
|
||||||
+ if (cmd_line->HasSwitch(switches::kDisableColorCorrectRendering)) {
|
+ if (cmd_line->HasSwitch(switches::kDisableColorCorrectRendering)) {
|
||||||
+ base::ScopedCFTypeRef<CFDataRef> system_icc(
|
+ base::ScopedCFTypeRef<CFDataRef> system_icc(
|
||||||
+ CGColorSpaceCopyICCProfile(base::mac::GetSystemColorSpace()));
|
+ CGColorSpaceCopyICCProfile(base::mac::GetSystemColorSpace()));
|
||||||
+ IOSurfaceSetValue(io_surface, CFSTR("IOSurfaceColorSpace"), system_icc);
|
+ IOSurfaceSetValue(io_surface, CFSTR("IOSurfaceColorSpace"), system_icc);
|
||||||
+ return;
|
+ return true;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
if (!internal::IOSurfaceSetColorSpace(io_surface, color_space)) {
|
// Allow but ignore invalid color spaces.
|
||||||
DLOG(ERROR) << "Failed to set color space for IOSurface: "
|
if (!color_space.IsValid())
|
||||||
<< color_space.ToString();
|
return true;
|
||||||
|
@@ -253,6 +262,15 @@ IOSurfaceRef CreateIOSurface(const gfx::Size& size,
|
||||||
|
DCHECK_EQ(kIOReturnSuccess, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ auto* cmd_line = base::CommandLine::ForCurrentProcess();
|
||||||
|
+ if (cmd_line->HasSwitch(switches::kDisableColorCorrectRendering)) {
|
||||||
|
+ CGColorSpaceRef color_space = base::mac::GetSystemColorSpace();
|
||||||
|
+ base::ScopedCFTypeRef<CFDataRef> color_space_icc(
|
||||||
|
+ CGColorSpaceCopyICCProfile(color_space));
|
||||||
|
+ IOSurfaceSetValue(surface, CFSTR("IOSurfaceColorSpace"), color_space_icc);
|
||||||
|
+ return surface;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// Ensure that all IOSurfaces start as sRGB.
|
||||||
|
if (__builtin_available(macos 10.12, *)) {
|
||||||
|
IOSurfaceSetValue(surface, CFSTR("IOSurfaceColorSpace"), kCGColorSpaceSRGB);
|
||||||
diff --git a/ui/gfx/switches.cc b/ui/gfx/switches.cc
|
diff --git a/ui/gfx/switches.cc b/ui/gfx/switches.cc
|
||||||
index 0f746ead72a2c195321384c9c4ced96d0608fb7b..a9cc7b6d93cdb42c5a9a177e8a09edeb36db8122 100644
|
index 0f746ead72a2c195321384c9c4ced96d0608fb7b..a9cc7b6d93cdb42c5a9a177e8a09edeb36db8122 100644
|
||||||
--- a/ui/gfx/switches.cc
|
--- a/ui/gfx/switches.cc
|
||||||
|
|
Loading…
Reference in a new issue