diff options
author | bryner@chromium.org <bryner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-18 18:55:07 +0000 |
---|---|---|
committer | bryner@chromium.org <bryner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-18 18:55:07 +0000 |
commit | a69e947d721537cba9a2e50e634d2432d0834d24 (patch) | |
tree | a925fed5e29fde5c4e1f78fc5ce5c107a3b4afff | |
parent | 287fe956f5edd1b9915be3402edbf36243fe4ba8 (diff) | |
download | chromium_src-a69e947d721537cba9a2e50e634d2432d0834d24.zip chromium_src-a69e947d721537cba9a2e50e634d2432d0834d24.tar.gz chromium_src-a69e947d721537cba9a2e50e634d2432d0834d24.tar.bz2 |
Add a histogram to measure task execution time for the render thread.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/6670029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78728 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/renderer/renderer_main.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/chrome/renderer/renderer_main.cc b/chrome/renderer/renderer_main.cc index b04f7d3..06e71d3 100644 --- a/chrome/renderer/renderer_main.cc +++ b/chrome/renderer/renderer_main.cc @@ -17,8 +17,10 @@ #include "base/metrics/stats_counters.h" #include "base/path_service.h" #include "base/process_util.h" +#include "base/ref_counted.h" #include "base/string_util.h" #include "base/threading/platform_thread.h" +#include "base/time.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_counters.h" #include "chrome/common/chrome_switches.h" @@ -177,6 +179,31 @@ static void HandleRendererErrorTestParameters(const CommandLine& command_line) { } } +// This is a simplified version of the browser Jankometer, which measures +// the processing time of tasks on the render thread. +class RendererMessageLoopObserver : public MessageLoop::TaskObserver { + public: + RendererMessageLoopObserver() + : process_times_(base::Histogram::FactoryGet( + "Chrome.ProcMsgL RenderThread", + 1, 3600000, 50, base::Histogram::kUmaTargetedHistogramFlag)) {} + virtual ~RendererMessageLoopObserver() {} + + virtual void WillProcessTask(const Task* task) { + begin_process_message_ = base::TimeTicks::Now(); + } + + virtual void DidProcessTask(const Task* task) { + if (begin_process_message_ != base::TimeTicks()) + process_times_->AddTime(base::TimeTicks::Now() - begin_process_message_); + } + + private: + base::TimeTicks begin_process_message_; + scoped_refptr<base::Histogram> process_times_; + DISALLOW_COPY_AND_ASSIGN(RendererMessageLoopObserver); +}; + // mainline routine for running as the Renderer process int RendererMain(const MainFunctionParams& parameters) { TRACE_EVENT_BEGIN("RendererMain", 0, ""); @@ -239,6 +266,7 @@ int RendererMain(const MainFunctionParams& parameters) { base::StatsScope<base::StatsCounterTimer> startup_timer(chrome::Counters::renderer_main()); + RendererMessageLoopObserver task_observer; #if defined(OS_MACOSX) // As long as we use Cocoa in the renderer (for the forseeable future as of // now; see http://crbug.com/13890 for info) we need to have a UI loop. @@ -249,6 +277,7 @@ int RendererMain(const MainFunctionParams& parameters) { MessageLoop main_message_loop(RenderProcessImpl::InProcessPlugins() ? MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT); #endif + main_message_loop.AddTaskObserver(&task_observer); base::PlatformThread::SetName("CrRendererMain"); |