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

Unified Diff: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp

Issue 2425113002: Fix the linear-rgb canvas color space so that it renders (Closed)
Patch Set: Created 4 years, 2 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/core/html/HTMLCanvasElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index 099ed9080c084be9c1987ce7a1e9d5a4746a0cb6..69ffa190b2c8e54a756886d1f640920dc23d2686 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -931,9 +931,10 @@ class UnacceleratedSurfaceFactory
virtual std::unique_ptr<ImageBufferSurface> createSurface(
const IntSize& size,
OpacityMode opacityMode,
- sk_sp<SkColorSpace> colorSpace) {
+ sk_sp<SkColorSpace> colorSpace,
+ SkColorType colorType) {
return wrapUnique(new UnacceleratedImageBufferSurface(
- size, opacityMode, InitializeImagePixels, colorSpace));
+ size, opacityMode, InitializeImagePixels, colorSpace, colorType));
}
virtual ~UnacceleratedSurfaceFactory() {}
@@ -950,16 +951,15 @@ bool HTMLCanvasElement::shouldUseDisplayList(const IntSize& deviceSize) {
}
std::unique_ptr<ImageBufferSurface>
-HTMLCanvasElement::createWebGLImageBufferSurface(
- const IntSize& deviceSize,
- OpacityMode opacityMode,
- sk_sp<SkColorSpace> colorSpace) {
+HTMLCanvasElement::createWebGLImageBufferSurface(const IntSize& deviceSize,
+ OpacityMode opacityMode) {
DCHECK(is3D());
// If 3d, but the use of the canvas will be for non-accelerated content
// then make a non-accelerated ImageBuffer. This means copying the internal
// Image will require a pixel readback, but that is unavoidable in this case.
auto surface = wrapUnique(new AcceleratedImageBufferSurface(
- deviceSize, opacityMode, std::move(colorSpace)));
+ deviceSize, opacityMode, m_context->skColorSpace(),
+ m_context->colorType()));
if (surface->isValid())
return std::move(surface);
return nullptr;
@@ -969,7 +969,6 @@ std::unique_ptr<ImageBufferSurface>
HTMLCanvasElement::createAcceleratedImageBufferSurface(
const IntSize& deviceSize,
OpacityMode opacityMode,
- sk_sp<SkColorSpace> colorSpace,
int* msaaSampleCount) {
if (!shouldAccelerate(deviceSize))
return nullptr;
@@ -994,7 +993,8 @@ HTMLCanvasElement::createAcceleratedImageBufferSurface(
std::unique_ptr<ImageBufferSurface> surface =
wrapUnique(new Canvas2DImageBufferSurface(
std::move(contextProvider), deviceSize, *msaaSampleCount, opacityMode,
- Canvas2DLayerBridge::EnableAcceleration, std::move(colorSpace)));
+ Canvas2DLayerBridge::EnableAcceleration, m_context->skColorSpace(),
+ m_context->colorType()));
if (!surface->isValid()) {
CanvasMetrics::countCanvasContextUsage(
CanvasMetrics::GPUAccelerated2DCanvasImageBufferCreationFailed);
@@ -1009,12 +1009,11 @@ HTMLCanvasElement::createAcceleratedImageBufferSurface(
std::unique_ptr<ImageBufferSurface>
HTMLCanvasElement::createUnacceleratedImageBufferSurface(
const IntSize& deviceSize,
- OpacityMode opacityMode,
- sk_sp<SkColorSpace> colorSpace) {
+ OpacityMode opacityMode) {
if (shouldUseDisplayList(deviceSize)) {
auto surface = wrapUnique(new RecordingImageBufferSurface(
deviceSize, wrapUnique(new UnacceleratedSurfaceFactory), opacityMode,
- colorSpace));
+ m_context->skColorSpace(), m_context->colorType()));
if (surface->isValid()) {
CanvasMetrics::countCanvasContextUsage(
CanvasMetrics::DisplayList2DCanvasImageBufferCreated);
@@ -1026,7 +1025,8 @@ HTMLCanvasElement::createUnacceleratedImageBufferSurface(
auto surfaceFactory = wrapUnique(new UnacceleratedSurfaceFactory());
auto surface = surfaceFactory->createSurface(deviceSize, opacityMode,
- std::move(colorSpace));
+ m_context->skColorSpace(),
+ m_context->colorType());
if (surface->isValid()) {
CanvasMetrics::countCanvasContextUsage(
CanvasMetrics::Unaccelerated2DCanvasImageBufferCreated);
@@ -1063,14 +1063,13 @@ void HTMLCanvasElement::createImageBufferInternal(
if (externalSurface->isValid())
surface = std::move(externalSurface);
} else if (is3D()) {
- surface = createWebGLImageBufferSurface(size(), opacityMode,
- m_context->skColorSpace());
+ surface = createWebGLImageBufferSurface(size(), opacityMode);
} else {
- surface = createAcceleratedImageBufferSurface(
- size(), opacityMode, m_context->skColorSpace(), &msaaSampleCount);
- if (!surface)
- surface = createUnacceleratedImageBufferSurface(
- size(), opacityMode, m_context->skColorSpace());
+ surface = createAcceleratedImageBufferSurface(size(), opacityMode,
+ &msaaSampleCount);
+ if (!surface) {
+ surface = createUnacceleratedImageBufferSurface(size(), opacityMode);
+ }
}
if (!surface)
return;

Powered by Google App Engine
This is Rietveld 408576698