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

Unified Diff: third_party/WebKit/LayoutTests/virtual/color_space/fast/canvas/color-space/canvas-createPutGetImageData-colorManaged.html

Issue 2797213002: Fix BaseRenderingContext2D create/put/get-ImageData() for color managed canvas (Closed)
Patch Set: Rebaseline Created 3 years, 8 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/LayoutTests/virtual/color_space/fast/canvas/color-space/canvas-createPutGetImageData-colorManaged.html
diff --git a/third_party/WebKit/LayoutTests/virtual/color_space/fast/canvas/color-space/canvas-createPutGetImageData-colorManaged.html b/third_party/WebKit/LayoutTests/virtual/color_space/fast/canvas/color-space/canvas-createPutGetImageData-colorManaged.html
new file mode 100644
index 0000000000000000000000000000000000000000..78494cb46ed80e2fbdb7a4007f989943fcb39640
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/color_space/fast/canvas/color-space/canvas-createPutGetImageData-colorManaged.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<body>
+<script src="../../../../../resources/testharness.js"></script>
+<script src="../../../../../resources/testharnessreport.js"></script>
+<script>
+
+var xWidth = xHeight = 10;
+
+function checkImageData(canvasColorSettings, imageData) {
+ var imageDataColorSettings = imageData.getColorSettings();
+ //console.log(canvasColorSettings);
+ console.log(imageDataColorSettings);
+
+ assert_equals(canvasColorSettings.colorSpace, imageDataColorSettings.colorSpace);
+ if (canvasColorSettings.pixelFormat == "8-8-8-8") {
+ //console.log("8-8-8-8 -> ");
+ assert_equals("uint8", imageDataColorSettings.storageFormat);
+ assert_equals(imageData.data.length, 4 * xWidth * xHeight);
+ } else {
+ //console.log("float16 -> ");
+ assert_equals("float32", imageDataColorSettings.storageFormat);
+ assert_equals(imageData.dataUnion.length, 4 * xWidth * xHeight);
+ }
+}
+
+// Test createImageData when the canvas is color managed
+var helperImageData = new ImageData(xWidth, xHeight);
+function runTestCreateImageData(canvasColorSettings) {
+ var aCanvas = document.createElement("canvas");
+ aCanvas.width = xWidth;
+ aCanvas.height = xHeight;
+ var ctx = aCanvas.getContext('2d', canvasColorSettings);
+ var imageData = ctx.createImageData(xWidth, xHeight);
+ checkImageData(canvasColorSettings, imageData);
+
+ imageData = ctx.createImageData(helperImageData);
+ checkImageData(canvasColorSettings, imageData);
+}
+
+var testScenariosCreateImageData = [
+ ["Test color managed cretateImageData: {srgb, 8-8-8-8} -> {srgb, uint8}", {colorSpace: "srgb", pixelFormat: "8-8-8-8"}],
+ ["Test color managed cretateImageData: {srgb, float16} -> {srgb, float32}", {colorSpace: "srgb", pixelFormat: "float16"}],
+ ["Test color managed cretateImageData: {rec2020, float16} -> {rec2020, float32}", {colorSpace: "rec2020", pixelFormat: "float16"}],
+ ["Test color managed cretateImageData: {p3, float16} -> {p3, float32}", {colorSpace: "p3", pixelFormat: "float16"}],
+];
+
+//generate_tests(runTestCreateImageData, testScenariosCreateImageData);
+
+// Test getImageData when the canvas is color managed
+function runTestGetImageData(canvasColorSettings) {
+ var aCanvas = document.createElement("canvas");
+ aCanvas.width = xWidth;
+ aCanvas.height = xHeight;
+ var ctx = aCanvas.getContext('2d', canvasColorSettings);
+ var imageData = ctx.getImageData(0, 0, xWidth, xHeight);
+ checkImageData(canvasColorSettings, imageData);
+}
+
+var testScenariosGetImageData = [
+// ["Test color managed getImageData: {srgb, 8-8-8-8} -> {srgb, uint8}", {colorSpace: "srgb", pixelFormat: "8-8-8-8"}],
+ ["Test color managed getImageData: {srgb, float16} -> {srgb, float32}", {colorSpace: "srgb", pixelFormat: "float16"}],
+// ["Test color managed getImageData: {rec2020, float16} -> {rec2020, float32}", {colorSpace: "rec2020", pixelFormat: "float16"}],
+// ["Test color managed getImageData: {p3, float16} -> {p3, float32}", {colorSpace: "p3", pixelFormat: "float16"}],
+];
+
+generate_tests(runTestGetImageData, testScenariosGetImageData);
+
+// Test putImageData when the canvas is color managed.
+// This test passes if differen possible calls do not crash. To avoid hard
+// coded expected results that need to get synced after related Skia updates,
+// the output correcteness is verified as a unit test. Please see:
+// CanvasRenderingContext2DTest::ColorManagedGetPutImageData
+
+var dataU8 = new Uint8ClampedArray(4 * xWidth * xHeight);
+var dataU16 = new Uint16Array(4 * xWidth * xHeight);
+var dataF32 = new Float32Array(4 * xWidth * xHeight);
+function prepareDataArrays() {
+ for (i = 0; i < 4 * xWidth * xHeight; i++) {
+ dataU8[i] = (i % 4 == 3) ? 255 : i % 256;
+ dataU16[i] = dataU8[i] * 257;
+ dataF32[i] = dataU8[i] / 255.0;
+ }
+}
+
+var testScenariosPutImageData = [];
+function prepareTestScenariosPutImageData() {
+ var colorSpaces = ["srgb", "p3", "rec2020"];
+ var imageDataStorageFormats = ["uint8", "uint16", "float32"];
+ var canvasPixelFormats = ["8-8-8-8", "float16"];
+
+ for (i = 0; i < colorSpaces.length; i++)
+ for (j = 0; j < imageDataStorageFormats.length; j++)
+ for (k = 0; k < colorSpaces.length; k++)
+ for (l = 0; l < canvasPixelFormats.length; l++) {
+ testTitle = "Test color managed putImageData: ".concat(
+ "{", colorSpaces[i], ", ", imageDataStorageFormats[j], "} -> {", colorSpaces[k],
+ ", ", canvasPixelFormats[l], "}");
+ imageDataColorSettings =
+ {colorSpace: colorSpaces[i], storageFormat: imageDataStorageFormats[j]};
+ canvasColorSettings =
+ {colorSpace: colorSpaces[k], pixelFormat: canvasPixelFormats[l]};
+ testScenariosPutImageData.push([testTitle, imageDataColorSettings, canvasColorSettings]);
+ }
+}
+
+function createAndPutImageData(data, imageDataColorSettings, canvasColorSettings) {
+ // create color managed canvas
+ var aCanvas = document.createElement("canvas");
+ aCanvas.width = xWidth;
+ aCanvas.height = xHeight;
+ var ctx = aCanvas.getContext('2d', canvasColorSettings);
+ // create color managed ImageData
+ var imageData = ctx.createImageData(data, xWidth, xHeight, imageDataColorSettings);
+ // put image data into canvas. test succeeds if this does not crash.
+ ctx.putImageData(imageData, 0, 0);
+}
+
+function runTestPutImageData(imageDataColorSettings, canvasColorSettings) {
+ createAndPutImageData(dataU8, imageDataColorSettings, canvasColorSettings);
+ createAndPutImageData(dataU16, imageDataColorSettings, canvasColorSettings);
+ createAndPutImageData(dataF32, imageDataColorSettings, canvasColorSettings);
+}
+
+prepareDataArrays();
+prepareTestScenariosPutImageData();
+//generate_tests(runTestPutImageData, testScenariosPutImageData);
+
+</script>
+</body>

Powered by Google App Engine
This is Rietveld 408576698