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