| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/jankometer.h" | 5 #include "chrome/browser/jankometer.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 JankWatchdog(const TimeDelta& duration, | 59 JankWatchdog(const TimeDelta& duration, |
| 60 const std::string& thread_watched_name, | 60 const std::string& thread_watched_name, |
| 61 bool enabled) | 61 bool enabled) |
| 62 : Watchdog(duration, thread_watched_name, enabled), | 62 : Watchdog(duration, thread_watched_name, enabled), |
| 63 thread_name_watched_(thread_watched_name), | 63 thread_name_watched_(thread_watched_name), |
| 64 alarm_count_(0) { | 64 alarm_count_(0) { |
| 65 } | 65 } |
| 66 | 66 |
| 67 virtual ~JankWatchdog() {} | 67 virtual ~JankWatchdog() {} |
| 68 | 68 |
| 69 virtual void Alarm() { | 69 virtual void Alarm() OVERRIDE { |
| 70 // Put break point here if you want to stop threads and look at what caused | 70 // Put break point here if you want to stop threads and look at what caused |
| 71 // the jankiness. | 71 // the jankiness. |
| 72 alarm_count_++; | 72 alarm_count_++; |
| 73 Watchdog::Alarm(); | 73 Watchdog::Alarm(); |
| 74 } | 74 } |
| 75 | 75 |
| 76 private: | 76 private: |
| 77 std::string thread_name_watched_; | 77 std::string thread_name_watched_; |
| 78 int alarm_count_; | 78 int alarm_count_; |
| 79 | 79 |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 helper_.StartProcessingTimers(queueing_time); | 250 helper_.StartProcessingTimers(queueing_time); |
| 251 } | 251 } |
| 252 | 252 |
| 253 virtual void DidProcessTask(const base::PendingTask& pending_task) OVERRIDE { | 253 virtual void DidProcessTask(const base::PendingTask& pending_task) OVERRIDE { |
| 254 helper_.EndProcessingTimers(); | 254 helper_.EndProcessingTimers(); |
| 255 } | 255 } |
| 256 | 256 |
| 257 private: | 257 private: |
| 258 friend class base::RefCountedThreadSafe<IOJankObserver>; | 258 friend class base::RefCountedThreadSafe<IOJankObserver>; |
| 259 | 259 |
| 260 ~IOJankObserver() {} | 260 virtual ~IOJankObserver() {} |
| 261 | 261 |
| 262 JankObserverHelper helper_; | 262 JankObserverHelper helper_; |
| 263 | 263 |
| 264 DISALLOW_COPY_AND_ASSIGN(IOJankObserver); | 264 DISALLOW_COPY_AND_ASSIGN(IOJankObserver); |
| 265 }; | 265 }; |
| 266 | 266 |
| 267 //------------------------------------------------------------------------------ | 267 //------------------------------------------------------------------------------ |
| 268 class UIJankObserver : public base::RefCountedThreadSafe<UIJankObserver>, | 268 class UIJankObserver : public base::RefCountedThreadSafe<UIJankObserver>, |
| 269 public MessageLoop::TaskObserver, | 269 public MessageLoop::TaskObserver, |
| 270 public MessageLoopForUI::Observer { | 270 public MessageLoopForUI::Observer { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 } | 330 } |
| 331 #elif defined(USE_AURA) | 331 #elif defined(USE_AURA) |
| 332 virtual base::EventStatus WillProcessEvent( | 332 virtual base::EventStatus WillProcessEvent( |
| 333 const base::NativeEvent& event) OVERRIDE { | 333 const base::NativeEvent& event) OVERRIDE { |
| 334 return base::EVENT_CONTINUE; | 334 return base::EVENT_CONTINUE; |
| 335 } | 335 } |
| 336 | 336 |
| 337 virtual void DidProcessEvent(const base::NativeEvent& event) OVERRIDE { | 337 virtual void DidProcessEvent(const base::NativeEvent& event) OVERRIDE { |
| 338 } | 338 } |
| 339 #elif defined(TOOLKIT_GTK) | 339 #elif defined(TOOLKIT_GTK) |
| 340 virtual void WillProcessEvent(GdkEvent* event) { | 340 virtual void WillProcessEvent(GdkEvent* event) OVERRIDE { |
| 341 if (!helper_.MessageWillBeMeasured()) | 341 if (!helper_.MessageWillBeMeasured()) |
| 342 return; | 342 return; |
| 343 // TODO(evanm): we want to set queueing_time_ using | 343 // TODO(evanm): we want to set queueing_time_ using |
| 344 // gdk_event_get_time, but how do you convert that info | 344 // gdk_event_get_time, but how do you convert that info |
| 345 // into a delta? | 345 // into a delta? |
| 346 // guint event_time = gdk_event_get_time(event); | 346 // guint event_time = gdk_event_get_time(event); |
| 347 base::TimeDelta queueing_time = base::TimeDelta::FromMilliseconds(0); | 347 base::TimeDelta queueing_time = base::TimeDelta::FromMilliseconds(0); |
| 348 helper_.StartProcessingTimers(queueing_time); | 348 helper_.StartProcessingTimers(queueing_time); |
| 349 } | 349 } |
| 350 | 350 |
| 351 virtual void DidProcessEvent(GdkEvent* event) { | 351 virtual void DidProcessEvent(GdkEvent* event) OVERRIDE { |
| 352 helper_.EndProcessingTimers(); | 352 helper_.EndProcessingTimers(); |
| 353 } | 353 } |
| 354 #endif | 354 #endif |
| 355 | 355 |
| 356 private: | 356 private: |
| 357 friend class base::RefCountedThreadSafe<UIJankObserver>; | 357 friend class base::RefCountedThreadSafe<UIJankObserver>; |
| 358 | 358 |
| 359 ~UIJankObserver() {} | 359 virtual ~UIJankObserver() {} |
| 360 | 360 |
| 361 JankObserverHelper helper_; | 361 JankObserverHelper helper_; |
| 362 | 362 |
| 363 DISALLOW_COPY_AND_ASSIGN(UIJankObserver); | 363 DISALLOW_COPY_AND_ASSIGN(UIJankObserver); |
| 364 }; | 364 }; |
| 365 | 365 |
| 366 // These objects are created by InstallJankometer and leaked. | 366 // These objects are created by InstallJankometer and leaked. |
| 367 const scoped_refptr<UIJankObserver>* ui_observer = NULL; | 367 const scoped_refptr<UIJankObserver>* ui_observer = NULL; |
| 368 const scoped_refptr<IOJankObserver>* io_observer = NULL; | 368 const scoped_refptr<IOJankObserver>* io_observer = NULL; |
| 369 | 369 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 delete ui_observer; | 416 delete ui_observer; |
| 417 ui_observer = NULL; | 417 ui_observer = NULL; |
| 418 } | 418 } |
| 419 if (io_observer) { | 419 if (io_observer) { |
| 420 // IO thread can't be running when we remove observers. | 420 // IO thread can't be running when we remove observers. |
| 421 DCHECK((!g_browser_process) || !(g_browser_process->io_thread())); | 421 DCHECK((!g_browser_process) || !(g_browser_process->io_thread())); |
| 422 delete io_observer; | 422 delete io_observer; |
| 423 io_observer = NULL; | 423 io_observer = NULL; |
| 424 } | 424 } |
| 425 } | 425 } |
| OLD | NEW |