blob: 69468d46409826b190e014f81e91d837bf4ca136 [file] [log] [blame]
// 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_TRACE_EVENT_MEMORY_OVERHEAD_H_
#define BASE_TRACE_EVENT_TRACE_EVENT_MEMORY_OVERHEAD_H_
#include <stddef.h>
#include <stdint.h>
#include <unordered_map>
#include "base/base_export.h"
#include "base/macros.h"
namespace base {
class RefCountedString;
class Value;
namespace trace_event {
class ProcessMemoryDump;
// Used to estimate the memory overhead of the tracing infrastructure.
class BASE_EXPORT TraceEventMemoryOverhead {
public:
enum ObjectType : uint32_t {
kOther = 0,
kTraceBuffer,
kTraceBufferChunk,
kTraceEvent,
kUnusedTraceEvent,
kTracedValue,
kConvertableToTraceFormat,
kHeapProfilerAllocationRegister,
kHeapProfilerTypeNameDeduplicator,
kHeapProfilerStackFrameDeduplicator,
kStdString,
kBaseValue,
kTraceEventMemoryOverhead,
kFrameMetrics,
kLast
};
TraceEventMemoryOverhead();
~TraceEventMemoryOverhead();
// Use this method to account the overhead of an object for which an estimate
// is known for both the allocated and resident memory.
void Add(ObjectType object_type,
size_t allocated_size_in_bytes,
size_t resident_size_in_bytes);
// Similar to Add() above, but assumes that
// |resident_size_in_bytes| == |allocated_size_in_bytes|.
void Add(ObjectType object_type, size_t allocated_size_in_bytes);
// Specialized profiling functions for commonly used object types.
void AddString(const std::string& str);
void AddValue(const Value& value);
void AddRefCountedString(const RefCountedString& str);
// Call this after all the Add* methods above to account the memory used by
// this TraceEventMemoryOverhead instance itself.
void AddSelf();
// Retrieves the count, that is, the count of Add*(|object_type|, ...) calls.
size_t GetCount(ObjectType object_type) const;
// Adds up and merges all the values from |other| to this instance.
void Update(const TraceEventMemoryOverhead& other);
void DumpInto(const char* base_name, ProcessMemoryDump* pmd) const;
private:
struct ObjectCountAndSize {
size_t count;
size_t allocated_size_in_bytes;
size_t resident_size_in_bytes;
};
ObjectCountAndSize allocated_objects_[ObjectType::kLast];
void AddInternal(ObjectType object_type,
size_t count,
size_t allocated_size_in_bytes,
size_t resident_size_in_bytes);
DISALLOW_COPY_AND_ASSIGN(TraceEventMemoryOverhead);
};
} // namespace trace_event
} // namespace base
#endif // BASE_TRACE_EVENT_TRACE_EVENT_MEMORY_OVERHEAD_H_