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

Unified Diff: third_party/WebKit/LayoutTests/virtual/threaded/fast/canvas-toBlob/canvas-createImageBitmap-blob-in-workers.html

Issue 1792623002: Revise layout tests to avoid race condition (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits Created 4 years, 9 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/threaded/fast/canvas-toBlob/canvas-createImageBitmap-blob-in-workers.html
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/canvas-toBlob/canvas-createImageBitmap-blob-in-workers.html b/third_party/WebKit/LayoutTests/virtual/threaded/fast/canvas-toBlob/canvas-createImageBitmap-blob-in-workers.html
index c4156ea221ae016ec9814fad7bb0c24406d9f5e2..39b3f2aed5d9df49d46494203a6f6c266b1c66db 100644
--- a/third_party/WebKit/LayoutTests/virtual/threaded/fast/canvas-toBlob/canvas-createImageBitmap-blob-in-workers.html
+++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/canvas-toBlob/canvas-createImageBitmap-blob-in-workers.html
@@ -6,13 +6,12 @@
<body>
<script>
jsTestIsAsync = true;
-var worker = startWorker('../../../../fast/canvas/resources/canvas-createImageBitmap-blob-in-workers.js');
+var worker = new Worker('../../../../fast/canvas/resources/canvas-createImageBitmap-blob-in-workers.js');
-description('Test createImageBitmap with blob in workers.');
+description('Test race condition for createImageBitmap from blob in workers and main.');
var imgWidth = 20;
var imgHeight = 20;
-var imageData2;
var numOfBitmaps = 5;
var bitmapArray = [];
@@ -35,48 +34,57 @@ function compareImageData(data1, data2)
}
}
-var newImg = new Image();
-newImg.onload = function() {
- var canvas2 = document.createElement("canvas");
- var ctx2 = canvas2.getContext("2d");
- ctx2.drawImage(newImg, 0, 0, imgWidth, imgHeight);
- imageData2 = ctx2.getImageData(0, 0, imgWidth, imgHeight).data;
-
- var canvas3 = document.createElement("canvas");
- var ctx3 = canvas3.getContext("2d");
- for (var i = 0; i < numOfBitmaps; i++) {
- ctx3.clearRect(0, 0, imgWidth, imgHeight);
- ctx3.drawImage(bitmapArray[i], 0, 0, imgWidth, imgHeight);
- var imageData = ctx3.getImageData(0, 0, imgWidth, imgHeight).data;
- compareImageData(imageData, imageData2);
+var getMessageFromWorker = new Promise((resolve, reject) => {
+ function onMessage(e) {
+ resolve(e.data.data);
+ worker.removeEventListener("message", onMessage);
}
+ worker.addEventListener("message", onMessage);
+});
- worker.onmessage = function(e) {
- var newImageBitmap = e.data.data;
- ctx3.clearRect(0, 0, imgWidth, imgHeight);
- ctx3.drawImage(newImageBitmap, 0, 0, imgWidth, imgHeight);
- var imageData = ctx3.getImageData(0, 0, imgWidth, imgHeight).data;
- compareImageData(imageData, imageData2);
- testPassed("ImageBitmaps created from blob in worker and in main have the same pixel data");
- finishJSTest();
- }
-}
-
+// check that the created ImageBitmaps from worker and main have the same pixel
+// data as the source, which is the canvas1.toBlob
+var newImg = new Image();
canvas1.toBlob(function(blob) {
worker.postMessage(blob);
- var setImgSrc = false;
for (var i = 0; i < numOfBitmaps; i++) {
createImageBitmap(blob).then(imageBitmap => {
bitmapArray.push(imageBitmap);
- if (i >= numOfBitmaps - 1 && setImgSrc == false) {
+ if (bitmapArray.length == numOfBitmaps) {
var url = URL.createObjectURL(blob);
newImg.src = url;
- setImgSrc = true;
}
});
}
});
+var imageLoaded = new Promise((resolve, reject) => {
+ newImg.onload = function() {
+ var canvas2 = document.createElement("canvas");
+ var ctx2 = canvas2.getContext("2d");
+ ctx2.drawImage(newImg, 0, 0, imgWidth, imgHeight);
+ resolve(ctx2.getImageData(0, 0, imgWidth, imgHeight).data);
+ };
+});
+
+Promise.all([imageLoaded, getMessageFromWorker]).then(([imageDataFromImg, imageBitmapFromWorker]) => {
+ var canvas3 = document.createElement("canvas");
+ var ctx3 = canvas3.getContext("2d");
+ for (var i = 0; i < numOfBitmaps; i++) {
+ ctx3.clearRect(0, 0, imgWidth, imgHeight);
+ ctx3.drawImage(bitmapArray[i], 0, 0, imgWidth, imgHeight);
+ var imageData = ctx3.getImageData(0, 0, imgWidth, imgHeight).data;
+ compareImageData(imageData, imageDataFromImg);
+ }
+
+ ctx3.clearRect(0, 0, imgWidth, imgHeight);
+ ctx3.drawImage(imageBitmapFromWorker, 0, 0, imgWidth, imgHeight);
+ var imageData = ctx3.getImageData(0, 0, imgWidth, imgHeight).data;
+ compareImageData(imageData, imageDataFromImg);
+ testPassed("ImageBitmaps created from blob in worker and in main have the same pixel data");
+ finishJSTest();
+});
+
</script>
</body>
</html>

Powered by Google App Engine
This is Rietveld 408576698