Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index eb1f08a60942d13f71cbb7b9f0e8ab77dcb14451..f93885863a6d5aa098dc2973fdbc6fe4572aaa7d 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -463,16 +463,6 @@ class WeakCallbackInfo { |
enum class WeakCallbackType { kParameter, kInternalFields, kFinalizer }; |
/** |
- * A reporter class that embedder will use to report reachable references found |
- * by EmbedderHeapTracer. |
- */ |
-class V8_EXPORT EmbedderReachableReferenceReporter { |
- public: |
- virtual void ReportExternalReference(Value* object) = 0; |
- virtual ~EmbedderReachableReferenceReporter() = default; |
-}; |
- |
-/** |
* An object reference that is independent of any handle scope. Where |
* a Local handle only lives as long as the HandleScope in which it was |
* allocated, a PersistentBase handle remains valid until it is explicitly |
@@ -569,18 +559,11 @@ template <class T> class PersistentBase { |
V8_INLINE void ClearWeak() { ClearWeak<void>(); } |
/** |
- * Deprecated. |
- * TODO(hlopko): remove once migration to reporter is finished. |
- */ |
- V8_INLINE void RegisterExternalReference(Isolate* isolate) const {} |
- |
- /** |
* Allows the embedder to tell the v8 garbage collector that a certain object |
* is alive. Only allowed when the embedder is asked to trace its heap by |
* EmbedderHeapTracer. |
*/ |
- V8_INLINE void RegisterExternalReference( |
- EmbedderReachableReferenceReporter* reporter) const; |
+ V8_INLINE void RegisterExternalReference(Isolate* isolate) const; |
/** |
* Marks the reference to this object independent. Garbage collector is free |
@@ -6169,11 +6152,11 @@ class V8_EXPORT PersistentHandleVisitor { // NOLINT |
enum class MemoryPressureLevel { kNone, kModerate, kCritical }; |
/** |
- * Interface for tracing through the embedder heap. During the v8 garbage |
+ * Interface for tracing through the embedder heap. During a 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 use reporter to report each js object reachable |
- * from any of the given wrappers. |
+ * trace through its heap and use reporter to report each JavaScript object |
+ * reachable from any of the given wrappers. |
* |
* Before the first call to the TraceWrappersFrom function TracePrologue will be |
* called. When the garbage collection cycle is finished, TraceEpilogue will be |
@@ -6191,30 +6174,26 @@ class V8_EXPORT EmbedderHeapTracer { |
}; |
/** |
- * V8 will call this method with internal fields of found wrappers. The |
- * embedder is expected to store them in its marking deque and trace |
- * reachable wrappers from them when called through |AdvanceTracing|. |
+ * Called by v8 to register internal fields of found wrappers. |
+ * |
+ * The embedder is expected to store them somewhere and trace reachable |
+ * wrappers from them when called through |AdvanceTracing|. |
*/ |
virtual void RegisterV8References( |
const std::vector<std::pair<void*, void*> >& internal_fields) = 0; |
/** |
- * Deprecated. |
- * TODO(hlopko) Remove once the migration to reporter is finished. |
- */ |
- virtual void TracePrologue() {} |
- |
- /** |
- * V8 will call this method at the beginning of a GC cycle. Embedder is |
- * expected to use EmbedderReachableReferenceReporter for reporting all |
- * reachable v8 objects. |
+ * Called at the beginning of a GC cycle. |
*/ |
- virtual void TracePrologue(EmbedderReachableReferenceReporter* reporter) {} |
+ virtual void TracePrologue() = 0; |
/** |
- * Embedder is expected to trace its heap starting from wrappers reported by |
- * RegisterV8References method, and use reporter for all reachable wrappers. |
- * Embedder is expected to stop tracing by the given deadline. |
+ * Called to to make a tracing step in the embedder. |
+ * |
+ * The embedder is expected to trace its heap starting from wrappers reported |
+ * by RegisterV8References method, and report back all reachable wrappers. |
+ * Furthermore, the embedder is expected to stop tracing by the given |
+ * deadline. |
* |
* Returns true if there is still work to do. |
*/ |
@@ -6222,22 +6201,25 @@ class V8_EXPORT EmbedderHeapTracer { |
AdvanceTracingActions actions) = 0; |
/** |
- * V8 will call this method at the end of a GC cycle. |
+ * Called at the end of a GC cycle. |
* |
* Note that allocation is *not* allowed within |TraceEpilogue|. |
*/ |
virtual void TraceEpilogue() = 0; |
/** |
- * Let embedder know v8 entered final marking pause (no more incremental steps |
- * will follow). |
+ * Called upon entering the final marking pause. No more incremental marking |
+ * steps will follow this call. |
*/ |
- virtual void EnterFinalPause() {} |
+ virtual void EnterFinalPause() = 0; |
/** |
- * Throw away all intermediate data and reset to the initial state. |
+ * Called when tracing is aborted. |
+ * |
+ * The embedder is expected to throw away all intermediate data and reset to |
+ * the initial state. |
*/ |
- virtual void AbortTracing() {} |
+ virtual void AbortTracing() = 0; |
/** |
* Returns the number of wrappers that are still to be traced by the embedder. |
@@ -7550,6 +7532,9 @@ class V8_EXPORT V8 { |
int* index); |
static Local<Value> GetEternal(Isolate* isolate, int index); |
+ static void RegisterExternallyReferencedObject(internal::Object** object, |
+ internal::Isolate* isolate); |
+ |
template <class K, class V, class T> |
friend class PersistentValueMapBase; |
@@ -8620,10 +8605,11 @@ P* PersistentBase<T>::ClearWeak() { |
} |
template <class T> |
-void PersistentBase<T>::RegisterExternalReference( |
- EmbedderReachableReferenceReporter* reporter) const { |
+void PersistentBase<T>::RegisterExternalReference(Isolate* isolate) const { |
if (IsEmpty()) return; |
- reporter->ReportExternalReference(this->val_); |
+ V8::RegisterExternallyReferencedObject( |
+ reinterpret_cast<internal::Object**>(this->val_), |
+ reinterpret_cast<internal::Isolate*>(isolate)); |
} |
template <class T> |