blob: ee2b4907a81b64c7c815ad8b794f58c0a1ac0c08 [file] [log] [blame]
// Copyright 2017 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/memory/shared_memory_tracker.h"
#include "base/memory/shared_memory.h"
#include "base/strings/string_number_conversions.h"
namespace base {
const char SharedMemoryTracker::kDumpRootName[] = "shared_memory";
// static
SharedMemoryTracker* SharedMemoryTracker::GetInstance() {
static SharedMemoryTracker* instance = new SharedMemoryTracker;
return instance;
}
// static
std::string SharedMemoryTracker::GetDumpNameForTracing(
const UnguessableToken& id) {
DCHECK(!id.is_empty());
return std::string(kDumpRootName) + "/" + id.ToString();
}
void SharedMemoryTracker::IncrementMemoryUsage(
const SharedMemory& shared_memory) {
AutoLock hold(usages_lock_);
DCHECK(usages_.find(shared_memory.memory()) == usages_.end());
usages_.emplace(shared_memory.memory(), UsageInfo(shared_memory.mapped_size(),
shared_memory.mapped_id()));
}
void SharedMemoryTracker::IncrementMemoryUsage(
const SharedMemoryMapping& mapping) {
AutoLock hold(usages_lock_);
DCHECK(usages_.find(mapping.raw_memory_ptr()) == usages_.end());
usages_.emplace(mapping.raw_memory_ptr(),
UsageInfo(mapping.mapped_size(), mapping.guid()));
}
void SharedMemoryTracker::DecrementMemoryUsage(
const SharedMemory& shared_memory) {
AutoLock hold(usages_lock_);
DCHECK(usages_.find(shared_memory.memory()) != usages_.end());
usages_.erase(shared_memory.memory());
}
void SharedMemoryTracker::DecrementMemoryUsage(
const SharedMemoryMapping& mapping) {
AutoLock hold(usages_lock_);
DCHECK(usages_.find(mapping.raw_memory_ptr()) != usages_.end());
usages_.erase(mapping.raw_memory_ptr());
}
SharedMemoryTracker::SharedMemoryTracker() {
}
SharedMemoryTracker::~SharedMemoryTracker() = default;
} // namespace