[V8] Generalize external object resources
authorAaron Kennedy <aaron.kennedy@nokia.com>
Tue, 4 Oct 2011 06:06:09 +0000 (16:06 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 1 Mar 2012 11:03:40 +0000 (12:03 +0100)
commitab8f129b865ce22e72ad2ad6025d94cc8151b2b3
treed9f79b9f7fb84b27677795f719cfd269042e889a
parent0f5a90b8861ce6c189fc980154ec14a85e2a4c13
[V8] Generalize external object resources

V8 was already able to manage and finalize an external string
resource.  This change generalizes that mechanism to handle a
single generic external resource - a v8::Object::ExternalResource
derived instance - on normal JSObject's.

This is useful for mapping C++ objects to JS objects where the
C++ object's memory is effectively owned by the JS Object, and
thus needs to destroyed when the JS Object is garbage collected.
The V8 mailing list suggests using a weak persistent handle for
this purpose, but that seems to incur a fairly massive performance
penalty for short lived objects as weak persistent handle callbacks
are not called until the object has been promoted into the old
object space.

Change-Id: I3d7b5fe4ca6e37d49c92f3314b80d42bd4c84fcd
Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
src/3rdparty/v8/include/v8.h
src/3rdparty/v8/src/api.cc
src/3rdparty/v8/src/factory.cc
src/3rdparty/v8/src/heap-inl.h
src/3rdparty/v8/src/heap.cc
src/3rdparty/v8/src/heap.h
src/3rdparty/v8/src/mark-compact.cc
src/3rdparty/v8/src/objects-inl.h
src/3rdparty/v8/src/objects.h