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

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

Issue 2660393002: Use gfx::ColorSpace instead of SkColorSpace in Blink (Closed)
Patch Set: Rebase (again) Created 3 years, 10 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 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/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
9 #include "core/frame/ImageBitmap.h" 9 #include "core/frame/ImageBitmap.h"
10 #include "core/html/HTMLCanvasElement.h" 10 #include "core/html/HTMLCanvasElement.h"
(...skipping 17 matching lines...) Expand all
28 #include "third_party/skia/include/core/SkColorSpaceXform.h" 28 #include "third_party/skia/include/core/SkColorSpaceXform.h"
29 #include "third_party/skia/include/core/SkImage.h" 29 #include "third_party/skia/include/core/SkImage.h"
30 #include "third_party/skia/include/core/SkSurface.h" 30 #include "third_party/skia/include/core/SkSurface.h"
31 #include "wtf/PtrUtil.h" 31 #include "wtf/PtrUtil.h"
32 #include <memory> 32 #include <memory>
33 33
34 using ::testing::Mock; 34 using ::testing::Mock;
35 35
36 namespace blink { 36 namespace blink {
37 37
38 namespace {
39
40 gfx::ColorSpace AdobeRGBColorSpace() {
41 return gfx::ColorSpace(gfx::ColorSpace::PrimaryID::ADOBE_RGB,
42 gfx::ColorSpace::TransferID::GAMMA22);
43 }
44
45 } // namespace
46
38 enum BitmapOpacity { OpaqueBitmap, TransparentBitmap }; 47 enum BitmapOpacity { OpaqueBitmap, TransparentBitmap };
39 48
40 class FakeImageSource : public CanvasImageSource { 49 class FakeImageSource : public CanvasImageSource {
41 public: 50 public:
42 FakeImageSource(IntSize, BitmapOpacity); 51 FakeImageSource(IntSize, BitmapOpacity);
43 52
44 PassRefPtr<Image> getSourceImageForCanvas(SourceImageStatus*, 53 PassRefPtr<Image> getSourceImageForCanvas(SourceImageStatus*,
45 AccelerationHint, 54 AccelerationHint,
46 SnapshotReason, 55 SnapshotReason,
47 const FloatSize&) const override; 56 const FloatSize&) const override;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 void CanvasRenderingContext2DTest::TearDown() { 217 void CanvasRenderingContext2DTest::TearDown() {
209 ThreadState::current()->collectGarbage( 218 ThreadState::current()->collectGarbage(
210 BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC); 219 BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
211 replaceMemoryCacheForTesting(m_globalMemoryCache.release()); 220 replaceMemoryCacheForTesting(m_globalMemoryCache.release());
212 } 221 }
213 222
214 PassRefPtr<Canvas2DLayerBridge> CanvasRenderingContext2DTest::makeBridge( 223 PassRefPtr<Canvas2DLayerBridge> CanvasRenderingContext2DTest::makeBridge(
215 std::unique_ptr<FakeWebGraphicsContext3DProvider> provider, 224 std::unique_ptr<FakeWebGraphicsContext3DProvider> provider,
216 const IntSize& size, 225 const IntSize& size,
217 Canvas2DLayerBridge::AccelerationMode accelerationMode) { 226 Canvas2DLayerBridge::AccelerationMode accelerationMode) {
218 return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, 227 return adoptRef(new Canvas2DLayerBridge(
219 NonOpaque, accelerationMode, nullptr, 228 std::move(provider), size, 0, NonOpaque, accelerationMode,
220 kN32_SkColorType)); 229 gfx::ColorSpace::CreateSRGB(), false, kN32_SkColorType));
221 } 230 }
222 231
223 //============================================================================ 232 //============================================================================
224 233
225 class FakeAcceleratedImageBufferSurfaceForTesting 234 class FakeAcceleratedImageBufferSurfaceForTesting
226 : public UnacceleratedImageBufferSurface { 235 : public UnacceleratedImageBufferSurface {
227 public: 236 public:
228 FakeAcceleratedImageBufferSurfaceForTesting(const IntSize& size, 237 FakeAcceleratedImageBufferSurfaceForTesting(const IntSize& size,
229 OpacityMode mode) 238 OpacityMode mode)
230 : UnacceleratedImageBufferSurface(size, mode), m_isAccelerated(true) {} 239 : UnacceleratedImageBufferSurface(size, mode), m_isAccelerated(true) {}
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 1144
1136 EXPECT_EQ(0, getCurrentGPUMemoryUsage()); 1145 EXPECT_EQ(0, getCurrentGPUMemoryUsage());
1137 EXPECT_EQ(0, getGlobalGPUMemoryUsage()); 1146 EXPECT_EQ(0, getGlobalGPUMemoryUsage());
1138 EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount()); 1147 EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount());
1139 } 1148 }
1140 1149
1141 TEST_F(CanvasRenderingContext2DTest, 1150 TEST_F(CanvasRenderingContext2DTest,
1142 LegacyColorSpaceUsesGlobalTargetColorBehavior) { 1151 LegacyColorSpaceUsesGlobalTargetColorBehavior) {
1143 // Set the global target color space to something distinctly recognizable (not 1152 // Set the global target color space to something distinctly recognizable (not
1144 // srgb) 1153 // srgb)
1145 sk_sp<SkColorSpace> savedGlobalTargetColorSpace = 1154 gfx::ColorSpace savedGlobalTargetColorSpace =
1146 ColorBehavior::globalTargetColorSpace(); 1155 ColorBehavior::globalTargetColorSpace();
1147 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1156 ColorBehavior::setGlobalTargetColorSpaceForTesting(AdobeRGBColorSpace());
1148 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1149 bool savedColorCorrectRenderingEnabled = 1157 bool savedColorCorrectRenderingEnabled =
1150 RuntimeEnabledFeatures::colorCorrectRenderingEnabled(); 1158 RuntimeEnabledFeatures::colorCorrectRenderingEnabled();
1151 1159
1152 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(false); 1160 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(false);
1153 createContext(NonOpaque, "legacy-srgb"); 1161 createContext(NonOpaque, "legacy-srgb");
1154 ColorBehavior behavior = context2d()->drawImageColorBehavior(); 1162 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1155 EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); 1163 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1156 EXPECT_TRUE( 1164 EXPECT_TRUE(ColorBehavior::globalTargetColorSpace() ==
1157 SkColorSpace::Equals(ColorBehavior::globalTargetColorSpace().get(), 1165 behavior.targetColorSpace());
1158 behavior.targetColorSpace().get()));
1159 1166
1160 // Restore global state to avoid interfering with other tests 1167 // Restore global state to avoid interfering with other tests
1161 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1168 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1162 savedGlobalTargetColorSpace); 1169 savedGlobalTargetColorSpace);
1163 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled( 1170 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(
1164 savedColorCorrectRenderingEnabled); 1171 savedColorCorrectRenderingEnabled);
1165 } 1172 }
1166 1173
1167 TEST_F(CanvasRenderingContext2DTest, 1174 TEST_F(CanvasRenderingContext2DTest,
1168 LegacyColorSpaceUsesSRGBWhenColorCorrectRenderingEnabled) { 1175 LegacyColorSpaceUsesSRGBWhenColorCorrectRenderingEnabled) {
1169 // Set the global target color space to something distinctly recognizable (not 1176 // Set the global target color space to something distinctly recognizable (not
1170 // srgb) 1177 // srgb)
1171 sk_sp<SkColorSpace> savedGlobalTargetColorSpace = 1178 gfx::ColorSpace savedGlobalTargetColorSpace =
1172 ColorBehavior::globalTargetColorSpace(); 1179 ColorBehavior::globalTargetColorSpace();
1173 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1180 ColorBehavior::setGlobalTargetColorSpaceForTesting(AdobeRGBColorSpace());
1174 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1175 bool savedColorCorrectRenderingEnabled = 1181 bool savedColorCorrectRenderingEnabled =
1176 RuntimeEnabledFeatures::colorCorrectRenderingEnabled(); 1182 RuntimeEnabledFeatures::colorCorrectRenderingEnabled();
1177 1183
1178 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(true); 1184 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(true);
1179 createContext(NonOpaque, "legacy-srgb"); 1185 createContext(NonOpaque, "legacy-srgb");
1180 ColorBehavior behavior = context2d()->drawImageColorBehavior(); 1186 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1181 sk_sp<SkColorSpace> srgbColorSpace =
1182 SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
1183 EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); 1187 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1184 EXPECT_TRUE(SkColorSpace::Equals(srgbColorSpace.get(), 1188 EXPECT_TRUE(gfx::ColorSpace::CreateSRGB() == behavior.targetColorSpace());
1185 behavior.targetColorSpace().get()));
1186 1189
1187 // Restore global state to avoid interfering with other tests 1190 // Restore global state to avoid interfering with other tests
1188 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1191 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1189 savedGlobalTargetColorSpace); 1192 savedGlobalTargetColorSpace);
1190 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled( 1193 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(
1191 savedColorCorrectRenderingEnabled); 1194 savedColorCorrectRenderingEnabled);
1192 } 1195 }
1193 1196
1194 TEST_F(CanvasRenderingContext2DTest, 1197 TEST_F(CanvasRenderingContext2DTest,
1195 SRGBColorSpaceUsesTransformToSRGBColorBehavior) { 1198 SRGBColorSpaceUsesTransformToSRGBColorBehavior) {
1196 // Set the global target color space to something distinctly recognizable (not 1199 // Set the global target color space to something distinctly recognizable (not
1197 // srgb) 1200 // srgb)
1198 sk_sp<SkColorSpace> savedGlobalTargetColorSpace = 1201 gfx::ColorSpace savedGlobalTargetColorSpace =
1199 ColorBehavior::globalTargetColorSpace(); 1202 ColorBehavior::globalTargetColorSpace();
1200 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1203 ColorBehavior::setGlobalTargetColorSpaceForTesting(AdobeRGBColorSpace());
1201 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1202 1204
1203 createContext(NonOpaque, "srgb"); 1205 createContext(NonOpaque, "srgb");
1204 ColorBehavior behavior = context2d()->drawImageColorBehavior(); 1206 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1205 sk_sp<SkColorSpace> srgbColorSpace =
1206 SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
1207 EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); 1207 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1208 EXPECT_TRUE(SkColorSpace::Equals(srgbColorSpace.get(), 1208 EXPECT_TRUE(gfx::ColorSpace::CreateSRGB() == behavior.targetColorSpace());
1209 behavior.targetColorSpace().get()));
1210 1209
1211 // Restore global state to avoid interfering with other tests 1210 // Restore global state to avoid interfering with other tests
1212 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1211 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1213 savedGlobalTargetColorSpace); 1212 savedGlobalTargetColorSpace);
1214 } 1213 }
1215 1214
1216 TEST_F(CanvasRenderingContext2DTest, 1215 TEST_F(CanvasRenderingContext2DTest,
1217 LinearRGBColorSpaceUsesTransformToLinearSRGBColorBehavior) { 1216 LinearRGBColorSpaceUsesTransformToLinearSRGBColorBehavior) {
1218 // Set the global target color space to something distinctly recognizable (not 1217 // Set the global target color space to something distinctly recognizable (not
1219 // srgb) 1218 // srgb)
1220 sk_sp<SkColorSpace> savedGlobalTargetColorSpace = 1219 gfx::ColorSpace savedGlobalTargetColorSpace =
1221 ColorBehavior::globalTargetColorSpace(); 1220 ColorBehavior::globalTargetColorSpace();
1222 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1221 ColorBehavior::setGlobalTargetColorSpaceForTesting(AdobeRGBColorSpace());
1223 SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named));
1224 1222
1225 createContext(NonOpaque, "linear-rgb"); 1223 createContext(NonOpaque, "linear-rgb");
1226 ColorBehavior behavior = context2d()->drawImageColorBehavior(); 1224 ColorBehavior behavior = context2d()->drawImageColorBehavior();
1227 sk_sp<SkColorSpace> linearSrgbColorSpace =
1228 SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named);
1229 EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); 1225 EXPECT_TRUE(behavior.isTransformToTargetColorSpace());
1230 EXPECT_TRUE(SkColorSpace::Equals(linearSrgbColorSpace.get(), 1226 EXPECT_TRUE(gfx::ColorSpace::CreateSCRGBLinear() ==
1231 behavior.targetColorSpace().get())); 1227 behavior.targetColorSpace());
1232 1228
1233 // Restore global state to avoid interfering with other tests 1229 // Restore global state to avoid interfering with other tests
1234 ColorBehavior::setGlobalTargetColorSpaceForTesting( 1230 ColorBehavior::setGlobalTargetColorSpaceForTesting(
1235 savedGlobalTargetColorSpace); 1231 savedGlobalTargetColorSpace);
1236 } 1232 }
1237 1233
1238 enum class ColorSpaceConversion : uint8_t { 1234 enum class ColorSpaceConversion : uint8_t {
1239 NONE = 0, 1235 NONE = 0,
1240 DEFAULT_NOT_COLOR_CORRECTED = 1, 1236 DEFAULT_NOT_COLOR_CORRECTED = 1,
1241 DEFAULT_COLOR_CORRECTED = 2, 1237 DEFAULT_COLOR_CORRECTED = 2,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 SkImage* convertedImage = 1313 SkImage* convertedImage =
1318 imageBitmap->bitmapImage() 1314 imageBitmap->bitmapImage()
1319 ->imageForCurrentFrame(ColorBehavior::ignore()) 1315 ->imageForCurrentFrame(ColorBehavior::ignore())
1320 .get(); 1316 .get();
1321 1317
1322 switch (colorSpaceConversion) { 1318 switch (colorSpaceConversion) {
1323 case ColorSpaceConversion::NONE: 1319 case ColorSpaceConversion::NONE:
1324 NOTREACHED(); 1320 NOTREACHED();
1325 break; 1321 break;
1326 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED: 1322 case ColorSpaceConversion::DEFAULT_NOT_COLOR_CORRECTED:
1327 colorSpace = ColorBehavior::globalTargetColorSpace(); 1323 colorSpace = ColorBehavior::globalTargetColorSpace().ToSkColorSpace();
1328 colorFormat = colorFormat32; 1324 colorFormat = colorFormat32;
1329 break; 1325 break;
1330 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED: 1326 case ColorSpaceConversion::DEFAULT_COLOR_CORRECTED:
1331 case ColorSpaceConversion::SRGB: 1327 case ColorSpaceConversion::SRGB:
1332 colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); 1328 colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named);
1333 colorFormat = colorFormat32; 1329 colorFormat = colorFormat32;
1334 break; 1330 break;
1335 case ColorSpaceConversion::LINEAR_RGB: 1331 case ColorSpaceConversion::LINEAR_RGB:
1336 colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named); 1332 colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named);
1337 colorType = SkColorType::kRGBA_F16_SkColorType; 1333 colorType = SkColorType::kRGBA_F16_SkColorType;
(...skipping 27 matching lines...) Expand all
1365 1361
1366 RuntimeEnabledFeatures::setExperimentalCanvasFeaturesEnabled( 1362 RuntimeEnabledFeatures::setExperimentalCanvasFeaturesEnabled(
1367 experimentalCanvasFeaturesRuntimeFlag); 1363 experimentalCanvasFeaturesRuntimeFlag);
1368 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled( 1364 RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(
1369 colorCorrectRenderingRuntimeFlag); 1365 colorCorrectRenderingRuntimeFlag);
1370 RuntimeEnabledFeatures::setColorCorrectRenderingDefaultModeEnabled( 1366 RuntimeEnabledFeatures::setColorCorrectRenderingDefaultModeEnabled(
1371 colorCorrectRenderingDefaultModeRuntimeFlag); 1367 colorCorrectRenderingDefaultModeRuntimeFlag);
1372 } 1368 }
1373 1369
1374 } // namespace blink 1370 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698