1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "webkit/child/webkit_child_helpers.h" 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_LINUX) 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <malloc.h> 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/logging.h" 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/memory/scoped_ptr.h" 1358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "base/process/process_metrics.h" 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "v8/include/v8.h" 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace webkit_glue { 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_LINUX) || defined(OS_ANDROID) 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochsize_t MemoryUsageKB() { 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch struct mallinfo minfo = mallinfo(); 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint64_t mem_usage = 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(USE_TCMALLOC) 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch minfo.uordblks 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#else 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (minfo.hblkhd + minfo.arena) 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch >> 10; 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch v8::HeapStatistics stat; 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // TODO(svenpanne) The call below doesn't take web workers into account, this 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // has to be done manually by iterating over all Isolates involved. 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch v8::Isolate::GetCurrent()->GetHeapStatistics(&stat); 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return mem_usage + (static_cast<uint64_t>(stat.total_heap_size()) >> 10); 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#elif defined(OS_MACOSX) 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochsize_t MemoryUsageKB() { 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<base::ProcessMetrics> process_metrics( 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // The default port provider is sufficient to get data for the current 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // process. 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::ProcessMetrics::CreateProcessMetrics( 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::GetCurrentProcessHandle(), NULL)); 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return process_metrics->GetWorkingSetSize() >> 10; 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#else 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochsize_t MemoryUsageKB() { 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<base::ProcessMetrics> process_metrics( 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::ProcessMetrics::CreateProcessMetrics( 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::GetCurrentProcessHandle())); 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return process_metrics->GetPagefileUsage() >> 10; 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // webkit_glue 54