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

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

Issue 2660393002: Use gfx::ColorSpace instead of SkColorSpace in Blink (Closed)
Patch Set: Created 3 years, 11 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 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,

Powered by Google App Engine
This is Rietveld 408576698