Chromium Code Reviews| Index: include/v8.h |
| diff --git a/include/v8.h b/include/v8.h |
| index db2178b73becb2c7ad76a5f28e8b81e4c14d1c33..053010e7bde738dc87302704d54055c86d281a21 100644 |
| --- a/include/v8.h |
| +++ b/include/v8.h |
| @@ -5361,6 +5361,53 @@ class V8_EXPORT PersistentHandleVisitor { // NOLINT |
| enum class MemoryPressureLevel { kNone, kModerate, kCritical }; |
| /** |
| + * Structure representing hidden fields of the v8 object. Embedder sets these |
| + * fields on wrapper creation to be able to access the object wrapped by the |
| + * wrapper. |
| + */ |
| +struct WrapperHiddenFields { |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
why not just std::pair<void*,void*>?
Marcel Hlopko
2016/03/30 18:51:12
Because I didn't know it exists :) Done.
|
| + WrapperHiddenFields(void* wrapper_info_ptr, void* wrapper_source_ptr) |
| + : wrapper_info(wrapper_info_ptr), wrapper_source(wrapper_source_ptr) {} |
| + void* wrapper_info; |
| + void* wrapper_source; |
| +}; |
| + |
| +/** |
| + * Interface for tracing through the embedder heap. During the v8 garbage |
| + * collection, v8 collects hidden fields of all potential wrappers, and at the |
| + * end of its marking phase iterates the collection and asks the embedder to |
| + * trace through its heap and call Isolate::AddObjectToMarkingDeque for each js |
| + * object reachable from the given one. |
| + * |
| + * Before the first call to the TraceWrappableFrom function v8 will call |
| + * TraceRoots. When the v8 garbage collection is finished, v8 will call |
| + * ClearTracingMarks. |
| + */ |
| +class EmbedderHeapTracer { |
| + public: |
| + /** |
| + * V8 will call this method at the beginning of the gc cycle. |
| + */ |
| + virtual void TraceRoots(Isolate* isolate) {} |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
= 0;
also add an empty line after this one
Marcel Hlopko
2016/03/30 18:51:12
done
|
| + /** |
| + * V8 will call this method with internal fields of a potential wrapper. |
| + * Embedder is expected to trace its heap (synchronously) and call |
| + * Isolate::AddObjectToMarkingDeque() with all wrappers reachable from the |
| + * given one. |
| + */ |
| + virtual void TraceWrappableFrom(Isolate* isolate, |
| + WrapperHiddenFields internal_fields) {} |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
same here.
why not pass a const std::vector<Hidde
Marcel Hlopko
2016/03/30 18:51:12
Done
|
| + /** |
| + * V8 will call this method at the end of the gc cycle. Allocation is *not* |
| + * allowed in the ClearTracingMarks. |
| + */ |
| + virtual void ClearTracingMarks(Isolate* isolate) {} |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
= 0;
Marcel Hlopko
2016/03/30 18:51:11
Done
|
| + |
| + protected: |
| + virtual ~EmbedderHeapTracer() {} |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
= default;
Marcel Hlopko
2016/03/30 18:51:12
Done
|
| +}; |
| + |
| +/** |
| * Isolate represents an isolated instance of the V8 engine. V8 isolates have |
| * completely separate states. Objects from one isolate must not be used in |
| * other isolates. The embedder can create multiple isolates and use them in |
| @@ -5587,6 +5634,13 @@ class V8_EXPORT Isolate { |
| static Isolate* GetCurrent(); |
| /** |
| + * Allows the embedder to add objects to the marking deque of the v8 garbage |
| + * collector. Only allowed when the embedder is asked to trace its heap by |
| + * EmbedderHeapTracer. |
| + */ |
| + void AddObjectToMarkingDeque(PersistentBase<Object>* handle); |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
why not make this a member of PersistentBase?
Marcel Hlopko
2016/03/30 18:51:11
Done
|
| + |
| + /** |
| * Custom callback used by embedders to help V8 determine if it should abort |
| * when it throws and no internal handler is predicted to catch the |
| * exception. If --abort-on-uncaught-exception is used on the command line, |
| @@ -5829,6 +5883,16 @@ class V8_EXPORT Isolate { |
| void RemoveGCPrologueCallback(GCCallback callback); |
| /** |
| + * Sets the embedder heap tracer for the isolate. |
| + */ |
| + void SetEmbedderHeapTracer(EmbedderHeapTracer* tracer); |
| + |
| + /** |
| + * Gets embedder heap tracer associated with the isolate, or nullptr. |
| + */ |
| + EmbedderHeapTracer* embedder_heap_tracer(); |
|
jochen (gone - plz use gerrit)
2016/03/30 16:44:45
shouldn't be needed
Marcel Hlopko
2016/03/30 18:51:11
Sure it's not :) Removed.
|
| + |
| + /** |
| * Enables the host application to receive a notification after a |
| * garbage collection. Allocations are allowed in the callback function, |
| * but the callback is not re-entrant: if the allocation inside it will |