Index: content/renderer/renderer_main.cc |
diff --git a/content/renderer/renderer_main.cc b/content/renderer/renderer_main.cc |
index 0909aacc0ec7e35a63710a0e8529f7fe45524f20..f5bc21b895225e5c999f3a6feee8f910224dc34e 100644 |
--- a/content/renderer/renderer_main.cc |
+++ b/content/renderer/renderer_main.cc |
@@ -30,6 +30,7 @@ |
#include "content/renderer/render_thread_impl.h" |
#include "content/renderer/renderer_main_platform_delegate.h" |
#include "ui/base/ui_base_switches.h" |
+#include "webkit/glue/webkit_glue.h" |
#include "webkit/plugins/ppapi/ppapi_interface_factory.h" |
#if defined(OS_MACOSX) |
@@ -84,6 +85,20 @@ class RendererMessageLoopObserver : public MessageLoop::TaskObserver { |
DISALLOW_COPY_AND_ASSIGN(RendererMessageLoopObserver); |
}; |
+// For measuring memory usage after each task. Behind a command line flag. |
+class MemoryObserver : public MessageLoop::TaskObserver { |
+ public: |
+ MemoryObserver() {} |
+ |
+ virtual void WillProcessTask(base::TimeTicks time_posted) OVERRIDE {} |
+ |
+ virtual void DidProcessTask(base::TimeTicks time_posted) OVERRIDE { |
+ HISTOGRAM_MEMORY_KB("Memory.RendererUsed", webkit_glue::MemoryUsageKB()); |
+ } |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MemoryObserver); |
+}; |
+ |
// mainline routine for running as the Renderer process |
int RendererMain(const MainFunctionParams& parameters) { |
TRACE_EVENT_BEGIN_ETW("RendererMain", 0, ""); |
@@ -135,6 +150,12 @@ int RendererMain(const MainFunctionParams& parameters) { |
#endif |
main_message_loop.AddTaskObserver(&task_observer); |
+ scoped_ptr<MemoryObserver> memory_observer; |
+ if (parsed_command_line.HasSwitch(switches::kMemoryMetrics)) { |
+ memory_observer.reset(new MemoryObserver()); |
+ main_message_loop.AddTaskObserver(memory_observer.get()); |
+ } |
+ |
base::PlatformThread::SetName("CrRendererMain"); |
base::SystemMonitor system_monitor; |