Chromium Code Reviews| 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 b647e3d782519c592943685ea996cf57947fc24e..e61ff7dba939fde761533dc2b48de030988a623f 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp |
| @@ -85,7 +85,7 @@ static sk_sp<SkSurface> createSkSurface(GrContext* gr, |
| const IntSize& size, |
| int msaaSampleCount, |
| OpacityMode opacityMode, |
| - sk_sp<SkColorSpace> colorSpace, |
| + sk_sp<SkColorSpace> skSurfaceColorSpace, |
| SkColorType colorType, |
| bool* surfaceIsAccelerated) { |
| if (gr) |
| @@ -94,7 +94,7 @@ static sk_sp<SkSurface> createSkSurface(GrContext* gr, |
| SkAlphaType alphaType = |
| (Opaque == opacityMode) ? kOpaque_SkAlphaType : kPremul_SkAlphaType; |
| SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), colorType, |
| - alphaType, colorSpace); |
| + alphaType, skSurfaceColorSpace); |
| SkSurfaceProps disableLCDProps(0, kUnknown_SkPixelGeometry); |
| sk_sp<SkSurface> surface; |
| @@ -127,7 +127,8 @@ Canvas2DLayerBridge::Canvas2DLayerBridge( |
| int msaaSampleCount, |
| OpacityMode opacityMode, |
| AccelerationMode accelerationMode, |
| - sk_sp<SkColorSpace> colorSpace, |
| + const gfx::ColorSpace& colorSpace, |
| + sk_sp<SkColorSpace> skSurfaceColorSpace, |
| SkColorType colorType) |
| : m_contextProvider(std::move(contextProvider)), |
| m_logger(WTF::wrapUnique(new Logger)), |
| @@ -149,6 +150,7 @@ Canvas2DLayerBridge::Canvas2DLayerBridge( |
| m_opacityMode(opacityMode), |
| m_size(size), |
| m_colorSpace(colorSpace), |
| + m_skSurfaceColorSpace(skSurfaceColorSpace), |
| m_colorType(colorType) { |
| DCHECK(m_contextProvider); |
| DCHECK(!m_contextProvider->isSoftwareRendering()); |
| @@ -278,10 +280,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); |
| @@ -555,7 +555,7 @@ SkSurface* 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, m_skSurfaceColorSpace, m_colorType, |
| &surfaceIsAccelerated); |
| if (m_surface) { |
| @@ -860,9 +860,9 @@ bool Canvas2DLayerBridge::restoreSurface() { |
| if (sharedGL && sharedGL->GetGraphicsResetStatusKHR() == GL_NO_ERROR) { |
| GrContext* grCtx = m_contextProvider->grContext(); |
| bool surfaceIsAccelerated; |
| - sk_sp<SkSurface> surface( |
| - createSkSurface(grCtx, m_size, m_msaaSampleCount, m_opacityMode, |
| - m_colorSpace, m_colorType, &surfaceIsAccelerated)); |
| + sk_sp<SkSurface> surface(createSkSurface( |
| + grCtx, m_size, m_msaaSampleCount, m_opacityMode, m_skSurfaceColorSpace, |
| + m_colorType, &surfaceIsAccelerated)); |
| if (!m_surface) |
| reportSurfaceCreationFailure(); |
| @@ -882,31 +882,6 @@ bool Canvas2DLayerBridge::restoreSurface() { |
| return m_surface.get(); |
| } |
| -static gfx::ColorSpace SkColorSpaceToColorSpace( |
|
ccameron
2017/01/30 22:50:49
Also avoiding this conversion is part of the motiv
|
| - 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 +923,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, |