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

Side by Side Diff: third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageBitmap-structured-clone.html

Issue 2039983002: Change code path for structured cloning ImageBitmap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more comments Created 4 years, 5 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 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <body> 3 <body>
4 <canvas id="canvas" width="3" height="2"></canvas> 4 <canvas id="canvas" width="3" height="2"></canvas>
5 <script src="../../resources/js-test.js"></script> 5 <script src="../../resources/js-test.js"></script>
6 <script> 6 <script>
7 jsTestIsAsync = true; 7 jsTestIsAsync = true;
8 var worker = new Worker('./resources/canvas-ImageBitmap-structured-clone.js'); 8 var worker = new Worker('./resources/canvas-ImageBitmap-structured-clone.js');
9 9
10 description("Tests that ImageBitmap supports structured clone and that the pixel data survives the trip between main <--> worker"); 10 description("Tests that ImageBitmap supports structured clone and that the pixel data survives the trip between main <--> worker");
(...skipping 20 matching lines...) Expand all
31 } 31 }
32 32
33 function checkImageBitmap1() { 33 function checkImageBitmap1() {
34 shouldBe("bitmapWidth", "imageWidth1"); 34 shouldBe("bitmapWidth", "imageWidth1");
35 shouldBe("bitmapHeight", "imageHeight1"); 35 shouldBe("bitmapHeight", "imageHeight1");
36 36
37 // newImage is not necessary the same as imageData because of 37 // newImage is not necessary the same as imageData because of
38 // multiplying and dividing by alpha during the round trip, but 38 // multiplying and dividing by alpha during the round trip, but
39 // they should be close. 39 // they should be close.
40 // The alpha channel should be exactly the same. 40 // The alpha channel should be exactly the same.
41 compareImageData(newImage.data, image1.data); 41 compareImageData(newImage.data, imageData1);
42 } 42 }
43 43
44 function checkImageBitmap2() { 44 function checkImageBitmap2() {
45 shouldBe("bitmapWidth", "imageWidth2"); 45 shouldBe("bitmapWidth", "imageWidth2");
46 shouldBe("bitmapHeight", "imageHeight2"); 46 shouldBe("bitmapHeight", "imageHeight2");
47 47
48 compareImageData(newImage.data, image2.data); 48 compareImageData(newImage.data, imageData2);
49 } 49 }
50 50
51 function postToWorker(message, transferable) { 51 function postToWorker(message, transferable) {
52 return new Promise((resolve, reject) => { 52 return new Promise((resolve, reject) => {
53 function onMessage(e) { 53 function onMessage(e) {
54 resolve(e.data); 54 resolve(e.data);
55 worker.removeEventListener("message", onMessage); 55 worker.removeEventListener("message", onMessage);
56 } 56 }
57 worker.postMessage(message, transferable); 57 worker.postMessage(message, transferable);
58 worker.addEventListener("message", onMessage); 58 worker.addEventListener("message", onMessage);
59 }); 59 });
60 } 60 }
61 61
62 function getNewImageDataFromWorkerReply(newImageBitmap) 62 function getNewImageDataFromImageBitmap(newImageBitmap)
63 { 63 {
64 bitmapWidth = newImageBitmap.width; 64 bitmapWidth = newImageBitmap.width;
65 bitmapHeight = newImageBitmap.height; 65 bitmapHeight = newImageBitmap.height;
66 context.clearRect(0, 0, imageWidth1, imageHeight1); 66 context.clearRect(0, 0, imageWidth1, imageHeight1);
67 context.drawImage(newImageBitmap, 0, 0, bitmapWidth, bitmapHeight); 67 context.drawImage(newImageBitmap, 0, 0, bitmapWidth, bitmapHeight);
68 newImage = context.getImageData(0, 0, bitmapWidth, bitmapHeight); 68 newImage = context.getImageData(0, 0, bitmapWidth, bitmapHeight);
69 } 69 }
70 70
71 var imageWidth1 = 3; 71 var imageWidth1 = 3;
72 var imageHeight1 = 2; 72 var imageHeight1 = 2;
73 var imageWidth2 = 1; 73 var imageWidth2 = 1;
74 var imageHeight2 = 1; 74 var imageHeight2 = 1;
75 var bitmapWidth; 75 var bitmapWidth;
76 var bitmapHeight; 76 var bitmapHeight;
77 var imageBitmap1; 77 var imageBitmap1;
78 var imageBitmap2; 78 var imageBitmap2;
79 var newImage; 79 var newImage;
80 var imageData1;
81 var imageData2;
80 var image1 = new ImageData(new Uint8ClampedArray( 82 var image1 = new ImageData(new Uint8ClampedArray(
81 [255, 0, 0, 255, 83 [255, 0, 0, 255,
82 0, 255, 0, 255, 84 0, 255, 0, 255,
83 255, 255, 255, 127, 85 255, 255, 255, 127,
84 0, 0, 0, 64, 86 0, 0, 0, 64,
85 12, 34, 56, 64, 87 12, 34, 56, 64,
86 12, 34, 56, 127]), 88 12, 34, 56, 127]),
87 imageWidth1, imageHeight1); 89 imageWidth1, imageHeight1);
88 var image2 = new ImageData(new Uint8ClampedArray([255, 128, 64, 127]), imageWidt h2, imageHeight2); 90 var image2 = new ImageData(new Uint8ClampedArray([255, 128, 64, 127]), imageWidt h2, imageHeight2);
89 var context = document.getElementById("canvas").getContext("2d"); 91 var context = document.getElementById("canvas").getContext("2d");
90 92
91 var p1 = createImageBitmap(image1).then(function(image) {imageBitmap1 = image}); 93 var p1 = createImageBitmap(image1).then(function(image) {imageBitmap1 = image});
92 var p2 = createImageBitmap(image2, {imageOrientation: "none", premultiplyAlpha: "none"}).then(function(image) {imageBitmap2 = image}); 94 var p2 = createImageBitmap(image2, {imageOrientation: "none", premultiplyAlpha: "none"}).then(function(image) {imageBitmap2 = image});
93 Promise.all([p1, p2]).then(function() { 95 Promise.all([p1, p2]).then(function() {
96 getNewImageDataFromImageBitmap(imageBitmap1);
97 imageData1 = newImage.data;
98 getNewImageDataFromImageBitmap(imageBitmap2);
99 imageData2 = newImage.data;
100
94 bitmapWidth = imageBitmap1.width; 101 bitmapWidth = imageBitmap1.width;
95 bitmapHeight = imageBitmap1.height; 102 bitmapHeight = imageBitmap1.height;
96 shouldBe("bitmapWidth", "imageWidth1"); 103 shouldBe("bitmapWidth", "imageWidth1");
97 shouldBe("bitmapHeight", "imageHeight1"); 104 shouldBe("bitmapHeight", "imageHeight1");
98 105
99 var replyPromise = postToWorker(imageBitmap1); 106 var replyPromise = postToWorker(imageBitmap1);
100 107
101 // Structured cloning should not neuter the source ImageBitmap 108 // Structured cloning should not neuter the source ImageBitmap
102 bitmapWidth = imageBitmap1.width; 109 bitmapWidth = imageBitmap1.width;
103 bitmapHeight = imageBitmap1.height; 110 bitmapHeight = imageBitmap1.height;
104 shouldBe("bitmapWidth", "imageWidth1"); 111 shouldBe("bitmapWidth", "imageWidth1");
105 shouldBe("bitmapHeight", "imageHeight1"); 112 shouldBe("bitmapHeight", "imageHeight1");
106 113
107 return replyPromise.then(reply => { 114 return replyPromise.then(reply => {
108 getNewImageDataFromWorkerReply(reply); 115 getNewImageDataFromImageBitmap(reply);
109 checkImageBitmap1(); 116 checkImageBitmap1();
110 }); 117 });
111 }).then(function() { 118 }).then(function() {
112 var replyPromise = postToWorker(imageBitmap1, [imageBitmap1]); 119 var replyPromise = postToWorker(imageBitmap1, [imageBitmap1]);
113 120
114 // Transfer the ImageBitmap should neuter it 121 // Transfer the ImageBitmap should neuter it
115 bitmapWidth = imageBitmap1.width; 122 bitmapWidth = imageBitmap1.width;
116 bitmapHeight = imageBitmap1.height; 123 bitmapHeight = imageBitmap1.height;
117 shouldBe("bitmapWidth", "0"); 124 shouldBe("bitmapWidth", "0");
118 shouldBe("bitmapHeight", "0"); 125 shouldBe("bitmapHeight", "0");
119 126
120 return replyPromise.then(reply => { 127 return replyPromise.then(reply => {
121 getNewImageDataFromWorkerReply(reply); 128 getNewImageDataFromImageBitmap(reply);
122 checkImageBitmap1(); 129 checkImageBitmap1();
123 }); 130 });
124 }).then(function() { 131 }).then(function() {
125 var replyPromise = postToWorker(imageBitmap2); 132 var replyPromise = postToWorker(imageBitmap2);
126 133
127 // Structured cloning should not neuter the source ImageBitmap 134 // Structured cloning should not neuter the source ImageBitmap
128 bitmapWidth = imageBitmap2.width; 135 bitmapWidth = imageBitmap2.width;
129 bitmapHeight = imageBitmap2.height; 136 bitmapHeight = imageBitmap2.height;
130 shouldBe("bitmapWidth", "imageWidth2"); 137 shouldBe("bitmapWidth", "imageWidth2");
131 shouldBe("bitmapHeight", "imageHeight2"); 138 shouldBe("bitmapHeight", "imageHeight2");
132 139
133 return replyPromise.then(reply => { 140 return replyPromise.then(reply => {
134 getNewImageDataFromWorkerReply(reply); 141 getNewImageDataFromImageBitmap(reply);
135 checkImageBitmap2(); 142 checkImageBitmap2();
136 }); 143 });
137 }).then(finishJSTest, shouldNotBeCalled); 144 }).then(finishJSTest, shouldNotBeCalled);
138 </script> 145 </script>
139 </body> 146 </body>
140 </html> 147 </html>
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/TestExpectations ('k') | third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698