summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/embedder-tracing.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/embedder-tracing.h')
-rw-r--r--deps/v8/src/heap/embedder-tracing.h24
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_;