ART: Fix valgrind
Allow ValgrindMallocSpace wrapper for RosAlloc.Requires refactoring,
as ValgrindMallocSpace was bound to the signature of DlMallocSpace.
Also turn of native stack dumping when running under Valgrind to
work around b/18119146.
Ritzperf before and after
Mean 3190.725 3082.475
Standard Error 11.68407 10.37911
Mode 3069 2980
Median 3182.5 3051.5
Variance 16382.117 12927.125
Standard Deviation 127.99264 113.69751
Kurtosis 1.1065632 0.3657799
Skewness 0.9013805 0.9117792
Range 644 528
Minimum 2991 2928
Maximum 3635 3456
Count 120 120
Bug: 18119146
Change-Id: I25558ea7cb578406011dede9d3d0bdbfee4ff4d5
diff --git a/runtime/gc/space/rosalloc_space.h b/runtime/gc/space/rosalloc_space.h
index 46fffaa..c856e95 100644
--- a/runtime/gc/space/rosalloc_space.h
+++ b/runtime/gc/space/rosalloc_space.h
@@ -92,7 +92,7 @@
void Clear() OVERRIDE;
- MallocSpace* CreateInstance(const std::string& name, MemMap* mem_map, void* allocator,
+ MallocSpace* CreateInstance(MemMap* mem_map, const std::string& name, void* allocator,
uint8_t* begin, uint8_t* end, uint8_t* limit, size_t growth_limit,
bool can_move_objects) OVERRIDE;
@@ -126,9 +126,10 @@
}
protected:
- RosAllocSpace(const std::string& name, MemMap* mem_map, allocator::RosAlloc* rosalloc,
- uint8_t* begin, uint8_t* end, uint8_t* limit, size_t growth_limit, bool can_move_objects,
- size_t starting_size, size_t initial_size, bool low_memory_mode);
+ RosAllocSpace(MemMap* mem_map, size_t initial_size, const std::string& name,
+ allocator::RosAlloc* rosalloc, uint8_t* begin, uint8_t* end, uint8_t* limit,
+ size_t growth_limit, bool can_move_objects, size_t starting_size,
+ bool low_memory_mode);
private:
template<bool kThreadSafe = true>
@@ -137,10 +138,12 @@
void* CreateAllocator(void* base, size_t morecore_start, size_t initial_size,
size_t maximum_size, bool low_memory_mode) OVERRIDE {
- return CreateRosAlloc(base, morecore_start, initial_size, maximum_size, low_memory_mode);
+ return CreateRosAlloc(base, morecore_start, initial_size, maximum_size, low_memory_mode,
+ RUNNING_ON_VALGRIND != 0);
}
static allocator::RosAlloc* CreateRosAlloc(void* base, size_t morecore_start, size_t initial_size,
- size_t maximum_size, bool low_memory_mode);
+ size_t maximum_size, bool low_memory_mode,
+ bool running_on_valgrind);
void InspectAllRosAlloc(void (*callback)(void *start, void *end, size_t num_bytes, void* callback_arg),
void* arg, bool do_null_callback_at_end)