OSDN Git Service

dex2oat: Show memory usage values in bytes
authorAnton Kirilov <anton.kirilov@linaro.org>
Thu, 28 Jan 2016 15:08:01 +0000 (15:08 +0000)
committerAnton Kirilov <anton.kirilov@linaro.org>
Mon, 15 Feb 2016 11:49:08 +0000 (11:49 +0000)
Memory usage values are rounded down to an integer and shown in the
unit that would be most appropriate (refer to art::PrettySize());
e.g. if the value is at least 1 MB, but less than 1 GB, then it will
be shown in MB. However, that can introduce a very large error; for
example, a value that is close to, but less than 2 MB, will be
displayed as 1 MB.

This change forces dex2oat to print the raw value in bytes as well,
which may make memory usage analysis more accurate.

Change-Id: Id86a9fe21e8af0f02e77fac21cad51d35d941294

compiler/driver/compiled_method_storage.cc
compiler/driver/compiler_driver.cc

index bc5c6ca..510613e 100644 (file)
@@ -190,7 +190,8 @@ CompiledMethodStorage::~CompiledMethodStorage() {
 
 void CompiledMethodStorage::DumpMemoryUsage(std::ostream& os, bool extended) const {
   if (swap_space_.get() != nullptr) {
-    os << " swap=" << PrettySize(swap_space_->GetSize());
+    const size_t swap_size = swap_space_->GetSize();
+    os << " swap=" << PrettySize(swap_size) << " (" << swap_size << "B)";
   }
   if (extended) {
     Thread* self = Thread::Current();
index f078bf6..670fe94 100644 (file)
@@ -2732,16 +2732,18 @@ bool CompilerDriver::RequiresConstructorBarrier(Thread* self, const DexFile* dex
 std::string CompilerDriver::GetMemoryUsageString(bool extended) const {
   std::ostringstream oss;
   Runtime* const runtime = Runtime::Current();
-  const ArenaPool* arena_pool = runtime->GetArenaPool();
-  gc::Heap* const heap = runtime->GetHeap();
-  oss << "arena alloc=" << PrettySize(arena_pool->GetBytesAllocated());
-  oss << " java alloc=" << PrettySize(heap->GetBytesAllocated());
+  const ArenaPool* const arena_pool = runtime->GetArenaPool();
+  const gc::Heap* const heap = runtime->GetHeap();
+  const size_t arena_alloc = arena_pool->GetBytesAllocated();
+  const size_t java_alloc = heap->GetBytesAllocated();
+  oss << "arena alloc=" << PrettySize(arena_alloc) << " (" << arena_alloc << "B)";
+  oss << " java alloc=" << PrettySize(java_alloc) << " (" << java_alloc << "B)";
 #if defined(__BIONIC__) || defined(__GLIBC__)
-  struct mallinfo info = mallinfo();
+  const struct mallinfo info = mallinfo();
   const size_t allocated_space = static_cast<size_t>(info.uordblks);
   const size_t free_space = static_cast<size_t>(info.fordblks);
-  oss << " native alloc=" << PrettySize(allocated_space) << " free="
-      << PrettySize(free_space);
+  oss << " native alloc=" << PrettySize(allocated_space) << " (" << allocated_space << "B)"
+      << " free=" << PrettySize(free_space) << " (" << free_space << "B)";
 #endif
   compiled_method_storage_.DumpMemoryUsage(oss, extended);
   return oss.str();