Index: trunk/src/webkit/glue/webkit_glue.cc |
=================================================================== |
--- trunk/src/webkit/glue/webkit_glue.cc (revision 212931) |
+++ trunk/src/webkit/glue/webkit_glue.cc (working copy) |
@@ -89,4 +89,39 @@ |
COMPILE_ASSERT(std::numeric_limits<double>::has_quiet_NaN, has_quiet_NaN); |
+#if defined(OS_LINUX) || defined(OS_ANDROID) |
+size_t MemoryUsageKB() { |
+ struct mallinfo minfo = mallinfo(); |
+ uint64_t mem_usage = |
+#if defined(USE_TCMALLOC) |
+ minfo.uordblks |
+#else |
+ (minfo.hblkhd + minfo.arena) |
+#endif |
+ >> 10; |
+ |
+ v8::HeapStatistics stat; |
+ // TODO(svenpanne) The call below doesn't take web workers into account, this |
+ // has to be done manually by iterating over all Isolates involved. |
+ v8::Isolate::GetCurrent()->GetHeapStatistics(&stat); |
+ return mem_usage + (static_cast<uint64_t>(stat.total_heap_size()) >> 10); |
+} |
+#elif defined(OS_MACOSX) |
+size_t MemoryUsageKB() { |
+ scoped_ptr<base::ProcessMetrics> process_metrics( |
+ // The default port provider is sufficient to get data for the current |
+ // process. |
+ base::ProcessMetrics::CreateProcessMetrics( |
+ base::GetCurrentProcessHandle(), NULL)); |
+ return process_metrics->GetWorkingSetSize() >> 10; |
+} |
+#else |
+size_t MemoryUsageKB() { |
+ scoped_ptr<base::ProcessMetrics> process_metrics( |
+ base::ProcessMetrics::CreateProcessMetrics( |
+ base::GetCurrentProcessHandle())); |
+ return process_metrics->GetPagefileUsage() >> 10; |
+} |
+#endif |
+ |
} // namespace webkit_glue |