Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: base/memory/shared_memory_tracker.cc

Issue 2535213002: [WIP] Add SharedMemoryTracker to dump base::SharedMemory usage
Patch Set: Address on primiano's review Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/memory/shared_memory_tracker.h"
6
7 #include "base/memory/shared_memory.h"
8 #include "base/strings/stringprintf.h"
9 #include "base/trace_event/memory_dump_manager.h"
10 #include "base/trace_event/process_memory_dump.h"
11
12 namespace base {
13
14 const char* kSharedMemoryDumpName = "sharedmemory";
ssid 2017/01/24 04:39:50 shared_memory? other dump provider add names with
15
16 SharedMemoryTracker* SharedMemoryTracker::GetInstance() {
17 return base::Singleton<SharedMemoryTracker, base::LeakySingletonTraits<
18 SharedMemoryTracker>>::get();
19 }
20
21 bool SharedMemoryTracker::AddOwnershipEdgeToSharedGlobalDump(
ssid 2017/01/24 04:39:50 I think this should be changed to: SharedMemoryTra
22 trace_event::ProcessMemoryDump* pmd,
23 const trace_event::MemoryAllocatorDumpGuid& source,
24 const SharedMemoryHandle& shared_memory_handle,
25 size_t mapped_size) {
26 SharedMemoryHandleID id;
27 if (!GetIDFromSharedMemoryHandle(shared_memory_handle, &id)) {
28 return false;
29 }
30 std::string id_str = GetSharedMemoryHandleIDString(id);
31 std::string dump_name =
32 base::StringPrintf("%s/%s", kSharedMemoryDumpName, id_str.c_str());
33 auto global_dump = pmd->CreateSharedGlobalAllocatorDump(
34 base::trace_event::MemoryAllocatorDumpGuid(dump_name));
35 global_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
36 base::trace_event::MemoryAllocatorDump::kUnitsBytes,
37 mapped_size);
38 pmd->AddOwnershipEdge(source, global_dump->guid());
39 return true;
40 }
41
42 bool SharedMemoryTracker::OnMemoryDump(
43 const base::trace_event::MemoryDumpArgs& args,
44 base::trace_event::ProcessMemoryDump* pmd) {
45 for (auto& bucket : buckets_) {
46 base::AutoLock lock(bucket.lock);
47 for (const auto& usage : bucket.usages) {
48 SharedMemoryHandleID id = usage.first;
49 std::string id_str = GetSharedMemoryHandleIDString(id);
50 std::string dump_name =
51 base::StringPrintf("%s/%s", kSharedMemoryDumpName, id_str.c_str());
52 auto guid = base::trace_event::MemoryAllocatorDumpGuid(dump_name);
53 base::trace_event::MemoryAllocatorDump* local_dump =
54 pmd->CreateAllocatorDump(dump_name);
55 local_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
56 base::trace_event::MemoryAllocatorDump::kUnitsBytes,
57 usage.second);
58 base::trace_event::MemoryAllocatorDump* global_dump =
59 pmd->CreateSharedGlobalAllocatorDump(guid);
60 global_dump->AddScalar(
61 base::trace_event::MemoryAllocatorDump::kNameSize,
62 base::trace_event::MemoryAllocatorDump::kUnitsBytes, usage.second);
63 pmd->AddOwnershipEdge(local_dump->guid(), global_dump->guid());
64 }
65 }
66 return true;
67 }
68
69 bool SharedMemoryTracker::IncrementMemoryUsage(
70 const SharedMemory& shared_memory) {
71 SharedMemoryHandleID id;
72 if (!GetIDFromSharedMemoryHandle(shared_memory.handle(), &id)) {
73 return false;
74 }
75 int bucket = id.file_id % kTrackerBucketNum;
76 base::AutoLock lock(buckets_[bucket].lock);
77 buckets_[bucket].usages[id] = shared_memory.mapped_size();
78 return true;
79 }
80
81 bool SharedMemoryTracker::DecrementMemoryUsage(
82 const SharedMemory& shared_memory) {
83 SharedMemoryHandleID id;
84 if (!GetIDFromSharedMemoryHandle(shared_memory.handle(), &id)) {
85 return false;
86 }
87 int bucket = id.file_id % kTrackerBucketNum;
88 base::AutoLock lock(buckets_[bucket].lock);
89 buckets_[bucket].usages.erase(id);
90 return true;
91 }
92
93 SharedMemoryTracker::SharedMemoryTracker() {
94 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
95 this, "SharedMemoryTracker", nullptr);
96 }
97
98 SharedMemoryTracker::~SharedMemoryTracker() {}
99
100 SharedMemoryTracker::TrackerBucket::TrackerBucket() {}
101
102 SharedMemoryTracker::TrackerBucket::~TrackerBucket() {}
103
104 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698