diff options
Diffstat (limited to 'deps/v8/src/heap/embedder-tracing.h')
-rw-r--r-- | deps/v8/src/heap/embedder-tracing.h | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/deps/v8/src/heap/embedder-tracing.h b/deps/v8/src/heap/embedder-tracing.h index 8146a1281c..994695942b 100644 --- a/deps/v8/src/heap/embedder-tracing.h +++ b/deps/v8/src/heap/embedder-tracing.h @@ -18,10 +18,23 @@ class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { public: typedef std::pair<void*, void*> WrapperInfo; - LocalEmbedderHeapTracer() - : remote_tracer_(nullptr), num_v8_marking_worklist_was_empty_(0) {} + explicit LocalEmbedderHeapTracer(Isolate* isolate) + : isolate_(isolate), + remote_tracer_(nullptr), + num_v8_marking_worklist_was_empty_(0) {} + + ~LocalEmbedderHeapTracer() { + if (remote_tracer_) remote_tracer_->isolate_ = nullptr; + } + + void SetRemoteTracer(EmbedderHeapTracer* tracer) { + if (remote_tracer_) remote_tracer_->isolate_ = nullptr; + + remote_tracer_ = tracer; + if (remote_tracer_) + remote_tracer_->isolate_ = reinterpret_cast<v8::Isolate*>(isolate_); + } - void SetRemoteTracer(EmbedderHeapTracer* tracer) { remote_tracer_ = tracer; } bool InUse() { return remote_tracer_ != nullptr; } void TracePrologue(); @@ -30,8 +43,8 @@ class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { void EnterFinalPause(); bool Trace(double deadline, EmbedderHeapTracer::AdvanceTracingActions actions); + bool IsRemoteTracingDone(); - size_t NumberOfWrappersToTrace(); size_t NumberOfCachedWrappersToTrace() { return cached_wrappers_to_trace_.size(); } @@ -51,13 +64,14 @@ class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { bool ShouldFinalizeIncrementalMarking() { static const size_t kMaxIncrementalFixpointRounds = 3; return !FLAG_incremental_marking_wrappers || !InUse() || - NumberOfWrappersToTrace() == 0 || + IsRemoteTracingDone() || num_v8_marking_worklist_was_empty_ > kMaxIncrementalFixpointRounds; } private: typedef std::vector<WrapperInfo> WrapperCache; + Isolate* const isolate_; EmbedderHeapTracer* remote_tracer_; WrapperCache cached_wrappers_to_trace_; size_t num_v8_marking_worklist_was_empty_; |