1 // Copyright 2013 The Chromium 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.
5 #ifndef CONTENT_PUBLIC_BROWSER_TRACING_CONTROLLER_H_
6 #define CONTENT_PUBLIC_BROWSER_TRACING_CONTROLLER_H_
11 #include "base/callback.h"
12 #include "base/debug/trace_event.h"
13 #include "content/common/content_export.h"
21 class TracingController;
23 // TracingController is used on the browser processes to enable/disable
24 // trace status and collect trace data. Only the browser UI thread is allowed
25 // to interact with the TracingController object. All callbacks are called on
27 class TracingController {
30 CONTENT_EXPORT static TracingController* GetInstance();
32 // Get a set of category groups. The category groups can change as
33 // new code paths are reached.
35 // Once all child processes have acked to the GetCategories request,
36 // GetCategoriesDoneCallback is called back with a set of category
38 typedef base::Callback<void(const std::set<std::string>&)>
39 GetCategoriesDoneCallback;
40 virtual bool GetCategories(
41 const GetCategoriesDoneCallback& callback) = 0;
43 // Start recording on all processes.
45 // Recording begins immediately locally, and asynchronously on child processes
46 // as soon as they receive the EnableRecording request.
48 // Once all child processes have acked to the EnableRecording request,
49 // EnableRecordingDoneCallback will be called back.
51 // |category_filter| is a filter to control what category groups should be
52 // traced. A filter can have an optional '-' prefix to exclude category groups
53 // that contain a matching category. Having both included and excluded
54 // category patterns in the same list would not be supported.
56 // Examples: "test_MyTest*",
57 // "test_MyTest*,test_OtherStuff",
58 // "-excluded_category1,-excluded_category2"
60 // |options| controls what kind of tracing is enabled.
61 typedef base::Callback<void()> EnableRecordingDoneCallback;
62 virtual bool EnableRecording(
63 const base::debug::CategoryFilter& category_filter,
64 const base::debug::TraceOptions& trace_options,
65 const EnableRecordingDoneCallback& callback) = 0;
67 // Stop recording on all processes.
69 // Child processes typically are caching trace data and only rarely flush
70 // and send trace data back to the browser process. That is because it may be
71 // an expensive operation to send the trace data over IPC, and we would like
72 // to avoid much runtime overhead of tracing. So, to end tracing, we must
73 // asynchronously ask all child processes to flush any pending trace data.
75 // Once all child processes have acked to the DisableRecording request,
76 // TracingFileResultCallback will be called back with a file that contains
79 // Trace data will be written into |result_file_path| if it is not empty, or
80 // into a temporary file. The actual file path will be passed to |callback| if
83 // If |result_file_path| is empty and |callback| is null, trace data won't be
84 // written to any file.
85 typedef base::Callback<void(const base::FilePath&)> TracingFileResultCallback;
86 virtual bool DisableRecording(const base::FilePath& result_file_path,
87 const TracingFileResultCallback& callback) = 0;
89 // Start monitoring on all processes.
91 // Monitoring begins immediately locally, and asynchronously on child
92 // processes as soon as they receive the EnableMonitoring request.
94 // Once all child processes have acked to the EnableMonitoring request,
95 // EnableMonitoringDoneCallback will be called back.
97 // |category_filter| is a filter to control what category groups should be
100 // |options| controls what kind of tracing is enabled.
101 typedef base::Callback<void()> EnableMonitoringDoneCallback;
102 virtual bool EnableMonitoring(
103 const base::debug::CategoryFilter& category_filter,
104 const base::debug::TraceOptions& trace_options,
105 const EnableMonitoringDoneCallback& callback) = 0;
107 // Stop monitoring on all processes.
109 // Once all child processes have acked to the DisableMonitoring request,
110 // DisableMonitoringDoneCallback is called back.
111 typedef base::Callback<void()> DisableMonitoringDoneCallback;
112 virtual bool DisableMonitoring(
113 const DisableMonitoringDoneCallback& callback) = 0;
115 // Get the current monitoring configuration.
116 virtual void GetMonitoringStatus(
118 base::debug::CategoryFilter* out_category_filter,
119 base::debug::TraceOptions* out_trace_options) = 0;
121 // Get the current monitoring traced data.
123 // Child processes typically are caching trace data and only rarely flush
124 // and send trace data back to the browser process. That is because it may be
125 // an expensive operation to send the trace data over IPC, and we would like
126 // to avoid much runtime overhead of tracing. So, to end tracing, we must
127 // asynchronously ask all child processes to flush any pending trace data.
129 // Once all child processes have acked to the CaptureMonitoringSnapshot
130 // request, TracingFileResultCallback will be called back with a file that
131 // contains the traced data.
133 // Trace data will be written into |result_file_path| if it is not empty, or
134 // into a temporary file. The actual file path will be passed to |callback|.
136 // If |result_file_path| is empty and |callback| is null, trace data won't be
137 // written to any file.
138 virtual bool CaptureMonitoringSnapshot(
139 const base::FilePath& result_file_path,
140 const TracingFileResultCallback& callback) = 0;
142 // Get the maximum across processes of trace buffer percent full state.
143 // When the TraceBufferPercentFull value is determined, the callback is
145 typedef base::Callback<void(float)> GetTraceBufferPercentFullCallback;
146 virtual bool GetTraceBufferPercentFull(
147 const GetTraceBufferPercentFullCallback& callback) = 0;
149 // |callback| will will be called every time the given event occurs on any
151 typedef base::Callback<void()> WatchEventCallback;
152 virtual bool SetWatchEvent(const std::string& category_name,
153 const std::string& event_name,
154 const WatchEventCallback& callback) = 0;
156 // Cancel the watch event. If tracing is enabled, this may race with the
157 // watch event callback.
158 virtual bool CancelWatchEvent() = 0;
161 virtual ~TracingController() {}
164 } // namespace content
166 #endif // CONTENT_PUBLIC_BROWSER_TRACING_CONTROLLER_H_