[webkit-dev] Canvas performance and memory usage
David Hyatt
hyatt at apple.com
Tue Aug 10 15:50:24 PDT 2010
On Aug 10, 2010, at 2:49 PM, David Hyatt wrote:
> Yeah, I think an even better way of abstracting it might be to make ImageBuffer:drawIntoContext(GraphicsContext*, ...). I think that would be simpler for people implementing something special. If we did that, then the image() accessor on ImageBuffer could probably just always be a deep copy (or copy-on-write).
>
> Getting rid of the graphicsContext->drawImage(imageBuffer->image()....) pattern would definitely be good though.
>
> I'm just really curious about the performance of canvas and whether it's better to have slower get/PutImageData or faster rendering otherwise. It all comes down to how people are using canvas. I suspect that get/PutImageData are really really popular.
I implemented ImageBuffer::drawIntoContext on Mac, and I switched the implementation of ImageBuffer to dynamically swap to a CGLayer (throwing away the bitmap context) if it can do so. Preliminary tests look very very good.
This benchmark for example:
http://themaninblue.com/experiment/AnimationBenchmark/canvas/
Jumped from 37fps to 85fps.
I'll need to see what happens with intensive get/PutImageData examples though before I declare victory, but it definitely looks like slowing down get/PutImageData is worth it if we can get performance gains like this!
dave
(hyatt at apple.com)
More information about the webkit-dev
mailing list