LCOV - code coverage report
Current view: top level - src/heap - embedder-tracing.h (source / functions) Hit Total Coverage
Test: app.info Lines: 7 10 70.0 %
Date: 2017-04-26 Functions: 3 3 100.0 %

          Line data    Source code
       1             : // Copyright 2016 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_HEAP_EMBEDDER_TRACING_H_
       6             : #define V8_HEAP_EMBEDDER_TRACING_H_
       7             : 
       8             : #include "include/v8.h"
       9             : #include "src/flags.h"
      10             : #include "src/globals.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : class Heap;
      16             : 
      17             : class V8_EXPORT_PRIVATE LocalEmbedderHeapTracer final {
      18             :  public:
      19             :   typedef std::pair<void*, void*> WrapperInfo;
      20             : 
      21             :   LocalEmbedderHeapTracer()
      22      121564 :       : remote_tracer_(nullptr), num_v8_marking_deque_was_empty_(0) {}
      23             : 
      24           0 :   void SetRemoteTracer(EmbedderHeapTracer* tracer) { remote_tracer_ = tracer; }
      25      368449 :   bool InUse() { return remote_tracer_ != nullptr; }
      26             : 
      27             :   void TracePrologue();
      28             :   void TraceEpilogue();
      29             :   void AbortTracing();
      30             :   void EnterFinalPause();
      31             :   bool Trace(double deadline,
      32             :              EmbedderHeapTracer::AdvanceTracingActions actions);
      33             : 
      34             :   size_t NumberOfWrappersToTrace();
      35             :   size_t NumberOfCachedWrappersToTrace() {
      36        1002 :     return cached_wrappers_to_trace_.size();
      37             :   }
      38             :   void AddWrapperToTrace(WrapperInfo entry) {
      39           0 :     cached_wrappers_to_trace_.push_back(entry);
      40             :   }
      41             :   void ClearCachedWrappersToTrace() { cached_wrappers_to_trace_.clear(); }
      42             :   void RegisterWrappersWithRemoteTracer();
      43             : 
      44             :   // In order to avoid running out of memory we force tracing wrappers if there
      45             :   // are too many of them.
      46             :   bool RequiresImmediateWrapperProcessing();
      47             : 
      48           0 :   void NotifyV8MarkingDequeWasEmpty() { num_v8_marking_deque_was_empty_++; }
      49       16216 :   bool ShouldFinalizeIncrementalMarking() {
      50             :     static const size_t kMaxIncrementalFixpointRounds = 3;
      51       16216 :     return !FLAG_incremental_marking_wrappers || !InUse() ||
      52        8108 :            NumberOfWrappersToTrace() == 0 ||
      53        8108 :            num_v8_marking_deque_was_empty_ > kMaxIncrementalFixpointRounds;
      54             :   }
      55             : 
      56             :  private:
      57             :   typedef std::vector<WrapperInfo> WrapperCache;
      58             : 
      59             :   EmbedderHeapTracer* remote_tracer_;
      60             :   WrapperCache cached_wrappers_to_trace_;
      61             :   size_t num_v8_marking_deque_was_empty_;
      62             : };
      63             : 
      64             : }  // namespace internal
      65             : }  // namespace v8
      66             : 
      67             : #endif  // V8_HEAP_EMBEDDER_TRACING_H_

Generated by: LCOV version 1.10