Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / tracing / tracing_controller_impl.h
1 // Copyright (c) 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.
4
5 #ifndef CONTENT_BROWSER_TRACING_TRACING_CONTROLLER_IMPL_H_
6 #define CONTENT_BROWSER_TRACING_TRACING_CONTROLLER_IMPL_H_
7
8 #include <set>
9 #include <string>
10 #include <vector>
11
12 #include "base/lazy_instance.h"
13 #include "content/public/browser/tracing_controller.h"
14
15 namespace base {
16 class RefCountedString;
17 class RefCountedMemory;
18 }
19
20 namespace content {
21
22 class TraceMessageFilter;
23 class TracingUI;
24
25 class TracingControllerImpl : public TracingController {
26  public:
27   static TracingControllerImpl* GetInstance();
28
29   // TracingController implementation.
30   virtual bool GetCategories(
31       const GetCategoriesDoneCallback& callback) OVERRIDE;
32   virtual bool EnableRecording(
33       const base::debug::CategoryFilter& category_filter,
34       const base::debug::TraceOptions& trace_options,
35       const EnableRecordingDoneCallback& callback) OVERRIDE;
36   virtual bool DisableRecording(
37       const scoped_refptr<TraceDataSink>& sink) OVERRIDE;
38   virtual bool EnableMonitoring(
39       const base::debug::CategoryFilter& category_filter,
40       const base::debug::TraceOptions& trace_options,
41       const EnableMonitoringDoneCallback& callback) OVERRIDE;
42   virtual bool DisableMonitoring(
43       const DisableMonitoringDoneCallback& callback) OVERRIDE;
44   virtual void GetMonitoringStatus(
45       bool* out_enabled,
46       base::debug::CategoryFilter* out_category_filter,
47       base::debug::TraceOptions* out_trace_options) OVERRIDE;
48   virtual bool CaptureMonitoringSnapshot(
49       const scoped_refptr<TraceDataSink>& sink) OVERRIDE;
50   virtual bool GetTraceBufferPercentFull(
51       const GetTraceBufferPercentFullCallback& callback) OVERRIDE;
52   virtual bool SetWatchEvent(const std::string& category_name,
53                              const std::string& event_name,
54                              const WatchEventCallback& callback) OVERRIDE;
55   virtual bool CancelWatchEvent() OVERRIDE;
56
57   void RegisterTracingUI(TracingUI* tracing_ui);
58   void UnregisterTracingUI(TracingUI* tracing_ui);
59
60  private:
61   typedef std::set<scoped_refptr<TraceMessageFilter> > TraceMessageFilterSet;
62
63   friend struct base::DefaultLazyInstanceTraits<TracingControllerImpl>;
64   friend class TraceMessageFilter;
65
66   TracingControllerImpl();
67   virtual ~TracingControllerImpl();
68
69   bool can_enable_recording() const {
70     return !is_recording_;
71   }
72
73   bool can_disable_recording() const {
74     return is_recording_ && !trace_data_sink_.get();
75   }
76
77   bool can_enable_monitoring() const {
78     return !is_monitoring_;
79   }
80
81   bool can_disable_monitoring() const {
82     return is_monitoring_ && !monitoring_data_sink_.get();
83   }
84
85   bool can_get_trace_buffer_percent_full() const {
86     return pending_trace_buffer_percent_full_callback_.is_null();
87   }
88
89   bool can_cancel_watch_event() const {
90     return !watch_event_callback_.is_null();
91   }
92
93   // Methods for use by TraceMessageFilter.
94   void AddTraceMessageFilter(TraceMessageFilter* trace_message_filter);
95   void RemoveTraceMessageFilter(TraceMessageFilter* trace_message_filter);
96
97   void OnTraceDataCollected(
98       const scoped_refptr<base::RefCountedString>& events_str_ptr);
99   void OnMonitoringTraceDataCollected(
100       const scoped_refptr<base::RefCountedString>& events_str_ptr);
101
102   // Callback of TraceLog::Flush() for the local trace.
103   void OnLocalTraceDataCollected(
104       const scoped_refptr<base::RefCountedString>& events_str_ptr,
105       bool has_more_events);
106   // Callback of TraceLog::FlushMonitoring() for the local trace.
107   void OnLocalMonitoringTraceDataCollected(
108       const scoped_refptr<base::RefCountedString>& events_str_ptr,
109       bool has_more_events);
110
111   void OnDisableRecordingAcked(
112       TraceMessageFilter* trace_message_filter,
113       const std::vector<std::string>& known_category_groups);
114
115 #if defined(OS_CHROMEOS) || defined(OS_WIN)
116   void OnEndSystemTracingAcked(
117       const scoped_refptr<base::RefCountedString>& events_str_ptr);
118 #endif
119
120   void OnCaptureMonitoringSnapshotAcked(
121       TraceMessageFilter* trace_message_filter);
122
123   void OnTraceBufferPercentFullReply(
124       TraceMessageFilter* trace_message_filter,
125       float percent_full);
126
127   void OnWatchEventMatched();
128
129   void SetEnabledOnFileThread(
130       const base::debug::CategoryFilter& category_filter,
131       int mode,
132       const base::debug::TraceOptions& trace_options,
133       const base::Closure& callback);
134   void SetDisabledOnFileThread(const base::Closure& callback);
135   void OnEnableRecordingDone(const base::debug::CategoryFilter& category_filter,
136                              const base::debug::TraceOptions& trace_options,
137                              const EnableRecordingDoneCallback& callback);
138   void OnDisableRecordingDone();
139   void OnEnableMonitoringDone(
140       const base::debug::CategoryFilter& category_filter,
141       const base::debug::TraceOptions& trace_options,
142       const EnableMonitoringDoneCallback& callback);
143   void OnDisableMonitoringDone(const DisableMonitoringDoneCallback& callback);
144
145   void OnMonitoringStateChanged(bool is_monitoring);
146
147   TraceMessageFilterSet trace_message_filters_;
148
149   // Pending acks for DisableRecording.
150   int pending_disable_recording_ack_count_;
151   TraceMessageFilterSet pending_disable_recording_filters_;
152   // Pending acks for CaptureMonitoringSnapshot.
153   int pending_capture_monitoring_snapshot_ack_count_;
154   TraceMessageFilterSet pending_capture_monitoring_filters_;
155   // Pending acks for GetTraceBufferPercentFull.
156   int pending_trace_buffer_percent_full_ack_count_;
157   TraceMessageFilterSet pending_trace_buffer_percent_full_filters_;
158   float maximum_trace_buffer_percent_full_;
159
160 #if defined(OS_CHROMEOS) || defined(OS_WIN)
161   bool is_system_tracing_;
162 #endif
163   bool is_recording_;
164   bool is_monitoring_;
165   base::debug::TraceOptions trace_options_;
166
167   GetCategoriesDoneCallback pending_get_categories_done_callback_;
168   GetTraceBufferPercentFullCallback pending_trace_buffer_percent_full_callback_;
169
170   std::string watch_category_name_;
171   std::string watch_event_name_;
172   WatchEventCallback watch_event_callback_;
173
174   std::set<std::string> known_category_groups_;
175   std::set<TracingUI*> tracing_uis_;
176   scoped_refptr<TraceDataSink> trace_data_sink_;
177   scoped_refptr<TraceDataSink> monitoring_data_sink_;
178   DISALLOW_COPY_AND_ASSIGN(TracingControllerImpl);
179 };
180
181 }  // namespace content
182
183 #endif  // CONTENT_BROWSER_TRACING_TRACING_CONTROLLER_IMPL_H_