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 : #include "src/heap/embedder-tracing.h"
6 :
7 : #include "src/base/logging.h"
8 :
9 : namespace v8 {
10 : namespace internal {
11 :
12 53427 : void LocalEmbedderHeapTracer::TracePrologue() {
13 106854 : if (!InUse()) return;
14 :
15 1 : CHECK(cached_wrappers_to_trace_.empty());
16 1 : num_v8_marking_deque_was_empty_ = 0;
17 1 : remote_tracer_->TracePrologue();
18 : }
19 :
20 53348 : void LocalEmbedderHeapTracer::TraceEpilogue() {
21 106696 : if (!InUse()) return;
22 :
23 1 : CHECK(cached_wrappers_to_trace_.empty());
24 1 : remote_tracer_->TraceEpilogue();
25 : }
26 :
27 54 : void LocalEmbedderHeapTracer::AbortTracing() {
28 108 : if (!InUse()) return;
29 :
30 : cached_wrappers_to_trace_.clear();
31 2 : remote_tracer_->AbortTracing();
32 : }
33 :
34 53348 : void LocalEmbedderHeapTracer::EnterFinalPause() {
35 106696 : if (!InUse()) return;
36 :
37 1 : remote_tracer_->EnterFinalPause();
38 : }
39 :
40 3 : bool LocalEmbedderHeapTracer::Trace(
41 3 : double deadline, EmbedderHeapTracer::AdvanceTracingActions actions) {
42 3 : if (!InUse()) return false;
43 :
44 : DCHECK_EQ(0, NumberOfCachedWrappersToTrace());
45 2 : return remote_tracer_->AdvanceTracing(deadline, actions);
46 : }
47 :
48 106694 : size_t LocalEmbedderHeapTracer::NumberOfWrappersToTrace() {
49 : return (InUse())
50 2 : ? cached_wrappers_to_trace_.size() +
51 2 : remote_tracer_->NumberOfWrappersToTrace()
52 106696 : : 0;
53 : }
54 :
55 96697 : void LocalEmbedderHeapTracer::RegisterWrappersWithRemoteTracer() {
56 96697 : if (!InUse()) return;
57 :
58 3 : if (cached_wrappers_to_trace_.empty()) {
59 : return;
60 : }
61 :
62 3 : remote_tracer_->RegisterV8References(cached_wrappers_to_trace_);
63 : cached_wrappers_to_trace_.clear();
64 : }
65 :
66 0 : bool LocalEmbedderHeapTracer::RequiresImmediateWrapperProcessing() {
67 : const size_t kTooManyWrappers = 16000;
68 0 : return cached_wrappers_to_trace_.size() > kTooManyWrappers;
69 : }
70 :
71 : } // namespace internal
72 : } // namespace v8
|