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

Side by Side Diff: base/trace_event/heap_profiler_allocation_register.h

Issue 1574493002: [Tracing] Add lookup support to AllocationRegister (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « no previous file | base/trace_event/heap_profiler_allocation_register.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_REGISTER_H_ 5 #ifndef BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_REGISTER_H_
6 #define BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_REGISTER_H_ 6 #define BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_REGISTER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 16 matching lines...) Expand all
27 // stored. 27 // stored.
28 // 28 //
29 // Replaying a recording of Chrome's allocations and frees against this hash 29 // Replaying a recording of Chrome's allocations and frees against this hash
30 // table takes about 15% of the time that it takes to replay them against 30 // table takes about 15% of the time that it takes to replay them against
31 // |std::map|. 31 // |std::map|.
32 class BASE_EXPORT AllocationRegister { 32 class BASE_EXPORT AllocationRegister {
33 public: 33 public:
34 // The data stored in the hash table; 34 // The data stored in the hash table;
35 // contains the details about an allocation. 35 // contains the details about an allocation.
36 struct Allocation { 36 struct Allocation {
37 void* address; 37 void* const address;
38 size_t size; 38 size_t size;
39 AllocationContext context; 39 AllocationContext context;
40 }; 40 };
41 41
42 // An iterator that iterates entries in the hash table efficiently, but in no 42 // An iterator that iterates entries in the hash table efficiently, but in no
43 // particular order. It can do this by iterating the cells and ignoring the 43 // particular order. It can do this by iterating the cells and ignoring the
44 // linked lists altogether. Instead of checking whether a cell is in the free 44 // linked lists altogether. Instead of checking whether a cell is in the free
45 // list to see if it should be skipped, a null address is used to indicate 45 // list to see if it should be skipped, a null address is used to indicate
46 // that a cell is free. 46 // that a cell is free.
47 class BASE_EXPORT ConstIterator { 47 class BASE_EXPORT ConstIterator {
(...skipping 20 matching lines...) Expand all
68 // Inserts allocation details into the table. If the address was present 68 // Inserts allocation details into the table. If the address was present
69 // already, its details are updated. |address| must not be null. (This is 69 // already, its details are updated. |address| must not be null. (This is
70 // because null is used to mark free cells, to allow efficient iteration of 70 // because null is used to mark free cells, to allow efficient iteration of
71 // the hash table.) 71 // the hash table.)
72 void Insert(void* address, size_t size, AllocationContext context); 72 void Insert(void* address, size_t size, AllocationContext context);
73 73
74 // Removes the address from the table if it is present. It is ok to call this 74 // Removes the address from the table if it is present. It is ok to call this
75 // with a null pointer. 75 // with a null pointer.
76 void Remove(void* address); 76 void Remove(void* address);
77 77
78 // Returns a pointer to the allocation at the address, or null if there is no
79 // allocation at that address. This can be used to change the allocation
80 // context after insertion, for example to change the type name.
81 Allocation* Get(void* address);
82
78 ConstIterator begin() const; 83 ConstIterator begin() const;
79 ConstIterator end() const; 84 ConstIterator end() const;
80 85
81 // Estimates memory overhead including |sizeof(AllocationRegister)|. 86 // Estimates memory overhead including |sizeof(AllocationRegister)|.
82 void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead) const; 87 void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead) const;
83 88
84 private: 89 private:
85 friend class AllocationRegisterTest; 90 friend class AllocationRegisterTest;
86 using CellIndex = uint32_t; 91 using CellIndex = uint32_t;
87 92
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 // is used. This is the high water mark for the number of entries stored. 167 // is used. This is the high water mark for the number of entries stored.
163 CellIndex next_unused_cell_; 168 CellIndex next_unused_cell_;
164 169
165 DISALLOW_COPY_AND_ASSIGN(AllocationRegister); 170 DISALLOW_COPY_AND_ASSIGN(AllocationRegister);
166 }; 171 };
167 172
168 } // namespace trace_event 173 } // namespace trace_event
169 } // namespace base 174 } // namespace base
170 175
171 #endif // BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_REGISTER_H_ 176 #endif // BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_REGISTER_H_
OLDNEW
« no previous file with comments | « no previous file | base/trace_event/heap_profiler_allocation_register.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698