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/tracing/tracing-category-observer.h"
6 :
7 : #include "src/base/atomic-utils.h"
8 : #include "src/flags.h"
9 : #include "src/tracing/trace-event.h"
10 : #include "src/v8.h"
11 :
12 : namespace v8 {
13 : namespace tracing {
14 :
15 : TracingCategoryObserver* TracingCategoryObserver::instance_ = nullptr;
16 :
17 59583 : void TracingCategoryObserver::SetUp() {
18 119166 : TracingCategoryObserver::instance_ = new TracingCategoryObserver();
19 59583 : v8::internal::V8::GetCurrentPlatform()
20 59583 : ->GetTracingController()
21 59583 : ->AddTraceStateObserver(TracingCategoryObserver::instance_);
22 59583 : }
23 :
24 58472 : void TracingCategoryObserver::TearDown() {
25 58472 : v8::internal::V8::GetCurrentPlatform()
26 58472 : ->GetTracingController()
27 58472 : ->RemoveTraceStateObserver(TracingCategoryObserver::instance_);
28 58472 : delete TracingCategoryObserver::instance_;
29 58472 : }
30 :
31 1 : void TracingCategoryObserver::OnTraceEnabled() {
32 : bool enabled = false;
33 2 : TRACE_EVENT_CATEGORY_GROUP_ENABLED(
34 : TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), &enabled);
35 1 : if (enabled) {
36 : base::AsAtomic32::Relaxed_Store(
37 : &v8::internal::FLAG_runtime_stats,
38 0 : (v8::internal::FLAG_runtime_stats | ENABLED_BY_TRACING));
39 : }
40 2 : TRACE_EVENT_CATEGORY_GROUP_ENABLED(
41 : TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats_sampling"), &enabled);
42 1 : if (enabled) {
43 : base::AsAtomic32::Relaxed_Store(
44 : &v8::internal::FLAG_runtime_stats,
45 0 : v8::internal::FLAG_runtime_stats | ENABLED_BY_SAMPLING);
46 : }
47 2 : TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("v8.gc_stats"),
48 : &enabled);
49 1 : if (enabled) {
50 0 : v8::internal::FLAG_gc_stats |= ENABLED_BY_TRACING;
51 : }
52 2 : TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("v8.ic_stats"),
53 : &enabled);
54 1 : if (enabled) {
55 0 : v8::internal::FLAG_ic_stats |= ENABLED_BY_TRACING;
56 : }
57 1 : }
58 :
59 0 : void TracingCategoryObserver::OnTraceDisabled() {
60 : base::AsAtomic32::Relaxed_Store(
61 : &v8::internal::FLAG_runtime_stats,
62 : v8::internal::FLAG_runtime_stats &
63 0 : ~(ENABLED_BY_TRACING | ENABLED_BY_SAMPLING));
64 0 : v8::internal::FLAG_gc_stats &= ~ENABLED_BY_TRACING;
65 0 : v8::internal::FLAG_ic_stats &= ~ENABLED_BY_TRACING;
66 0 : }
67 :
68 : } // namespace tracing
69 : } // namespace v8
|