• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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