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

Unified Diff: third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js

Issue 1355333005: Implement Asynchronous image encoding for Canvas.toBlob (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change async func to static so no need worry if canvas instance does not live long enough Created 5 years, 3 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/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js b/third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c94c048e8baa5a317a4d7a1b26505d57e0568dd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/script-tests/canvas-toBlob-toDataURL-race.js
@@ -0,0 +1,70 @@
+if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+}
+
+var numToBlobCalls = 9;
+var numToDataURLCalls = 3;
+var testImages = [];
+var canvasCtxs = [];
+
+// Create an original canvas with content
+var canvas = document.createElement("canvas");
+var ctx = canvas.getContext("2d");
+ctx.fillStyle = "#EE21AF";
+ctx.fillRect(0, 0, 2500, 1750);
+
+function testIfAllImagesAreCorrect()
+{
+ // All resultant images should be the same as both async and main threads use the same image encoder
+ var imageMatched = true;
+ var firstImageData = canvasCtxs[0].getImageData(0, 0, 2500, 1750).data;
+ for (var i = 1; i < (numToBlobCalls + numToDataURLCalls); i++)
+ {
+ var nextImageData = canvasCtxs[i].getImageData(0, 0, 2500, 1750).data;
+ for (var k = 0; k < firstImageData.length; k++)
+ {
+ if (firstImageData[k]!=nextImageData[k])
+ {
+ imageMatched = false;
+ break;
+ }
+ }
+ if (!imageMatched)
+ break;
+ }
+ if (imageMatched)
+ testPassed("All images encoded by both async and main threads match one another");
+ else
+ testFailed("Not all images encoded by async and main threads match one another");
+}
+
+var counter = numToBlobCalls + numToDataURLCalls;
+function onCanvasDrawCompleted(ctx_test)
+{
+ counter = counter - 1;
+ if (counter == 0) {
+ testIfAllImagesAreCorrect();
+ if (window.testRunner)
+ testRunner.notifyDone();
+ }
+}
+
+function createTestCase(i)
+{
+ var canvas_test = document.createElement("canvas");
+ var ctx_test = canvas_test.getContext("2d");
+ canvasCtxs[i] = ctx_test;
+
+ var newImg = new Image();
+ newImg.onload = function() {
+ ctx_test.drawImage(newImg, 0, 0, 2500, 1750);
+ onCanvasDrawCompleted(ctx_test);
+ }
+ testImages[i] = newImg;
+}
+
+for (var i = 0; i < (numToBlobCalls + numToDataURLCalls); i++)
+{
+ createTestCase(i);
+}

Powered by Google App Engine
This is Rietveld 408576698