From 9c57113ab1469a65cea2c0ec48dae2fdce9a8f19 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Wed, 22 Feb 2017 11:59:57 +0000 Subject: Move StackMapStream deduplication maps to arena. Measured compilation of a big app using heap track: bytes allocated in total (ignoring deallocations): 4.14GB -> 3.98GB calls to allocation functions: 21662554 -> 1016606 Test: testrunner.py --host Bug: 34053922 Change-Id: I0b1c4b5273daa2bc35e039df246bafad417b9b2b --- compiler/optimizing/stack_map_stream.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'compiler/optimizing/stack_map_stream.cc') diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc index eeae96e6c2..4d12ad6eb6 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -16,8 +16,6 @@ #include "stack_map_stream.h" -#include - #include "art_method-inl.h" #include "base/stl_util.h" #include "optimizing/optimizing_compiler.h" @@ -526,7 +524,7 @@ void StackMapStream::CheckDexRegisterMap(const CodeInfo& code_info, size_t StackMapStream::PrepareRegisterMasks() { register_masks_.resize(stack_maps_.size(), 0u); - std::unordered_map dedupe; + ArenaUnorderedMap dedupe(allocator_->Adapter(kArenaAllocStackMapStream)); for (StackMapEntry& stack_map : stack_maps_) { const size_t index = dedupe.size(); stack_map.register_mask_index = dedupe.emplace(stack_map.register_mask, index).first->second; @@ -541,10 +539,11 @@ size_t StackMapStream::PrepareStackMasks(size_t entry_size_in_bits) { stack_masks_.resize(byte_entry_size * stack_maps_.size(), 0u); // For deduplicating we store the stack masks as byte packed for simplicity. We can bit pack later // when copying out from stack_masks_. - std::unordered_map, - MemoryRegion::ContentEquals> dedup(stack_maps_.size()); + ArenaUnorderedMap, + MemoryRegion::ContentEquals> dedup( + stack_maps_.size(), allocator_->Adapter(kArenaAllocStackMapStream)); for (StackMapEntry& stack_map : stack_maps_) { size_t index = dedup.size(); MemoryRegion stack_mask(stack_masks_.data() + index * byte_entry_size, byte_entry_size); -- cgit v1.2.3-59-g8ed1b