diff options
author | seantopping <seantopping@chromium.org> | 2015-12-17 14:08:23 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-17 22:09:18 +0000 |
commit | 684e479f9a46580b5d5bdcf58944b832f6317dc1 (patch) | |
tree | cd0b123b66663c5dba612b6825167fbaa12edabe /base/trace_event/heap_profiler_allocation_register.cc | |
parent | 53adf16ef292bc721a65b47628b1a3008b502363 (diff) | |
download | chromium_src-684e479f9a46580b5d5bdcf58944b832f6317dc1.zip chromium_src-684e479f9a46580b5d5bdcf58944b832f6317dc1.tar.gz chromium_src-684e479f9a46580b5d5bdcf58944b832f6317dc1.tar.bz2 |
[Tracing] Adjust allocation register size for low-end devices
This patch limits the size of the allocation register and prevents OOM
errors when running AllocationRegisterTest.OverflowDeathTest on low-end
devices.
BUG=570242
Review URL: https://codereview.chromium.org/1530583003
Cr-Commit-Position: refs/heads/master@{#365905}
Diffstat (limited to 'base/trace_event/heap_profiler_allocation_register.cc')
-rw-r--r-- | base/trace_event/heap_profiler_allocation_register.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/base/trace_event/heap_profiler_allocation_register.cc b/base/trace_event/heap_profiler_allocation_register.cc index 37647ee..2920153 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; } |