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

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp

Issue 2572873002: Add ColorBehavior plumbing for 2D canvas drawImage (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/canvas2d/CanvasRenderingContext2D.h" 5 #include "modules/canvas2d/CanvasRenderingContext2D.h"
6 6
7 #include "core/dom/Document.h" 7 #include "core/dom/Document.h"
8 #include "core/fetch/MemoryCache.h" 8 #include "core/fetch/MemoryCache.h"
9 #include "core/frame/FrameView.h" 9 #include "core/frame/FrameView.h"
10 #include "core/frame/ImageBitmap.h" 10 #include "core/frame/ImageBitmap.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 intptr_t getGlobalGPUMemoryUsage() const { 100 intptr_t getGlobalGPUMemoryUsage() const {
101 return ImageBuffer::getGlobalGPUMemoryUsage(); 101 return ImageBuffer::getGlobalGPUMemoryUsage();
102 } 102 }
103 unsigned getGlobalAcceleratedImageBufferCount() const { 103 unsigned getGlobalAcceleratedImageBufferCount() const {
104 return ImageBuffer::getGlobalAcceleratedImageBufferCount(); 104 return ImageBuffer::getGlobalAcceleratedImageBufferCount();
105 } 105 }
106 intptr_t getCurrentGPUMemoryUsage() const { 106 intptr_t getCurrentGPUMemoryUsage() const {
107 return canvasElement().buffer()->getGPUMemoryUsage(); 107 return canvasElement().buffer()->getGPUMemoryUsage();
108 } 108 }
109 109
110 void createContext(OpacityMode); 110 void createContext(OpacityMode, String colorSpace = String());
111 void TearDown(); 111 void TearDown();
112 void unrefCanvas(); 112 void unrefCanvas();
113 PassRefPtr<Canvas2DLayerBridge> makeBridge( 113 PassRefPtr<Canvas2DLayerBridge> makeBridge(
114 std::unique_ptr<FakeWebGraphicsContext3DProvider>, 114 std::unique_ptr<FakeWebGraphicsContext3DProvider>,
115 const IntSize&, 115 const IntSize&,
116 Canvas2DLayerBridge::AccelerationMode); 116 Canvas2DLayerBridge::AccelerationMode);
117 117
118 private: 118 private:
119 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; 119 std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
120 Persistent<Document> m_document; 120 Persistent<Document> m_document;
(...skipping 30 matching lines...) Expand all
151 StringOrCanvasGradientOrCanvasPattern& alphaGradient() { 151 StringOrCanvasGradientOrCanvasPattern& alphaGradient() {
152 return m_wrapGradients->m_alphaGradient; 152 return m_wrapGradients->m_alphaGradient;
153 } 153 }
154 }; 154 };
155 155
156 CanvasRenderingContext2DTest::CanvasRenderingContext2DTest() 156 CanvasRenderingContext2DTest::CanvasRenderingContext2DTest()
157 : m_wrapGradients(WrapGradients::create()), 157 : m_wrapGradients(WrapGradients::create()),
158 m_opaqueBitmap(IntSize(10, 10), OpaqueBitmap), 158 m_opaqueBitmap(IntSize(10, 10), OpaqueBitmap),
159 m_alphaBitmap(IntSize(10, 10), TransparentBitmap) {} 159 m_alphaBitmap(IntSize(10, 10), TransparentBitmap) {}
160 160
161 void CanvasRenderingContext2DTest::createContext(OpacityMode opacityMode) { 161 void CanvasRenderingContext2DTest::createContext(OpacityMode opacityMode,
162 String colorSpace) {
162 String canvasType("2d"); 163 String canvasType("2d");
163 CanvasContextCreationAttributes attributes; 164 CanvasContextCreationAttributes attributes;
164 attributes.setAlpha(opacityMode == NonOpaque); 165 attributes.setAlpha(opacityMode == NonOpaque);
166 if (!colorSpace.isEmpty())
167 attributes.setColorSpace(colorSpace);
165 m_canvasElement->getCanvasRenderingContext(canvasType, attributes); 168 m_canvasElement->getCanvasRenderingContext(canvasType, attributes);
166 } 169 }
167 170
168 void CanvasRenderingContext2DTest::SetUp() { 171 void CanvasRenderingContext2DTest::SetUp() {
169 Page::PageClients pageClients; 172 Page::PageClients pageClients;
170 fillWithEmptyClients(pageClients); 173 fillWithEmptyClients(pageClients);
171 m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600), &pageClients); 174 m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600), &pageClients);
172 m_document = &m_dummyPageHolder->document(); 175 m_document = &m_dummyPageHolder->document();
173 m_document->documentElement()->setInnerHTML( 176 m_document->documentElement()->setInnerHTML(
174 "<body><canvas id='c'></canvas></body>"); 177 "<body><canvas id='c'></canvas></body>");
(...skipping 989 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 canvasElement().buffer()->disableAcceleration(); 1167 canvasElement().buffer()->disableAcceleration();
1165 EXPECT_FALSE(canvasElement().buffer()->isAccelerated()); 1168 EXPECT_FALSE(canvasElement().buffer()->isAccelerated());
1166 1169
1167 context->fillRect(10, 10, 100, 100); 1170 context->fillRect(10, 10, 100, 100);
1168 1171
1169 EXPECT_EQ(0, getCurrentGPUMemoryUsage()); 1172 EXPECT_EQ(0, getCurrentGPUMemoryUsage());
1170 EXPECT_EQ(0, getGlobalGPUMemoryUsage()); 1173 EXPECT_EQ(0, getGlobalGPUMemoryUsage());
1171 EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount()); 1174 EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount());
1172 } 1175 }
1173 1176
1177 TEST_F(CanvasRenderingContext2DTest,
1178 LegacyColorSpaceUsesGlobalTargetColorBehavior) {
1179 // Set the global target color space to something distinctly recognizable (not
1180 // srgb)
1181 sk_sp<SkColorSpace> savedGlobalTargetColorSpace =
1182 ColorBehavior::globalTargetColorSpace();
1183 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1184 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1185 bool savedColorCorrectRenderingEnabled =
1186 RuntimeEnabledFeatures::colorCorrectRenderingEnabled();
1187
1188 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(false);
1189 createContext(NonOpaque, "legacy-srgb");
1190 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1191 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1192 EXPECT_TRUE(
1193 SkColorSpace::Equals(ColorBehavior::globalTargetColorSpace().get(),
1194 behavior.targetColorSpace().get()));
1195
1196 // Restore global state to avoid interfering with other tests
1197 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1198 savedGlobalTargetColorSpace);
1199 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(
1200 savedColorCorrectRenderingEnabled);
1201 }
1202
1203 TEST_F(CanvasRenderingContext2DTest,
1204 LegacyColorSpaceUsesSRGBWhenColorCorrectRenderingEnabled) {
1205 // Set the global target color space to something distinctly recognizable (not
1206 // srgb)
1207 sk_sp<SkColorSpace> savedGlobalTargetColorSpace =
1208 ColorBehavior::globalTargetColorSpace();
1209 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1210 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1211 bool savedColorCorrectRenderingEnabled =
1212 RuntimeEnabledFeatures::colorCorrectRenderingEnabled();
1213
1214 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(true);
1215 createContext(NonOpaque, "legacy-srgb");
1216 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1217 sk_sp<SkColorSpace> srgbColorSpace =
1218 SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
1219 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1220 EXPECT_TRUE(SkColorSpace::Equals(srgbColorSpace.get(),
1221 behavior.targetColorSpace().get()));
1222
1223 // Restore global state to avoid interfering with other tests
1224 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1225 savedGlobalTargetColorSpace);
1226 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(
1227 savedColorCorrectRenderingEnabled);
1228 }
1229
1230 TEST_F(CanvasRenderingContext2DTest,
1231 SRGBColorSpaceUsesTransformToSRGBColorBehavior) {
1232 // Set the global target color space to something distinctly recognizable (not
1233 // srgb)
1234 sk_sp<SkColorSpace> savedGlobalTargetColorSpace =
1235 ColorBehavior::globalTargetColorSpace();
1236 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1237 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1238
1239 createContext(NonOpaque, "srgb");
1240 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1241 sk_sp<SkColorSpace> srgbColorSpace =
1242 SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
1243 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1244 EXPECT_TRUE(SkColorSpace::Equals(srgbColorSpace.get(),
1245 behavior.targetColorSpace().get()));
1246
1247 // Restore global state to avoid interfering with other tests
1248 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1249 savedGlobalTargetColorSpace);
1250 }
1251
1252 TEST_F(CanvasRenderingContext2DTest,
1253 LinearRGBColorSpaceUsesTransformToLinearSRGBColorBehavior) {
1254 // Set the global target color space to something distinctly recognizable (not
1255 // srgb)
1256 sk_sp<SkColorSpace> savedGlobalTargetColorSpace =
1257 ColorBehavior::globalTargetColorSpace();
1258 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1259 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1260
1261 createContext(NonOpaque, "linear-rgb");
1262 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1263 sk_sp<SkColorSpace> linearSrgbColorSpace =
1264 SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named);
1265 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1266 EXPECT_TRUE(SkColorSpace::Equals(linearSrgbColorSpace.get(),
1267 behavior.targetColorSpace().get()));
1268
1269 // Restore global state to avoid interfering with other tests
1270 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1271 savedGlobalTargetColorSpace);
1272 }
1273
1174 } // namespace blink 1274 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698