1// Copyright (c) 2012 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_TRACE_MESSAGE_FILTER_H_
6#define CONTENT_BROWSER_TRACING_TRACE_MESSAGE_FILTER_H_
7
8#include <string>
9#include <vector>
10
11#include "base/debug/trace_event.h"
12#include "content/public/browser/browser_message_filter.h"
13
14namespace content {
15
16// This class sends and receives trace messages on the browser process.
17// See also: tracing_controller.h
18// See also: child_trace_message_filter.h
19class TraceMessageFilter : public BrowserMessageFilter {
20 public:
21  TraceMessageFilter();
22
23  // BrowserMessageFilter implementation.
24  virtual void OnChannelClosing() OVERRIDE;
25  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
26
27  void SendBeginTracing(const base::debug::CategoryFilter& category_filter_str,
28                        const base::debug::TraceOptions& options);
29  void SendEndTracing();
30  void SendEnableMonitoring(const base::debug::CategoryFilter& category_filter,
31                            const base::debug::TraceOptions& options);
32  void SendDisableMonitoring();
33  void SendCaptureMonitoringSnapshot();
34  void SendGetTraceBufferPercentFull();
35  void SendSetWatchEvent(const std::string& category_name,
36                         const std::string& event_name);
37  void SendCancelWatchEvent();
38
39 protected:
40  virtual ~TraceMessageFilter();
41
42 private:
43  // Message handlers.
44  void OnChildSupportsTracing();
45  void OnEndTracingAck(const std::vector<std::string>& known_categories);
46  void OnCaptureMonitoringSnapshotAcked();
47  void OnWatchEventMatched();
48  void OnTraceBufferPercentFullReply(float percent_full);
49  void OnTraceDataCollected(const std::string& data);
50  void OnMonitoringTraceDataCollected(const std::string& data);
51
52  // ChildTraceMessageFilter exists:
53  bool has_child_;
54
55  // Awaiting ack for previously sent SendEndTracing
56  bool is_awaiting_end_ack_;
57  // Awaiting ack for previously sent SendCaptureMonitoringSnapshot
58  bool is_awaiting_capture_monitoring_snapshot_ack_;
59  // Awaiting ack for previously sent SendGetTraceBufferPercentFull
60  bool is_awaiting_buffer_percent_full_ack_;
61
62  DISALLOW_COPY_AND_ASSIGN(TraceMessageFilter);
63};
64
65}  // namespace content
66
67#endif  // CONTENT_BROWSER_TRACING_TRACE_MESSAGE_FILTER_H_
68