[whatwg] createImageData
Vladimir Vukicevic
vladimir at pobox.com
Tue May 13 15:50:02 PDT 2008
On May 13, 2008, at 3:37 PM, Oliver Hunt wrote:
>>> That said I still don't believe custom objects should be allowed,
>>> aside from the resolution (which may or may not be relevant) and
>>> performance issues, a custom object with a generic JS array,
>>> rather than an ImageData object will have different behaviour -- a
>>> proper ImageData will clamp on assignment, and throw in cases that
>>> a custom object won't.
>>
>> That verification seems odd; doing those checks (clamping,
>> conversion to number) on every single pixel assignment is going the
>> wrong direction for performance -- you really want to validate
>> everything at once.
> But by delaying clamping, etc you are requiring that the backing
> store be an array of boxed values, leading to increased memory
> usage, increased indirection, and increasing the cost of the final
> blit.
That's an implementation detail, I guess..
> My experience implementing this in WebKit showed a pure byte array
> backing store was significantly faster than using boxed values.
Faster for which operation, though? The put, or the actual
manipulation? It's a tradeoff, really; if you're doing limited pixel
manipulation, but lots of putImageData, you can optimize that directly
by just calling putImageData once to an offscreen canvas and then
blitting that with drawImage. If you're doing lots of pixel
manipulation but only one putImageData, I guess you can use a JS array
for your intermediate ops to avoid the checking overhead, and set the
image data pixels all at once (though again paying the checking
penalty per pixel), but having cheap putImageData.
Throwing the error at putImageData time lets the implementation
optimize in whatever way is most convenient/performant (either at
pixel operation time by setting an error bit in the ImageData object
which is checked by putImageData, or at putImageData time), and is
(IMO) more flexible.. given that errors are an exceptional case, I
don't think the spec should force the checking per pixel.
- Vlad
More information about the whatwg
mailing list