| 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 e698232f55096f5d20ba90ca0f4b084e7694f62d..661dcde221236e54b399c1fc6a09c3beff2c5fe4 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| @@ -57,13 +57,13 @@ enum {
|
|
|
| namespace blink {
|
|
|
| -static PassRefPtr<SkSurface> createSkSurface(GrContext* gr, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, bool* surfaceIsAccelerated)
|
| +static PassRefPtr<SkSurface> createSkSurface(GrContext* gr, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, sk_sp<SkColorSpace> colorSpace, bool* surfaceIsAccelerated)
|
| {
|
| if (gr)
|
| gr->resetContext();
|
|
|
| SkAlphaType alphaType = (Opaque == opacityMode) ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
|
| - SkImageInfo info = SkImageInfo::MakeN32(size.width(), size.height(), alphaType);
|
| + SkImageInfo info = SkImageInfo::MakeN32(size.width(), size.height(), alphaType, colorSpace);
|
| SkSurfaceProps disableLCDProps(0, kUnknown_SkPixelGeometry);
|
| sk_sp<SkSurface> surface;
|
|
|
| @@ -87,18 +87,18 @@ static PassRefPtr<SkSurface> createSkSurface(GrContext* gr, const IntSize& size,
|
| return fromSkSp(surface);
|
| }
|
|
|
| -PassRefPtr<Canvas2DLayerBridge> Canvas2DLayerBridge::create(const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode)
|
| +PassRefPtr<Canvas2DLayerBridge> Canvas2DLayerBridge::create(const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode, sk_sp<SkColorSpace> colorSpace)
|
| {
|
| TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation", TRACE_EVENT_SCOPE_GLOBAL);
|
| std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
|
| if (!contextProvider)
|
| return nullptr;
|
| RefPtr<Canvas2DLayerBridge> layerBridge;
|
| - layerBridge = adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), size, msaaSampleCount, opacityMode, accelerationMode));
|
| + layerBridge = adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), size, msaaSampleCount, opacityMode, accelerationMode, std::move(colorSpace)));
|
| return layerBridge.release();
|
| }
|
|
|
| -Canvas2DLayerBridge::Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode)
|
| +Canvas2DLayerBridge::Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode, sk_sp<SkColorSpace> colorSpace)
|
| : m_contextProvider(std::move(contextProvider))
|
| , m_logger(wrapUnique(new Logger))
|
| , m_weakPtrFactory(this)
|
| @@ -118,6 +118,7 @@ Canvas2DLayerBridge::Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DPro
|
| , m_accelerationMode(accelerationMode)
|
| , m_opacityMode(opacityMode)
|
| , m_size(size)
|
| + , m_colorSpace(colorSpace)
|
| {
|
| DCHECK(m_contextProvider);
|
| // Used by browser tests to detect the use of a Canvas2DLayerBridge.
|
| @@ -216,6 +217,7 @@ bool Canvas2DLayerBridge::prepareIOSurfaceMailboxFromImage(SkImage* image, WebEx
|
| gl->GenMailboxCHROMIUM(info.m_mailbox.name);
|
| gl->ProduceTextureDirectCHROMIUM(imageInfo.m_textureId, info.m_mailbox.textureTarget, info.m_mailbox.name);
|
| info.m_mailbox.allowOverlay = true;
|
| + info.m_mailbox.colorSpace = m_colorSpace;
|
|
|
| const GLuint64 fenceSync = gl->InsertFenceSyncCHROMIUM();
|
| gl->Flush();
|
| @@ -330,6 +332,7 @@ bool Canvas2DLayerBridge::prepareMailboxFromImage(PassRefPtr<SkImage> image, Web
|
| // in SkSurface_Gpu does not make any false assumptions.
|
| mailboxInfo.m_image->getTexture()->textureParamsModified();
|
| mailboxInfo.m_mailbox.textureTarget = GL_TEXTURE_2D;
|
| + mailboxInfo.m_mailbox.colorSpace = m_colorSpace.get();
|
|
|
| gpu::gles2::GLES2Interface* gl = contextGL();
|
| if (!gl)
|
| @@ -477,7 +480,7 @@ SkSurface* Canvas2DLayerBridge::getOrCreateSurface(AccelerationHint hint)
|
| }
|
|
|
| bool surfaceIsAccelerated;
|
| - m_surface = createSkSurface(wantAcceleration ? m_contextProvider->grContext() : nullptr, m_size, m_msaaSampleCount, m_opacityMode, &surfaceIsAccelerated);
|
| + m_surface = createSkSurface(wantAcceleration ? m_contextProvider->grContext() : nullptr, m_size, m_msaaSampleCount, m_opacityMode, m_colorSpace, &surfaceIsAccelerated);
|
|
|
| if (!m_surface)
|
| reportSurfaceCreationFailure();
|
| @@ -754,7 +757,7 @@ bool Canvas2DLayerBridge::restoreSurface()
|
| if (sharedGL && sharedGL->GetGraphicsResetStatusKHR() == GL_NO_ERROR) {
|
| GrContext* grCtx = m_contextProvider->grContext();
|
| bool surfaceIsAccelerated;
|
| - RefPtr<SkSurface> surface(createSkSurface(grCtx, m_size, m_msaaSampleCount, m_opacityMode, &surfaceIsAccelerated));
|
| + RefPtr<SkSurface> surface(createSkSurface(grCtx, m_size, m_msaaSampleCount, m_opacityMode, m_colorSpace, &surfaceIsAccelerated));
|
|
|
| if (!m_surface)
|
| reportSurfaceCreationFailure();
|
|
|