Index: content/browser/browser_main_loop.cc |
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc |
index 2f1e99493cb25c867cd897622833f682d288b6e8..16be82b8a143b3e9c66436b7bfb7950064e282e4 100644 |
--- a/content/browser/browser_main_loop.cc |
+++ b/content/browser/browser_main_loop.cc |
@@ -98,6 +98,10 @@ |
#include <X11/Xlib.h> |
#endif |
+#if !defined(OS_IOS) |
+#include "webkit/glue/webkit_glue.h" |
+#endif |
+ |
// One of the linux specific headers defines this as a macro. |
#ifdef DestroyAll |
#undef DestroyAll |
@@ -226,6 +230,24 @@ void ImmediateShutdownAndExitProcess() { |
BrowserShutdownImpl::ImmediateShutdownAndExitProcess(); |
} |
+// For measuring memory usage after each task. Behind a command line flag. |
+class BrowserMainLoop::MemoryObserver : public MessageLoop::TaskObserver { |
+ public: |
+ MemoryObserver() {} |
+ virtual ~MemoryObserver() {} |
+ |
+ virtual void WillProcessTask(base::TimeTicks time_posted) OVERRIDE {} |
+ |
+ virtual void DidProcessTask(base::TimeTicks time_posted) OVERRIDE { |
+#if !defined(OS_IOS) |
+ HISTOGRAM_MEMORY_KB("Memory.BrowserUsed", webkit_glue::MemoryUsageKB()); |
+#endif |
+ } |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MemoryObserver); |
+}; |
+ |
+ |
// static |
media::AudioManager* BrowserMainLoop::GetAudioManager() { |
return g_current_browser_main_loop->audio_manager_.get(); |
@@ -374,6 +396,11 @@ void BrowserMainLoop::MainMessageLoopStart() { |
switches::kMediaPlayerInRenderProcess))); |
DataFetcherImplAndroid::Init(base::android::AttachCurrentThread()); |
#endif |
+ |
+ if (parsed_command_line_.HasSwitch(switches::kMemoryMetrics)) { |
+ memory_observer_.reset(new MemoryObserver()); |
+ main_message_loop_->AddTaskObserver(memory_observer_.get()); |
+ } |
} |
void BrowserMainLoop::CreateThreads() { |