Index: src/heap/embedder-tracing.h |
diff --git a/src/heap/embedder-tracing.h b/src/heap/embedder-tracing.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..60c85cd52f285a5d6c85794216a7da22a39fb00b |
--- /dev/null |
+++ b/src/heap/embedder-tracing.h |
@@ -0,0 +1,56 @@ |
+// Copyright 2016 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef V8_HEAP_EMBEDDER_TRACING_H_ |
+#define V8_HEAP_EMBEDDER_TRACING_H_ |
+ |
+#include "include/v8.h" |
+#include "src/globals.h" |
+ |
+namespace v8 { |
+namespace internal { |
+ |
+class Heap; |
+ |
+class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final { |
+ public: |
+ typedef std::pair<void*, void*> WrapperInfo; |
+ |
+ LocalEmbedderHeapTracer() : remote_tracer_(nullptr) {} |
+ |
+ void SetRemoteTracer(EmbedderHeapTracer* tracer) { remote_tracer_ = tracer; } |
+ bool InUse() { return remote_tracer_ != nullptr; } |
+ |
+ void TracePrologue(); |
+ void TraceEpilogue(); |
+ void AbortTracing(); |
+ void EnterFinalPause(); |
+ bool Trace(double deadline, |
+ EmbedderHeapTracer::AdvanceTracingActions actions); |
+ |
+ size_t NumberOfWrappersToTrace(); |
+ size_t NumberOfCachedWrappersToTrace() { |
+ return cached_wrappers_to_trace_.size(); |
+ } |
+ void AddWrapperToTrace(WrapperInfo entry) { |
+ cached_wrappers_to_trace_.push_back(entry); |
+ } |
+ void ClearCachedWrappersToTrace() { cached_wrappers_to_trace_.clear(); } |
+ void RegisterWrappersWithRemoteTracer(); |
+ |
+ // In order to avoid running out of memory we force tracing wrappers if there |
+ // are too many of them. |
+ bool RequiresImmediateWrapperProcessing(); |
+ |
+ private: |
+ typedef std::vector<WrapperInfo> WrapperCache; |
+ |
+ EmbedderHeapTracer* remote_tracer_; |
+ WrapperCache cached_wrappers_to_trace_; |
+}; |
+ |
+} // namespace internal |
+} // namespace v8 |
+ |
+#endif // V8_HEAP_EMBEDDER_TRACING_H_ |