diff options
author | haraken@chromium.org <haraken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-03 07:22:44 +0000 |
---|---|---|
committer | haraken@chromium.org <haraken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-03 07:22:44 +0000 |
commit | 97316aa62605bf5ff50a7ebb98773079bcff71ae (patch) | |
tree | 7580966e7aaaa47f5c66fd55f5aa8e987d8077bc /components | |
parent | 5d06a1856ba7df6e4ae52ff713b439f43b140562 (diff) | |
download | chromium_src-97316aa62605bf5ff50a7ebb98773079bcff71ae.zip chromium_src-97316aa62605bf5ff50a7ebb98773079bcff71ae.tar.gz chromium_src-97316aa62605bf5ff50a7ebb98773079bcff71ae.tar.bz2 |
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
Review URL: https://codereview.chromium.org/23531042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226701 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components')
-rw-r--r-- | components/tracing/child_trace_message_filter.cc | 47 | ||||
-rw-r--r-- | components/tracing/child_trace_message_filter.h | 12 | ||||
-rw-r--r-- | components/tracing/tracing_messages.h | 24 |
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*/) |