// 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 #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) && ...