Chromium Code Reviews| 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..21a43883e307a330f91f3572beb246df066f11b8 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,55 @@ 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); |
| - } |
| - |
| - 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(); |
| +var getMessageFromWorker = new Promise((resolve, reject) => { |
| + function onMessage(e) { |
| + resolve(e.data.data); |
| + worker.removeEventListener("message", onMessage); |
| } |
| -} |
| + worker.addEventListener("message", onMessage); |
| +}); |
| +var newImg = new Image(); |
|
jbroman
2016/03/14 14:58:42
nit: Not new to this CL, but I'm a little confused
|
| 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); |
| + } |
|
jbroman
2016/03/14 14:58:42
super-nit: semicolon on this line?
|
| +}); |
| + |
| +Promise.all([imageLoaded, getMessageFromWorker]).then(([imageData2, newImageBitmap]) => { |
|
jbroman
2016/03/14 14:58:42
nit: The names "imageData" and "imageData2" make i
|
| + 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); |
| + } |
| + |
| + 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(); |
| +}); |
| + |
| </script> |
| </body> |
| </html> |