I notice canvas2d putImageData is quiet slow while enable gfx.canvas.azure.accelerated. I provide a sample test, http://jsfiddle.net/f0887pca/embedded/result/ We can compare it between enable and disable gfx.canvas.azure.accelerated. (On my MacOSX 10.11 MBP 13" late 2013 model, the result is 330 vs 17 ms)
(In reply to Daosheng Mu[:daoshengmu] from comment #0) > I notice canvas2d putImageData is quiet slow while enable > gfx.canvas.azure.accelerated. I provide a sample test, > http://jsfiddle.net/f0887pca/embedded/result/ > > We can compare it between enable and disable gfx.canvas.azure.accelerated. > (On my MacOSX 10.11 MBP 13" late 2013 model, the result is 330 vs 17 ms) There are two problems with this test. The first is that you don't actually have any code in the second loop for the fillRect case between where you're doing time measurements, so you're not actually measuring anything there. The second is that putImageData is always going to be slower than a simple solid color fill, since it will in the worst case have to do GPU uploads of the image data. We do try to de-optimize canvases from GPU back to software already if you do a large number of putImageData or getImageData calls on them. The 1x1 case could maybe be optimized despite this, but it is questionable whether we really care enough about this case to optimize it?
I think my first sample test is not good because it has too much dirty code. I give another one, https://jsfiddle.net/14pxqgtt/1/embedded/result/. As you mentioned, GPU render is much sensitive in draw call than software render. The strength of GPU render is color filling. But, I still notice similar phenomenon in my sample. It is not so significant, but I would like to keep finding if there is something I can improve it. In my sample test, the image size is 100 x 100 and emits draw calls ten times. Skia enable vs disable 1.450 ms 0.655 ms
Currently, I have some finding. That should happen difference at DrawTargetSkia::CopySurface. Comparison between CPU and GPU mode: 0.150 ms vs 0.419 ms at mCanvas->drawBitmapRect 0.122 ms vs 0.387 ms
Well. I notice it depends on ImageData size. If I change the size to be larger than 300 x 300, GPU mode would be better. CPU DrawTargetSkia::CopySurface 0.760 mCanvas->drawBitmapRect 0.735 GPU DrawTargetSkia::CopySurface 0.362 mCanvas->drawBitmapRect 0.249 I think this bug is not worth to move forward.
Status: NEW → RESOLVED
Last Resolved: 3 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.