Roll src/third_party/skia 10b371c:c71239b
[chromium-blink-merge.git] / components / tracing / child_memory_dump_manager_delegate_impl.h
blob912815dd0186dd366799b3c343fb2dd88561c0df
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"
13 namespace base {
14 class SingleThreadTaskRunner;
15 } // namespace base
17 namespace tracing {
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 {
29 public:
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;
38 void SetChildTraceMessageFilter(ChildTraceMessageFilter* ctmf);
40 protected:
41 // Make CreateProcessDump() visible to ChildTraceMessageFilter.
42 friend class ChildTraceMessageFilter;
44 private:
45 friend struct DefaultSingletonTraits<ChildMemoryDumpManagerDelegateImpl>;
47 ChildMemoryDumpManagerDelegateImpl();
48 ~ChildMemoryDumpManagerDelegateImpl() override;
50 ChildTraceMessageFilter* ctmf_; // Not owned.
52 // The SingleThreadTaskRunner where the |ctmf_| lives.
53 // It is NULL iff |cmtf_| is NULL.
54 scoped_refptr<base::SingleThreadTaskRunner> ctmf_task_runner_;
56 DISALLOW_COPY_AND_ASSIGN(ChildMemoryDumpManagerDelegateImpl);
59 } // namespace tracing
61 #endif // COMPONENTS_TRACING_CHILD_MEMORY_DUMP_MANAGER_DELEGATE_IMPL_H_