diff options
-rw-r--r-- | base/message_loop.cc | 4 | ||||
-rw-r--r-- | base/message_loop.h | 4 | ||||
-rw-r--r-- | base/message_loop_unittest.cc | 6 | ||||
-rw-r--r-- | base/tracked.cc | 8 | ||||
-rw-r--r-- | base/tracked.h | 1 | ||||
-rw-r--r-- | chrome/browser/jankometer.cc | 12 |
6 files changed, 23 insertions, 12 deletions
diff --git a/base/message_loop.cc b/base/message_loop.cc index f335ca1..b926c79 100644 --- a/base/message_loop.cc +++ b/base/message_loop.cc @@ -412,9 +412,9 @@ void MessageLoop::RunTask(Task* task) { HistogramEvent(kTaskRunEvent); FOR_EACH_OBSERVER(TaskObserver, task_observers_, - WillProcessTask(task->tracked_birth_time())); + WillProcessTask(task)); task->Run(); - FOR_EACH_OBSERVER(TaskObserver, task_observers_, DidProcessTask()); + FOR_EACH_OBSERVER(TaskObserver, task_observers_, DidProcessTask(task)); delete task; nestable_tasks_allowed_ = true; diff --git a/base/message_loop.h b/base/message_loop.h index f4b1a4d..b182ace 100644 --- a/base/message_loop.h +++ b/base/message_loop.h @@ -75,10 +75,10 @@ class MessageLoop : public base::MessagePump::Delegate { TaskObserver(); // This method is called before processing a task. - virtual void WillProcessTask(base::TimeTicks birth_time) = 0; + virtual void WillProcessTask(const Task* task) = 0; // This method is called after processing a task. - virtual void DidProcessTask() = 0; + virtual void DidProcessTask(const Task* task) = 0; protected: virtual ~TaskObserver(); diff --git a/base/message_loop_unittest.cc b/base/message_loop_unittest.cc index 741eb71..8cce8ea 100644 --- a/base/message_loop_unittest.cc +++ b/base/message_loop_unittest.cc @@ -1488,14 +1488,16 @@ class DummyTaskObserver : public MessageLoop::TaskObserver { virtual ~DummyTaskObserver() {} - virtual void WillProcessTask(base::TimeTicks /* birth_time */) { + virtual void WillProcessTask(const Task* task) { num_tasks_started_++; + EXPECT_TRUE(task != NULL); EXPECT_LE(num_tasks_started_, num_tasks_); EXPECT_EQ(num_tasks_started_, num_tasks_processed_ + 1); } - virtual void DidProcessTask() { + virtual void DidProcessTask(const Task* task) { num_tasks_processed_++; + EXPECT_TRUE(task != NULL); EXPECT_LE(num_tasks_started_, num_tasks_); EXPECT_EQ(num_tasks_started_, num_tasks_processed_); } diff --git a/base/tracked.cc b/base/tracked.cc index 8ae7447..767f072 100644 --- a/base/tracked.cc +++ b/base/tracked.cc @@ -65,6 +65,10 @@ void Location::WriteFunctionName(std::string* output) const { Tracked::Tracked() {} Tracked::~Tracked() {} void Tracked::SetBirthPlace(const Location& from_here) {} +const Location Tracked::GetBirthPlace() const { + static Location kNone("NoFunctionName", "NeedToSetBirthPlace", -1); + return kNone; +} bool Tracked::MissingBirthplace() const { return false; } void Tracked::ResetBirthTime() {} @@ -96,6 +100,10 @@ void Tracked::SetBirthPlace(const Location& from_here) { tracked_births_ = current_thread_data->TallyABirth(from_here); } +const Location Tracked::GetBirthPlace() const { + return tracked_births_->location(); +} + void Tracked::ResetBirthTime() { tracked_birth_time_ = TimeTicks::Now(); } diff --git a/base/tracked.h b/base/tracked.h index 7af05ff..b4f6e36 100644 --- a/base/tracked.h +++ b/base/tracked.h @@ -94,6 +94,7 @@ class Tracked { // Used to record the FROM_HERE location of a caller. void SetBirthPlace(const Location& from_here); + const Location GetBirthPlace() const; // When a task sits around a long time, such as in a timer, or object watcher, // this method should be called when the task becomes active, and its diff --git a/chrome/browser/jankometer.cc b/chrome/browser/jankometer.cc index a9a99b0..e58b71a 100644 --- a/chrome/browser/jankometer.cc +++ b/chrome/browser/jankometer.cc @@ -206,13 +206,13 @@ class IOJankObserver : public base::RefCountedThreadSafe<IOJankObserver>, helper_.EndProcessingTimers(); } - virtual void WillProcessTask(base::TimeTicks birth_time) { + virtual void WillProcessTask(const Task* task) { base::TimeTicks now = base::TimeTicks::Now(); - const base::TimeDelta queueing_time = now - birth_time; + const base::TimeDelta queueing_time = now - task->tracked_birth_time(); helper_.StartProcessingTimers(queueing_time); } - virtual void DidProcessTask() { + virtual void DidProcessTask(const Task* task) { helper_.EndProcessingTimers(); } @@ -250,13 +250,13 @@ class UIJankObserver : public base::RefCountedThreadSafe<UIJankObserver>, MessageLoopForUI::current()->RemoveObserver(this); } - virtual void WillProcessTask(base::TimeTicks birth_time) { + virtual void WillProcessTask(const Task* task) { base::TimeTicks now = base::TimeTicks::Now(); - const base::TimeDelta queueing_time = now - birth_time; + const base::TimeDelta queueing_time = now - task->tracked_birth_time(); helper_.StartProcessingTimers(queueing_time); } - virtual void DidProcessTask() { + virtual void DidProcessTask(const Task* task) { helper_.EndProcessingTimers(); } |