What WebKit previously did: Uint8ClampedArray is a subtype of Uint8Array, i.e. Uint8ClampedArray.prototype.__proto__ === Uint8Array.prototype.
I believe that Chrome still does what WebKit does. What Firefox does: Uint8ClampedArray is not a subtype of Uint8Array, i.e. Uint8ClampedArray.prototype.__proto__ === Object.prototype. What http://www.khronos.org/registry/typedarray/specs/latest/ says: Uint8ClampedArray implements ArrayBufferView; but that says nothing about its subtype relationship, or lack thereof, with Uint8Array. I prefer the Firefox semantics. Any objections? -Filip On Aug 13, 2013, at 11:19 AM, Filip Pizlo <[email protected]> wrote: > Hi everyone! > > For the past week or so I've been working on making typed arrays faster, use > less memory, and GC better. It involves moving typed arrays entirely into > JSC, and rewriting them so that they benefit from JSC object model > optimizations. > > Link: https://bugs.webkit.org/show_bug.cgi?id=119064 > > The short story is, if you're not on the Mac port, then I'll try to do my > best to make things work but I'm probably going to make some mistakes. I'm > probably about 48 hours away from landing this and I'll try to make myself > available to fix any fall-out. The things I'm most likely to get wrong are: > ensuring that the various code generators work on all build systems; ensuring > that the ~20-some files I've added and the ~20-sime files I've deleted, are > actually added/deleted correctly on all builds; and making sure that some of > the crazy template hacks that I've used work on all compilers. > > Why this is all worth it: > > It makes typed arrays faster: you can now allocate typed arrays up to 8x > faster if they're small, and up to 6x faster if they're big. Neutering no > longer requires walking all worlds. Wrapping and unwrapping an array buffer > no longer requires hash look-ups for the normal world. And some other stuff, > too. > > It makes typed arrays use less memory: previously a typed array could use as > many as 7 objects for each allocation; at best you'd get 5 (JS array buffer > view wrapper, native array buffer view wrapper, weak handle to link the two, > native array buffer, native array buffer contents). Now, it takes just 2 > objects in the common case (JS array buffer view and a copy-space backing > store) and 3 in the case of large ones (JS array buffer view, weak handle for > a finalizer, and a malloc'd backing store). You'll still get all of the > crazy objects - at most 6 of them - if you use the full power of typed array > APIs. With all of this in place, a typed array carries only 32 bytes of > overhead on 64-bit systems and 20 bytes of overhead on 32-bit systems. It > was *a lot* more than that before. > > It makes typed arrays manage memory properly: previously the GC didn't know > that typed arrays use memory. So, although the GC could free the memory that > typed arrays used, it wouldn't kick in properly in some cases. See > https://bugs.webkit.org/show_bug.cgi?id=119049 and > https://bugs.webkit.org/show_bug.cgi?id=114824. This patch fixes these > issues comprehensively. > > It makes the code more hackable: previously any attempt to optimize any typed > array hack required grappling with binding code generation, layering > violations that exposed the typed arrays to JSC JITs despite not being > defined in JSC, and a grab-back of helper code that the bindings magically > invoked. There was a lot of duplicated code to deal with the various types > of typed arrays. Now, typed arrays are all templatized; you usually only > write a piece of code once thanks to the wonders of template polymorphism. > > This also fixes a bunch of semantics issues, with how typed array fields work > in JS and when/where exceptions ought to be thrown. In this regard, I'm > basically attempting to match Firefox behavior since that's where the > standards appear to be going. > > I hope that I get all of this to work on all platforms on the first try. If > I don't, I apologize in advance, and I'll try to be around to help the > fall-out. > > -Filip_______________________________________________ > webkit-dev mailing list > [email protected] > https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-dev

