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/tracing/tracing-category-observer.h"
6
7 #include "src/base/atomic-utils.h"
8 #include "src/init/v8.h"
9 #include "src/logging/counters.h"
10 #include "src/tracing/trace-event.h"
11
12 namespace v8 {
13 namespace tracing {
14
15 TracingCategoryObserver* TracingCategoryObserver::instance_ = nullptr;
16
SetUp()17 void TracingCategoryObserver::SetUp() {
18 TracingCategoryObserver::instance_ = new TracingCategoryObserver();
19 i::V8::GetCurrentPlatform()->GetTracingController()->AddTraceStateObserver(
20 TracingCategoryObserver::instance_);
21 }
22
TearDown()23 void TracingCategoryObserver::TearDown() {
24 i::V8::GetCurrentPlatform()->GetTracingController()->RemoveTraceStateObserver(
25 TracingCategoryObserver::instance_);
26 delete TracingCategoryObserver::instance_;
27 }
28
OnTraceEnabled()29 void TracingCategoryObserver::OnTraceEnabled() {
30 bool enabled = false;
31 TRACE_EVENT_CATEGORY_GROUP_ENABLED(
32 TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), &enabled);
33 if (enabled) {
34 i::TracingFlags::runtime_stats.fetch_or(ENABLED_BY_TRACING,
35 std::memory_order_relaxed);
36 }
37 TRACE_EVENT_CATEGORY_GROUP_ENABLED(
38 TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats_sampling"), &enabled);
39 if (enabled) {
40 i::TracingFlags::runtime_stats.fetch_or(ENABLED_BY_SAMPLING,
41 std::memory_order_relaxed);
42 }
43 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("v8.gc"),
44 &enabled);
45 if (enabled) {
46 i::TracingFlags::gc.fetch_or(ENABLED_BY_TRACING, std::memory_order_relaxed);
47 }
48 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("v8.gc_stats"),
49 &enabled);
50 if (enabled) {
51 i::TracingFlags::gc_stats.fetch_or(ENABLED_BY_TRACING,
52 std::memory_order_relaxed);
53 }
54 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("v8.ic_stats"),
55 &enabled);
56 if (enabled) {
57 i::TracingFlags::ic_stats.fetch_or(ENABLED_BY_TRACING,
58 std::memory_order_relaxed);
59 }
60
61 TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("v8.zone_stats"),
62 &enabled);
63 if (enabled) {
64 i::TracingFlags::zone_stats.fetch_or(ENABLED_BY_TRACING,
65 std::memory_order_relaxed);
66 }
67 }
68
OnTraceDisabled()69 void TracingCategoryObserver::OnTraceDisabled() {
70 i::TracingFlags::runtime_stats.fetch_and(
71 ~(ENABLED_BY_TRACING | ENABLED_BY_SAMPLING), std::memory_order_relaxed);
72
73 i::TracingFlags::gc.fetch_and(~ENABLED_BY_TRACING, std::memory_order_relaxed);
74
75 i::TracingFlags::gc_stats.fetch_and(~ENABLED_BY_TRACING,
76 std::memory_order_relaxed);
77
78 i::TracingFlags::ic_stats.fetch_and(~ENABLED_BY_TRACING,
79 std::memory_order_relaxed);
80 }
81
82 } // namespace tracing
83 } // namespace v8
84