summaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorharaken@chromium.org <haraken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-08 01:01:25 +0000
committerharaken@chromium.org <haraken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-08 01:01:25 +0000
commit7ad4e2d50a8ae5cc1502a29166721fa447eb1ee5 (patch)
treea7dcc30be12c22a4d4900a92d58b26a086aabc3b /components
parent7cc7ebd4924ef763abfbdf334824e075330b0c14 (diff)
downloadchromium_src-7ad4e2d50a8ae5cc1502a29166721fa447eb1ee5.zip
chromium_src-7ad4e2d50a8ae5cc1502a29166721fa447eb1ee5.tar.gz
chromium_src-7ad4e2d50a8ae5cc1502a29166721fa447eb1ee5.tar.bz2
Revert 227354 "Revert "Implement TracingController::{Enable,Disa..."
The original CL was reverted because it increased the binary size of nacl-helper/data by 0.45%, but the increase was just 128 bytes. So I'll reland this CL, supressing the size failure. > Revert "Implement TracingController::{Enable,Disable,Capture}Monitoring" > Revert "Fix failures in chrome os after r227262" > Revert "Fix the content_browser breakage after r227269" > > Caused sizes regression on linux for nacl-helper-data. > > TBR=haraken > BUG=304789 > > > Implement TracingController::{Enable,Disable,Capture}Monitoring > > > > This CL implements TracingController::EnableMonitoring, > > TracingController::DisableMonitoring and > > TracingController::CaptureMonitoringSnapshot. > > > > BUG=241743 > > TEST=base_unittests::TraceEventTestFixture.TraceContinuousSampling, > > content_browsertests::TracingControllerTest.EnableCaptureAndDisableMonitoring > > > > Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=226701 > > > > R=dsinclair@chromium.org, joi@chromium.org, nduca@chromium.org, tsepez@chromium.org > > > > Review URL: https://codereview.chromium.org/23531042 > > Review URL: https://codereview.chromium.org/26294003 TBR=justinlin@chromium.org Review URL: https://codereview.chromium.org/26272005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@227413 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components')
-rw-r--r--components/tracing/child_trace_message_filter.cc47
-rw-r--r--components/tracing/child_trace_message_filter.h12
-rw-r--r--components/tracing/tracing_messages.h24
3 files changed, 80 insertions, 3 deletions
diff --git a/components/tracing/child_trace_message_filter.cc b/components/tracing/child_trace_message_filter.cc
index 8310ec5..9925f3f 100644
--- a/components/tracing/child_trace_message_filter.cc
+++ b/components/tracing/child_trace_message_filter.cc
@@ -34,6 +34,10 @@ bool ChildTraceMessageFilter::OnMessageReceived(const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(ChildTraceMessageFilter, message)
IPC_MESSAGE_HANDLER(TracingMsg_BeginTracing, OnBeginTracing)
IPC_MESSAGE_HANDLER(TracingMsg_EndTracing, OnEndTracing)
+ IPC_MESSAGE_HANDLER(TracingMsg_EnableMonitoring, OnEnableMonitoring)
+ IPC_MESSAGE_HANDLER(TracingMsg_DisableMonitoring, OnDisableMonitoring)
+ IPC_MESSAGE_HANDLER(TracingMsg_CaptureMonitoringSnapshot,
+ OnCaptureMonitoringSnapshot)
IPC_MESSAGE_HANDLER(TracingMsg_GetTraceBufferPercentFull,
OnGetTraceBufferPercentFull)
IPC_MESSAGE_HANDLER(TracingMsg_SetWatchEvent, OnSetWatchEvent)
@@ -73,6 +77,33 @@ void ChildTraceMessageFilter::OnEndTracing() {
base::Bind(&ChildTraceMessageFilter::OnTraceDataCollected, this));
}
+void ChildTraceMessageFilter::OnEnableMonitoring(
+ const std::string& category_filter_str,
+ base::TimeTicks browser_time,
+ int options) {
+ TraceLog::GetInstance()->SetEnabled(
+ base::debug::CategoryFilter(category_filter_str),
+ static_cast<base::debug::TraceLog::Options>(options));
+}
+
+void ChildTraceMessageFilter::OnDisableMonitoring() {
+ TraceLog::GetInstance()->SetDisabled();
+}
+
+void ChildTraceMessageFilter::OnCaptureMonitoringSnapshot() {
+ // Flush will generate one or more callbacks to
+ // OnMonitoringTraceDataCollected. It's important that the last
+ // OnMonitoringTraceDataCollected gets called before
+ // CaptureMonitoringSnapshotAck below. We are already on the IO thread,
+ // so the OnMonitoringTraceDataCollected calls will not be deferred.
+ TraceLog::GetInstance()->FlushButLeaveBufferIntact(
+ base::Bind(&ChildTraceMessageFilter::
+ OnMonitoringTraceDataCollected,
+ this));
+
+ channel_->Send(new TracingHostMsg_CaptureMonitoringSnapshotAck());
+}
+
void ChildTraceMessageFilter::OnGetTraceBufferPercentFull() {
float bpf = TraceLog::GetInstance()->GetBufferPercentFull();
@@ -109,6 +140,22 @@ void ChildTraceMessageFilter::OnTraceDataCollected(
}
}
+void ChildTraceMessageFilter::OnMonitoringTraceDataCollected(
+ const scoped_refptr<base::RefCountedString>& events_str_ptr,
+ bool has_more_events) {
+ if (!ipc_message_loop_->BelongsToCurrentThread()) {
+ ipc_message_loop_->PostTask(FROM_HERE,
+ base::Bind(&ChildTraceMessageFilter::
+ OnMonitoringTraceDataCollected,
+ this,
+ events_str_ptr,
+ has_more_events));
+ return;
+ }
+ channel_->Send(new TracingHostMsg_MonitoringTraceDataCollected(
+ events_str_ptr->data()));
+}
+
void ChildTraceMessageFilter::OnTraceNotification(int notification) {
if (!ipc_message_loop_->BelongsToCurrentThread()) {
ipc_message_loop_->PostTask(FROM_HERE,
diff --git a/components/tracing/child_trace_message_filter.h b/components/tracing/child_trace_message_filter.h
index 9f10b4a..cbd300f 100644
--- a/components/tracing/child_trace_message_filter.h
+++ b/components/tracing/child_trace_message_filter.h
@@ -32,8 +32,13 @@ class ChildTraceMessageFilter : public IPC::ChannelProxy::MessageFilter {
// Message handlers.
void OnBeginTracing(const std::string& category_filter_str,
base::TimeTicks browser_time,
- int mode);
+ int options);
void OnEndTracing();
+ void OnEnableMonitoring(const std::string& category_filter_str,
+ base::TimeTicks browser_time,
+ int options);
+ void OnDisableMonitoring();
+ void OnCaptureMonitoringSnapshot();
void OnGetTraceBufferPercentFull();
void OnSetWatchEvent(const std::string& category_name,
const std::string& event_name);
@@ -43,6 +48,11 @@ class ChildTraceMessageFilter : public IPC::ChannelProxy::MessageFilter {
void OnTraceDataCollected(
const scoped_refptr<base::RefCountedString>& events_str_ptr,
bool has_more_events);
+
+ void OnMonitoringTraceDataCollected(
+ const scoped_refptr<base::RefCountedString>& events_str_ptr,
+ bool has_more_events);
+
void OnTraceNotification(int notification);
IPC::Channel* channel_;
diff --git a/components/tracing/tracing_messages.h b/components/tracing/tracing_messages.h
index 9beb7e1..25b45bd 100644
--- a/components/tracing/tracing_messages.h
+++ b/components/tracing/tracing_messages.h
@@ -24,6 +24,18 @@ IPC_MESSAGE_CONTROL3(TracingMsg_BeginTracing,
// Sent to all child processes to disable trace event recording.
IPC_MESSAGE_CONTROL0(TracingMsg_EndTracing)
+// Sent to all child processes to start monitoring.
+IPC_MESSAGE_CONTROL3(TracingMsg_EnableMonitoring,
+ std::string /* category_filter_str */,
+ base::TimeTicks /* browser_time */,
+ int /* base::debug::TraceLog::Options */)
+
+// Sent to all child processes to stop monitoring..
+IPC_MESSAGE_CONTROL0(TracingMsg_DisableMonitoring)
+
+// Sent to all child processes to capture the current monitorint snapshot.
+IPC_MESSAGE_CONTROL0(TracingMsg_CaptureMonitoringSnapshot)
+
// Sent to all child processes to get trace buffer fullness.
IPC_MESSAGE_CONTROL0(TracingMsg_GetTraceBufferPercentFull)
@@ -38,18 +50,26 @@ IPC_MESSAGE_CONTROL0(TracingMsg_CancelWatchEvent)
// Notify the browser that this child process supports tracing.
IPC_MESSAGE_CONTROL0(TracingHostMsg_ChildSupportsTracing)
-// Reply from child processes acking ChildProcessMsg_TraceChangeStatus(false).
+// Reply from child processes acking TracingMsg_EndTracing.
IPC_MESSAGE_CONTROL1(TracingHostMsg_EndTracingAck,
std::vector<std::string> /* known_categories */)
+// Reply from child processes acking TracingMsg_CaptureMonitoringSnapshot.
+IPC_MESSAGE_CONTROL0(TracingHostMsg_CaptureMonitoringSnapshotAck)
+
// Sent if the trace buffer becomes full.
IPC_MESSAGE_CONTROL1(TracingHostMsg_TraceNotification,
int /* base::debug::TraceLog::Notification */)
-// Child processes send trace data back in JSON chunks.
+// Child processes send back trace data in JSON chunks.
IPC_MESSAGE_CONTROL1(TracingHostMsg_TraceDataCollected,
std::string /*json trace data*/)
+// Child processes send back trace data of the current monitoring
+// in JSON chunks.
+IPC_MESSAGE_CONTROL1(TracingHostMsg_MonitoringTraceDataCollected,
+ std::string /*json trace data*/)
+
// Reply to TracingMsg_GetTraceBufferPercentFull.
IPC_MESSAGE_CONTROL1(TracingHostMsg_TraceBufferPercentFullReply,
float /*trace buffer percent full*/)