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 (hy...@apple.com) _______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev