- From: Glenn Maynard <glenn@zewt.org>
 - Date: Thu, 2 Jun 2011 17:30:39 -0400
 - To: David Levin <levin@chromium.org>
 - Cc: Kenneth Russell <kbr@google.com>, Jonas Sicking <jonas@sicking.cc>, ben turner <bent.mozilla@gmail.com>, "public-webapps@w3.org" <public-webapps@w3.org>
 
On Thu, Jun 2, 2011 at 5:01 PM, David Levin <levin@chromium.org> wrote:
> It feels like this array of objects given to transfer may complicate (and
> slow down) both the implementation of this as well as the developer's use of
> it.
Even with thousands of objects, creating an array containing them is
quick (and only needs to be done once), and the implementation would
presumably convert it to a set internally for quick lookups.  I doubt
most use cases will transfer so many separate objects, though.
(And Ian keeps drilling into our head that implementation complexity
isn't a major concern, though I don't imagine converting a list of
objects to a hash table is complex.)
In the typical cases, this seems both simple for users and fast.
> It also raises questions when I see it. When I list an object there does it
> imply that all children are also transfered or do I have to list each of
> them explicitly as well?)
Objects with children wouldn't support transfer--you don't transfer a
Javascript array or a basic Object this way.
Note that ImageData's ImagePixelData isn't a "child" as far as
structured clone is concerned; only Array and Object are cloned
recursively.  If ImageData gains support for transfer, then you
wouldn't include the ImagePixelData in the list; only the ImageData
itself.  (DATA_CLONE_ERR should probably be thrown if an item is
marked for transfer that isn't supported by structured clone, to make
errors related to this more obvious.)
> Then I wonder what is the use case for this complexity.
> Why not something simpler like this?
>     port.postMessage({frameBuffer: frame}, {transfer: true, ports: [port]});
> where you can just say indicate that you want the message transfered.
Adding transfer support to more types in the future would become
backwards-incompatible.
-- 
Glenn Maynard
Received on Thursday, 2 June 2011 21:31:06 UTC