mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
// 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/malloc_dump_provider.h"
|
|
|
|
#include <malloc.h>
|
|
|
|
#include "base/trace_event/process_memory_dump.h"
|
|
|
|
namespace base {
|
|
namespace trace_event {
|
|
|
|
// static
|
|
const char MallocDumpProvider::kAllocatedObjects[] = "malloc/allocated_objects";
|
|
|
|
// static
|
|
MallocDumpProvider* MallocDumpProvider::GetInstance() {
|
|
return Singleton<MallocDumpProvider,
|
|
LeakySingletonTraits<MallocDumpProvider>>::get();
|
|
}
|
|
|
|
MallocDumpProvider::MallocDumpProvider() {
|
|
}
|
|
|
|
MallocDumpProvider::~MallocDumpProvider() {
|
|
}
|
|
|
|
// Called at trace dump point time. Creates a snapshot the memory counters for
|
|
// the current process.
|
|
bool MallocDumpProvider::OnMemoryDump(ProcessMemoryDump* pmd) {
|
|
struct mallinfo info = mallinfo();
|
|
DCHECK_GE(info.arena + info.hblkhd, info.uordblks);
|
|
|
|
// When the system allocator is implemented by tcmalloc, the total heap
|
|
// size is given by |arena| and |hblkhd| is 0. In case of Android's jemalloc
|
|
// |arena| is 0 and the outer pages size is reported by |hblkhd|. In case of
|
|
// dlmalloc the total is given by |arena| + |hblkhd|.
|
|
// For more details see link: http://goo.gl/fMR8lF.
|
|
MemoryAllocatorDump* outer_dump = pmd->CreateAllocatorDump("malloc");
|
|
outer_dump->AddScalar("heap_virtual_size",
|
|
MemoryAllocatorDump::kUnitsBytes,
|
|
info.arena + info.hblkhd);
|
|
|
|
// Total allocated space is given by |uordblks|.
|
|
MemoryAllocatorDump* inner_dump = pmd->CreateAllocatorDump(kAllocatedObjects);
|
|
inner_dump->AddScalar(MemoryAllocatorDump::kNameSize,
|
|
MemoryAllocatorDump::kUnitsBytes, info.uordblks);
|
|
|
|
return true;
|
|
}
|
|
|
|
} // namespace trace_event
|
|
} // namespace base
|