| // Copyright 2015 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BASE_TRACE_EVENT_MEMORY_DUMP_SESSION_STATE_H_ | 
 | #define BASE_TRACE_EVENT_MEMORY_DUMP_SESSION_STATE_H_ | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/base_export.h" | 
 | #include "base/trace_event/heap_profiler_stack_frame_deduplicator.h" | 
 | #include "base/trace_event/heap_profiler_type_name_deduplicator.h" | 
 | #include "base/trace_event/trace_config.h" | 
 |  | 
 | namespace base { | 
 | namespace trace_event { | 
 |  | 
 | // Container for state variables that should be shared across all the memory | 
 | // dumps in a tracing session. | 
 | class BASE_EXPORT MemoryDumpSessionState | 
 |     : public RefCountedThreadSafe<MemoryDumpSessionState> { | 
 |  public: | 
 |   MemoryDumpSessionState(); | 
 |  | 
 |   // Returns the stack frame deduplicator that should be used by memory dump | 
 |   // providers when doing a heap dump. | 
 |   StackFrameDeduplicator* stack_frame_deduplicator() const { | 
 |     return stack_frame_deduplicator_.get(); | 
 |   } | 
 |  | 
 |   void SetStackFrameDeduplicator( | 
 |       std::unique_ptr<StackFrameDeduplicator> stack_frame_deduplicator); | 
 |  | 
 |   // Returns the type name deduplicator that should be used by memory dump | 
 |   // providers when doing a heap dump. | 
 |   TypeNameDeduplicator* type_name_deduplicator() const { | 
 |     return type_name_deduplicator_.get(); | 
 |   } | 
 |  | 
 |   void SetTypeNameDeduplicator( | 
 |       std::unique_ptr<TypeNameDeduplicator> type_name_deduplicator); | 
 |  | 
 |   const TraceConfig::MemoryDumpConfig& memory_dump_config() const { | 
 |     return memory_dump_config_; | 
 |   } | 
 |  | 
 |   void SetMemoryDumpConfig(const TraceConfig::MemoryDumpConfig& config); | 
 |  | 
 |  private: | 
 |   friend class RefCountedThreadSafe<MemoryDumpSessionState>; | 
 |   ~MemoryDumpSessionState(); | 
 |  | 
 |   // Deduplicates backtraces in heap dumps so they can be written once when the | 
 |   // trace is finalized. | 
 |   std::unique_ptr<StackFrameDeduplicator> stack_frame_deduplicator_; | 
 |  | 
 |   // Deduplicates type names in heap dumps so they can be written once when the | 
 |   // trace is finalized. | 
 |   std::unique_ptr<TypeNameDeduplicator> type_name_deduplicator_; | 
 |  | 
 |   // The memory dump config, copied at the time when the tracing session was | 
 |   // started. | 
 |   TraceConfig::MemoryDumpConfig memory_dump_config_; | 
 | }; | 
 |  | 
 | }  // namespace trace_event | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_TRACE_EVENT_MEMORY_DUMP_SESSION_STATE_H_ |