Implement DDMS heap info ("HPIF") chunks.
This lets you see how many bytes/objects are in your managed heap.
Change-Id: Ie925207e9c48989a24968633e60b99314d220865
diff --git a/src/heap.cc b/src/heap.cc
index 555569a..9fe7750 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -405,18 +405,15 @@
}
int64_t Heap::GetMaxMemory() {
- UNIMPLEMENTED(WARNING);
- return 0;
+ return maximum_size_;
}
int64_t Heap::GetTotalMemory() {
- UNIMPLEMENTED(WARNING);
- return 0;
+ return alloc_space_->Size();
}
int64_t Heap::GetFreeMemory() {
- UNIMPLEMENTED(WARNING);
- return 0;
+ return alloc_space_->Size() - num_bytes_allocated_;
}
class InstanceCounter {
@@ -523,14 +520,14 @@
bool is_small = (bytes_freed > 0 && bytes_freed < 1024);
size_t kib_freed = (bytes_freed > 0 ? std::max(bytes_freed/1024, 1U) : 0);
- size_t footprint = alloc_space_->Size();
- size_t percentFree = 100 - static_cast<size_t>(100.0f * float(num_bytes_allocated_) / footprint);
+ size_t total = GetTotalMemory();
+ size_t percentFree = 100 - static_cast<size_t>(100.0f * float(num_bytes_allocated_) / total);
uint32_t duration = (t1 - t0)/1000/1000;
if (is_verbose_gc_) {
LOG(INFO) << "GC freed " << (is_small ? "<" : "") << kib_freed << "KiB, "
<< percentFree << "% free "
- << (num_bytes_allocated_/1024) << "KiB/" << (footprint/1024) << "KiB, "
+ << (num_bytes_allocated_/1024) << "KiB/" << (total/1024) << "KiB, "
<< "paused " << duration << "ms";
}
Dbg::GcDidFinish();