| Index: base/trace_event/heap_profiler_allocation_register.cc
|
| diff --git a/base/trace_event/heap_profiler_allocation_register.cc b/base/trace_event/heap_profiler_allocation_register.cc
|
| index 37647eefbbb1246bea852f86adfe6843903801ee..292015359e9f88f6e0a8f76c3ea2bf2ede884ce3 100644
|
| --- a/base/trace_event/heap_profiler_allocation_register.cc
|
| +++ b/base/trace_event/heap_profiler_allocation_register.cc
|
| @@ -10,10 +10,14 @@ namespace base {
|
| namespace trace_event {
|
|
|
| AllocationRegister::AllocationRegister()
|
| - // Reserve enough address space to store |kNumCells| entries if necessary,
|
| + : AllocationRegister(kNumBuckets * kNumCellsPerBucket) {}
|
| +
|
| +AllocationRegister::AllocationRegister(uint32_t num_cells)
|
| + // Reserve enough address space to store |num_cells_| entries if necessary,
|
| // with a guard page after it to crash the program when attempting to store
|
| // more entries.
|
| - : cells_(static_cast<Cell*>(AllocateVirtualMemory(kNumCells *
|
| + : num_cells_(num_cells),
|
| + cells_(static_cast<Cell*>(AllocateVirtualMemory(num_cells_ *
|
| sizeof(Cell)))),
|
| buckets_(static_cast<CellIndex*>(
|
| AllocateVirtualMemory(kNumBuckets * sizeof(CellIndex)))),
|
| @@ -23,9 +27,10 @@ AllocationRegister::AllocationRegister()
|
| free_list_(0),
|
| next_unused_cell_(1) {}
|
|
|
| +
|
| AllocationRegister::~AllocationRegister() {
|
| FreeVirtualMemory(buckets_, kNumBuckets * sizeof(CellIndex));
|
| - FreeVirtualMemory(cells_, kNumCells * sizeof(Cell));
|
| + FreeVirtualMemory(cells_, num_cells_ * sizeof(Cell));
|
| }
|
|
|
| void AllocationRegister::Insert(void* address,
|
| @@ -144,7 +149,7 @@ AllocationRegister::CellIndex AllocationRegister::GetFreeCell() {
|
| // the simplest solution is to just allocate a humongous chunk of address
|
| // space.
|
|
|
| - DCHECK_LT(next_unused_cell_, kNumCells + 1);
|
| + DCHECK_LT(next_unused_cell_, num_cells_ + 1);
|
|
|
| return idx;
|
| }
|
|
|