blob: 2eb1b949e63647ebf0d8046af8667b087713ff61 [file] [log] [blame] [edit]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "platform/globals.h"
#if defined(DART_USE_JEMALLOC) && !defined(PRODUCT)
#include "vm/malloc_hooks.h"
#include <jemalloc/jemalloc.h>
#include "vm/json_stream.h"
namespace dart {
void MallocHooks::Init() {
// Do nothing.
}
void MallocHooks::Cleanup() {
// Do nothing.
}
void MallocHooks::PrintToJSONObject(JSONObject* jsobj) {
// Here, we ignore the value of FLAG_profiler_native_memory because we can
// gather this information cheaply without hooking into every call to the
// malloc library.
jsobj->AddProperty("_heapAllocatedMemoryUsage",
heap_allocated_memory_in_bytes());
jsobj->AddProperty("_heapAllocationCount", allocation_count());
}
intptr_t MallocHooks::heap_allocated_memory_in_bytes() {
uint64_t epoch = 1;
size_t epoch_sz = sizeof(epoch);
int result = mallctl("epoch", &epoch, &epoch_sz, &epoch, epoch_sz);
if (result != 0) {
return 0;
}
intptr_t allocated;
size_t allocated_sz = sizeof(allocated);
result = mallctl("stats.allocated", &allocated, &allocated_sz, NULL, 0);
if (result != 0) {
return 0;
}
return allocated;
}
intptr_t MallocHooks::allocation_count() {
return 0;
}
bool MallocHooks::ProfilingEnabled() {
return false;
}
bool MallocHooks::stack_trace_collection_enabled() {
return false;
}
void MallocHooks::set_stack_trace_collection_enabled(bool enabled) {
// Do nothing.
}
void MallocHooks::ResetStats() {
// Do nothing.
}
bool MallocHooks::Active() {
return false;
}
Sample* MallocHooks::GetSample(const void* ptr) {
return NULL;
}
} // namespace dart
#endif // defined(DART_USE_JEMALLOC) && ...