1 // Copyright 2015 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.
5 #ifndef COMPONENTS_TRACING_CHILD_MEMORY_DUMP_MANAGER_DELEGATE_IMPL_H_
6 #define COMPONENTS_TRACING_CHILD_MEMORY_DUMP_MANAGER_DELEGATE_IMPL_H_
8 #include "base/trace_event/memory_dump_manager.h"
10 #include "base/memory/ref_counted.h"
11 #include "base/memory/singleton.h"
14 class SingleThreadTaskRunner
;
19 class ChildTraceMessageFilter
;
21 // This class is a simple proxy class between the MemoryDumpManager and the
22 // ChildTraceMessageFilter. It's only purpose is to adapt the lifetime of
23 // CTMF to the demands of MDM, which expects the delegate to be thread-safe
24 // and long lived. CTMF, instead, can be torn down during browser shutdown.
25 // This class is registered as MDM delegate in child processes and handles
26 // gracefully (and thread-safely) failures in the case of a lack of the CTMF.
27 class ChildMemoryDumpManagerDelegateImpl
28 : public base::trace_event::MemoryDumpManagerDelegate
{
30 static ChildMemoryDumpManagerDelegateImpl
* GetInstance();
32 // base::trace_event::MemoryDumpManagerDelegate implementation.
33 void RequestGlobalMemoryDump(
34 const base::trace_event::MemoryDumpRequestArgs
& args
,
35 const base::trace_event::MemoryDumpCallback
& callback
) override
;
36 bool IsCoordinatorProcess() const override
;
37 uint64
GetTracingProcessId() const override
;
39 void SetChildTraceMessageFilter(ChildTraceMessageFilter
* ctmf
);
41 // Pass kInvalidTracingProcessId to invalidate the id.
42 void set_tracing_process_id(uint64 id
) {
44 tracing_process_id_
!=
45 base::trace_event::MemoryDumpManager::kInvalidTracingProcessId
,
46 id
== base::trace_event::MemoryDumpManager::kInvalidTracingProcessId
||
47 id
== tracing_process_id_
);
48 tracing_process_id_
= id
;
52 // Make CreateProcessDump() visible to ChildTraceMessageFilter.
53 friend class ChildTraceMessageFilter
;
56 friend struct DefaultSingletonTraits
<ChildMemoryDumpManagerDelegateImpl
>;
58 ChildMemoryDumpManagerDelegateImpl();
59 ~ChildMemoryDumpManagerDelegateImpl() override
;
61 ChildTraceMessageFilter
* ctmf_
; // Not owned.
63 // The SingleThreadTaskRunner where the |ctmf_| lives.
64 // It is NULL iff |cmtf_| is NULL.
65 scoped_refptr
<base::SingleThreadTaskRunner
> ctmf_task_runner_
;
67 // The unique id of the child process, created for tracing and is expected to
68 // be valid only when tracing is enabled.
69 uint64 tracing_process_id_
;
71 DISALLOW_COPY_AND_ASSIGN(ChildMemoryDumpManagerDelegateImpl
);
74 } // namespace tracing
76 #endif // COMPONENTS_TRACING_CHILD_MEMORY_DUMP_MANAGER_DELEGATE_IMPL_H_