| Index: base/trace_event/memory_allocator_attributes_type_info.cc
|
| diff --git a/base/trace_event/memory_allocator_attributes_type_info.cc b/base/trace_event/memory_allocator_attributes_type_info.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7d1e61cada7f3423a2d48e7b188fbf13b8195f2c
|
| --- /dev/null
|
| +++ b/base/trace_event/memory_allocator_attributes_type_info.cc
|
| @@ -0,0 +1,61 @@
|
| +// 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.
|
| +
|
| +#include "base/trace_event/memory_allocator_attributes_type_info.h"
|
| +
|
| +#include "base/lazy_instance.h"
|
| +#include "base/logging.h"
|
| +
|
| +namespace base {
|
| +namespace trace_event {
|
| +
|
| +namespace {
|
| +base::LazyInstance<const std::string> kNotFound = LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +std::string GetKey(const std::string& allocator_name,
|
| + const std::string& attribute_name) {
|
| + return allocator_name + "/" + attribute_name;
|
| +}
|
| +} // namespace
|
| +
|
| +MemoryAllocatorAttributesTypeInfo::MemoryAllocatorAttributesTypeInfo() {
|
| +}
|
| +
|
| +MemoryAllocatorAttributesTypeInfo::~MemoryAllocatorAttributesTypeInfo() {
|
| +}
|
| +
|
| +const std::string& MemoryAllocatorAttributesTypeInfo::Get(
|
| + const std::string& allocator_name,
|
| + const std::string& attribute_name) const {
|
| + auto it = type_info_map_.find(GetKey(allocator_name, attribute_name));
|
| + if (it == type_info_map_.end())
|
| + return kNotFound.Get();
|
| + return it->second;
|
| +}
|
| +
|
| +void MemoryAllocatorAttributesTypeInfo::Set(const std::string& allocator_name,
|
| + const std::string& attribute_name,
|
| + const std::string& attribute_type) {
|
| + std::string key = GetKey(allocator_name, attribute_name);
|
| + DCHECK_EQ(0u, type_info_map_.count(key));
|
| + type_info_map_[key] = attribute_type;
|
| +}
|
| +
|
| +bool MemoryAllocatorAttributesTypeInfo::Exists(
|
| + const std::string& allocator_name,
|
| + const std::string& attribute_name) const {
|
| + return type_info_map_.count(GetKey(allocator_name, attribute_name)) == 1;
|
| +}
|
| +
|
| +void MemoryAllocatorAttributesTypeInfo::Update(
|
| + const MemoryAllocatorAttributesTypeInfo& other) {
|
| + for (auto it = other.type_info_map_.begin();
|
| + it != other.type_info_map_.end(); ++it) {
|
| + bool no_duplicates = type_info_map_.insert(*it).second;
|
| + DCHECK(no_duplicates) << "Duplicated allocator attribute " << it->first;
|
| + }
|
| +}
|
| +
|
| +} // namespace trace_event
|
| +} // namespace base
|
|
|