| Index: components/tracing/child/child_trace_message_filter.cc
|
| diff --git a/components/tracing/child/child_trace_message_filter.cc b/components/tracing/child/child_trace_message_filter.cc
|
| index ed2be875c7da066e73b97ee3e044e14f61b5c68d..6012a96a8f4291afecf2278757e9c16cde8d9ec2 100644
|
| --- a/components/tracing/child/child_trace_message_filter.cc
|
| +++ b/components/tracing/child/child_trace_message_filter.cc
|
| @@ -8,11 +8,13 @@
|
|
|
| #include "base/memory/ref_counted_memory.h"
|
| #include "base/metrics/statistics_recorder.h"
|
| +#include "base/trace_event/memory_dump_manager.h"
|
| #include "base/trace_event/trace_event.h"
|
| -#include "components/tracing/child/child_memory_dump_manager_delegate_impl.h"
|
| +#include "components/tracing/common/process_metrics_memory_dump_provider.h"
|
| #include "components/tracing/common/tracing_messages.h"
|
| #include "ipc/ipc_channel.h"
|
|
|
| +using base::trace_event::MemoryDumpManager;
|
| using base::trace_event::TraceLog;
|
|
|
| namespace tracing {
|
| @@ -25,16 +27,18 @@ const int kMinTimeBetweenHistogramChangesInSeconds = 10;
|
|
|
| ChildTraceMessageFilter::ChildTraceMessageFilter(
|
| base::SingleThreadTaskRunner* ipc_task_runner)
|
| - : sender_(NULL),
|
| - ipc_task_runner_(ipc_task_runner),
|
| - pending_memory_dump_guid_(0) {
|
| -}
|
| + : sender_(NULL), ipc_task_runner_(ipc_task_runner) {}
|
|
|
| void ChildTraceMessageFilter::OnFilterAdded(IPC::Channel* channel) {
|
| sender_ = channel;
|
| sender_->Send(new TracingHostMsg_ChildSupportsTracing());
|
| - ChildMemoryDumpManagerDelegateImpl::GetInstance()->SetChildTraceMessageFilter(
|
| - this);
|
| +
|
| +#if !defined(OS_LINUX) && !defined(OS_NACL)
|
| + // On linux the browser process takes care of dumping process metrics.
|
| + // The child process is not allowed to do so due to BPF sandbox.
|
| + tracing::ProcessMetricsMemoryDumpProvider::RegisterForProcess(
|
| + base::kNullProcessId);
|
| +#endif
|
| }
|
|
|
| void ChildTraceMessageFilter::SetSenderForTesting(IPC::Sender* sender) {
|
| @@ -42,8 +46,6 @@ void ChildTraceMessageFilter::SetSenderForTesting(IPC::Sender* sender) {
|
| }
|
|
|
| void ChildTraceMessageFilter::OnFilterRemoved() {
|
| - ChildMemoryDumpManagerDelegateImpl::GetInstance()->SetChildTraceMessageFilter(
|
| - nullptr);
|
| sender_ = NULL;
|
| }
|
|
|
| @@ -54,10 +56,6 @@ bool ChildTraceMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(TracingMsg_EndTracing, OnEndTracing)
|
| IPC_MESSAGE_HANDLER(TracingMsg_CancelTracing, OnCancelTracing)
|
| IPC_MESSAGE_HANDLER(TracingMsg_GetTraceLogStatus, OnGetTraceLogStatus)
|
| - IPC_MESSAGE_HANDLER(TracingMsg_ProcessMemoryDumpRequest,
|
| - OnProcessMemoryDumpRequest)
|
| - IPC_MESSAGE_HANDLER(TracingMsg_GlobalMemoryDumpResponse,
|
| - OnGlobalMemoryDumpResponse)
|
| IPC_MESSAGE_HANDLER(TracingMsg_SetUMACallback, OnSetUMACallback)
|
| IPC_MESSAGE_HANDLER(TracingMsg_ClearUMACallback, OnClearUMACallback)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| @@ -78,8 +76,7 @@ void ChildTraceMessageFilter::OnBeginTracing(
|
| base::TimeDelta time_offset = base::TimeTicks::Now() - browser_time;
|
| TraceLog::GetInstance()->SetTimeOffset(time_offset);
|
| #endif
|
| - ChildMemoryDumpManagerDelegateImpl::GetInstance()->set_tracing_process_id(
|
| - tracing_process_id);
|
| + MemoryDumpManager::GetInstance()->set_tracing_process_id(tracing_process_id);
|
| TraceLog::GetInstance()->SetEnabled(
|
| base::trace_event::TraceConfig(trace_config_str),
|
| base::trace_event::TraceLog::RECORDING_MODE);
|
| @@ -95,8 +92,8 @@ void ChildTraceMessageFilter::OnEndTracing() {
|
| TraceLog::GetInstance()->Flush(
|
| base::Bind(&ChildTraceMessageFilter::OnTraceDataCollected, this));
|
|
|
| - ChildMemoryDumpManagerDelegateImpl::GetInstance()->set_tracing_process_id(
|
| - base::trace_event::MemoryDumpManager::kInvalidTracingProcessId);
|
| + MemoryDumpManager::GetInstance()->set_tracing_process_id(
|
| + MemoryDumpManager::kInvalidTracingProcessId);
|
| }
|
|
|
| void ChildTraceMessageFilter::OnCancelTracing() {
|
| @@ -129,52 +126,6 @@ void ChildTraceMessageFilter::OnTraceDataCollected(
|
| }
|
| }
|
|
|
| -// Sent by the Browser's MemoryDumpManager when coordinating a global dump.
|
| -void ChildTraceMessageFilter::OnProcessMemoryDumpRequest(
|
| - const base::trace_event::MemoryDumpRequestArgs& args) {
|
| - ChildMemoryDumpManagerDelegateImpl::GetInstance()->CreateProcessDump(
|
| - args,
|
| - base::Bind(&ChildTraceMessageFilter::OnProcessMemoryDumpDone, this));
|
| -}
|
| -
|
| -void ChildTraceMessageFilter::OnProcessMemoryDumpDone(uint64_t dump_guid,
|
| - bool success) {
|
| - sender_->Send(
|
| - new TracingHostMsg_ProcessMemoryDumpResponse(dump_guid, success));
|
| -}
|
| -
|
| -// Initiates a dump request, asking the Browser's MemoryDumpManager to
|
| -// coordinate a global memory dump. The Browser's MDM will answer back with a
|
| -// MemoryDumpResponse when all the child processes (including this one) have
|
| -// dumped, or with a NACK (|success| == false) if the dump failed (e.g., due to
|
| -// a collision with a concurrent request from another child process).
|
| -void ChildTraceMessageFilter::SendGlobalMemoryDumpRequest(
|
| - const base::trace_event::MemoryDumpRequestArgs& args,
|
| - const base::trace_event::MemoryDumpCallback& callback) {
|
| - // If there is already another dump request pending from this child process,
|
| - // there is no point bothering the Browser's MemoryDumpManager.
|
| - if (pending_memory_dump_guid_) {
|
| - if (!callback.is_null())
|
| - callback.Run(args.dump_guid, false);
|
| - return;
|
| - }
|
| -
|
| - pending_memory_dump_guid_ = args.dump_guid;
|
| - pending_memory_dump_callback_ = callback;
|
| - sender_->Send(new TracingHostMsg_GlobalMemoryDumpRequest(args));
|
| -}
|
| -
|
| -// Sent by the Browser's MemoryDumpManager in response of a dump request
|
| -// initiated by this child process.
|
| -void ChildTraceMessageFilter::OnGlobalMemoryDumpResponse(uint64_t dump_guid,
|
| - bool success) {
|
| - DCHECK_NE(0U, pending_memory_dump_guid_);
|
| - pending_memory_dump_guid_ = 0;
|
| - if (pending_memory_dump_callback_.is_null())
|
| - return;
|
| - pending_memory_dump_callback_.Run(dump_guid, success);
|
| -}
|
| -
|
| void ChildTraceMessageFilter::OnHistogramChanged(
|
| const std::string& histogram_name,
|
| base::Histogram::Sample reference_lower_value,
|
|
|