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

Unified Diff: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp

Issue 2660393002: Use gfx::ColorSpace instead of SkColorSpace in Blink (Closed)
Patch Set: Rebase (again) Created 3 years, 10 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: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
index 966cd8efeeadfe80af9cb47de2aab7eee5ea69e0..dab2786f1cc48807d7e8c2377c6ca59c002ca25b 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -127,7 +127,8 @@ Canvas2DLayerBridge::Canvas2DLayerBridge(
int msaaSampleCount,
OpacityMode opacityMode,
AccelerationMode accelerationMode,
- sk_sp<SkColorSpace> colorSpace,
+ const gfx::ColorSpace& colorSpace,
+ bool skSurfacesUseColorSpace,
SkColorType colorType)
: m_contextProvider(std::move(contextProvider)),
m_logger(WTF::wrapUnique(new Logger)),
@@ -149,9 +150,11 @@ Canvas2DLayerBridge::Canvas2DLayerBridge(
m_opacityMode(opacityMode),
m_size(size),
m_colorSpace(colorSpace),
+ m_skSurfacesUseColorSpace(skSurfacesUseColorSpace),
m_colorType(colorType) {
DCHECK(m_contextProvider);
DCHECK(!m_contextProvider->isSoftwareRendering());
+ DCHECK(m_colorSpace.IsValid());
// Used by browser tests to detect the use of a Canvas2DLayerBridge.
TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation",
TRACE_EVENT_SCOPE_GLOBAL);
@@ -278,10 +281,8 @@ bool Canvas2DLayerBridge::prepareIOSurfaceMailboxFromImage(
cc::TextureMailbox(mailbox, syncToken, textureTarget, gfx::Size(m_size),
isOverlayCandidate, secureOutputOnly);
if (RuntimeEnabledFeatures::colorCorrectRenderingEnabled()) {
- gfx::ColorSpace colorSpace =
- gfx::ColorSpace::FromSkColorSpace(m_colorSpace);
- outMailbox->set_color_space(colorSpace);
- imageInfo->m_gpuMemoryBuffer->SetColorSpaceForScanout(colorSpace);
+ outMailbox->set_color_space(m_colorSpace);
+ imageInfo->m_gpuMemoryBuffer->SetColorSpaceForScanout(m_colorSpace);
}
gl->BindTexture(GC3D_TEXTURE_RECTANGLE_ARB, 0);
@@ -525,6 +526,12 @@ void Canvas2DLayerBridge::hibernate() {
m_logger->didStartHibernating();
}
+sk_sp<SkColorSpace> Canvas2DLayerBridge::skSurfaceColorSpace() const {
+ if (m_skSurfacesUseColorSpace)
+ return m_colorSpace.ToSkColorSpace();
+ return nullptr;
+}
+
void Canvas2DLayerBridge::reportSurfaceCreationFailure() {
if (!m_surfaceCreationFailedAtLeastOnce) {
// Only count the failure once per instance so that the histogram may
@@ -555,7 +562,7 @@ PaintSurface* Canvas2DLayerBridge::getOrCreateSurface(AccelerationHint hint) {
bool surfaceIsAccelerated;
m_surface = createSkSurface(
wantAcceleration ? m_contextProvider->grContext() : nullptr, m_size,
- m_msaaSampleCount, m_opacityMode, m_colorSpace, m_colorType,
+ m_msaaSampleCount, m_opacityMode, skSurfaceColorSpace(), m_colorType,
&surfaceIsAccelerated);
if (m_surface) {
@@ -860,10 +867,9 @@ bool Canvas2DLayerBridge::restoreSurface() {
if (sharedGL && sharedGL->GetGraphicsResetStatusKHR() == GL_NO_ERROR) {
GrContext* grCtx = m_contextProvider->grContext();
bool surfaceIsAccelerated;
- sk_sp<PaintSurface> surface(
- createSkSurface(grCtx, m_size, m_msaaSampleCount, m_opacityMode,
- m_colorSpace, m_colorType, &surfaceIsAccelerated));
-
+ sk_sp<PaintSurface> surface(createSkSurface(
+ grCtx, m_size, m_msaaSampleCount, m_opacityMode, skSurfaceColorSpace(),
+ m_colorType, &surfaceIsAccelerated));
if (!m_surface)
reportSurfaceCreationFailure();
@@ -882,31 +888,6 @@ bool Canvas2DLayerBridge::restoreSurface() {
return m_surface.get();
}
-static gfx::ColorSpace SkColorSpaceToColorSpace(
- const SkColorSpace* skColorSpace) {
- // TODO(crbug.com/634102): Eliminate this clumsy conversion by unifying
- // SkColorSpace and gfx::ColorSpace.
- if (!skColorSpace)
- return gfx::ColorSpace();
-
- gfx::ColorSpace::TransferID transferID =
- gfx::ColorSpace::TransferID::UNSPECIFIED;
- if (skColorSpace->gammaCloseToSRGB()) {
- transferID = gfx::ColorSpace::TransferID::IEC61966_2_1;
- } else if (skColorSpace->gammaIsLinear()) {
- transferID = gfx::ColorSpace::TransferID::LINEAR;
- } else {
- // TODO(crbug.com/634102): Not all curve type are supported
- DCHECK(false);
- }
-
- // TODO(crbug.com/634102): No primary conversions are performed.
- // Rec-709 is assumed.
- return gfx::ColorSpace(gfx::ColorSpace::PrimaryID::BT709, transferID,
- gfx::ColorSpace::MatrixID::RGB,
- gfx::ColorSpace::RangeID::FULL);
-}
-
bool Canvas2DLayerBridge::PrepareTextureMailbox(
cc::TextureMailbox* outMailbox,
std::unique_ptr<cc::SingleReleaseCallback>* outReleaseCallback) {
@@ -948,8 +929,7 @@ bool Canvas2DLayerBridge::PrepareTextureMailbox(
if (!prepareMailboxFromImage(std::move(image), outMailbox))
return false;
outMailbox->set_nearest_neighbor(getGLFilter() == GL_NEAREST);
- gfx::ColorSpace colorSpace = SkColorSpaceToColorSpace(m_colorSpace.get());
- outMailbox->set_color_space(colorSpace);
+ outMailbox->set_color_space(m_colorSpace);
auto func =
WTF::bind(&Canvas2DLayerBridge::mailboxReleased,

Powered by Google App Engine
This is Rietveld 408576698