| // 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 |