|  | // Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/trace_event/java_heap_dump_provider_android.h" | 
|  |  | 
|  | #include "base/android/java_runtime.h" | 
|  | #include "base/trace_event/process_memory_dump.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace trace_event { | 
|  |  | 
|  | // static | 
|  | JavaHeapDumpProvider* JavaHeapDumpProvider::GetInstance() { | 
|  | return Singleton<JavaHeapDumpProvider, | 
|  | LeakySingletonTraits<JavaHeapDumpProvider>>::get(); | 
|  | } | 
|  |  | 
|  | JavaHeapDumpProvider::JavaHeapDumpProvider() { | 
|  | } | 
|  |  | 
|  | JavaHeapDumpProvider::~JavaHeapDumpProvider() { | 
|  | } | 
|  |  | 
|  | // Called at trace dump point time. Creates a snapshot with the memory counters | 
|  | // for the current process. | 
|  | bool JavaHeapDumpProvider::OnMemoryDump(const MemoryDumpArgs& args, | 
|  | ProcessMemoryDump* pmd) { | 
|  | // These numbers come from java.lang.Runtime stats. | 
|  | long total_heap_size = 0; | 
|  | long free_heap_size = 0; | 
|  | android::JavaRuntime::GetMemoryUsage(&total_heap_size, &free_heap_size); | 
|  |  | 
|  | MemoryAllocatorDump* outer_dump = pmd->CreateAllocatorDump("java_heap"); | 
|  | outer_dump->AddScalar(MemoryAllocatorDump::kNameSize, | 
|  | MemoryAllocatorDump::kUnitsBytes, total_heap_size); | 
|  |  | 
|  | MemoryAllocatorDump* inner_dump = | 
|  | pmd->CreateAllocatorDump("java_heap/allocated_objects"); | 
|  | inner_dump->AddScalar(MemoryAllocatorDump::kNameSize, | 
|  | MemoryAllocatorDump::kUnitsBytes, | 
|  | total_heap_size - free_heap_size); | 
|  | return true; | 
|  | } | 
|  |  | 
|  | }  // namespace trace_event | 
|  | }  // namespace base |