|  | // 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_HEAP_PROFILER_SERIALIZATION_STATE_H_ | 
|  | #define BASE_TRACE_EVENT_HEAP_PROFILER_SERIALIZATION_STATE_H_ | 
|  |  | 
|  | #include <memory> | 
|  | #include <set> | 
|  |  | 
|  | #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/memory_dump_request_args.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 HeapProfilerSerializationState | 
|  | : public RefCountedThreadSafe<HeapProfilerSerializationState> { | 
|  | public: | 
|  | HeapProfilerSerializationState(); | 
|  |  | 
|  | // 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); | 
|  |  | 
|  | void SetAllowedDumpModes( | 
|  | std::set<MemoryDumpLevelOfDetail> allowed_dump_modes); | 
|  |  | 
|  | bool IsDumpModeAllowed(MemoryDumpLevelOfDetail dump_mode) const; | 
|  |  | 
|  | void set_heap_profiler_breakdown_threshold_bytes(uint32_t value) { | 
|  | heap_profiler_breakdown_threshold_bytes_ = value; | 
|  | } | 
|  |  | 
|  | uint32_t heap_profiler_breakdown_threshold_bytes() const { | 
|  | return heap_profiler_breakdown_threshold_bytes_; | 
|  | } | 
|  |  | 
|  | bool is_initialized() const { | 
|  | return stack_frame_deduplicator_ && type_name_deduplicator_ && | 
|  | heap_profiler_breakdown_threshold_bytes_; | 
|  | } | 
|  |  | 
|  | private: | 
|  | friend class RefCountedThreadSafe<HeapProfilerSerializationState>; | 
|  | ~HeapProfilerSerializationState(); | 
|  |  | 
|  | // 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_; | 
|  |  | 
|  | uint32_t heap_profiler_breakdown_threshold_bytes_; | 
|  | }; | 
|  |  | 
|  | }  // namespace trace_event | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_TRACE_EVENT_HEAP_PROFILER_SERIALIZATION_STATE_H |