Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(508)

Side by Side Diff: base/message_loop.cc

Issue 2098020: Jankometer: Generalize the code more. Add better support for monitoring IO thread. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Address darin's comments. Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/message_loop.h ('k') | base/message_loop_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/message_loop.h" 5 #include "base/message_loop.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 void MessageLoop::AddDestructionObserver(DestructionObserver *obs) { 142 void MessageLoop::AddDestructionObserver(DestructionObserver *obs) {
143 DCHECK(this == current()); 143 DCHECK(this == current());
144 destruction_observers_.AddObserver(obs); 144 destruction_observers_.AddObserver(obs);
145 } 145 }
146 146
147 void MessageLoop::RemoveDestructionObserver(DestructionObserver *obs) { 147 void MessageLoop::RemoveDestructionObserver(DestructionObserver *obs) {
148 DCHECK(this == current()); 148 DCHECK(this == current());
149 destruction_observers_.RemoveObserver(obs); 149 destruction_observers_.RemoveObserver(obs);
150 } 150 }
151 151
152 void MessageLoop::AddTaskObserver(TaskObserver *obs) {
153 DCHECK_EQ(this, current());
154 task_observers_.AddObserver(obs);
155 }
156
157 void MessageLoop::RemoveTaskObserver(TaskObserver *obs) {
158 DCHECK_EQ(this, current());
159 task_observers_.RemoveObserver(obs);
160 }
161
152 void MessageLoop::Run() { 162 void MessageLoop::Run() {
153 AutoRunState save_state(this); 163 AutoRunState save_state(this);
154 RunHandler(); 164 RunHandler();
155 } 165 }
156 166
157 void MessageLoop::RunAllPending() { 167 void MessageLoop::RunAllPending() {
158 AutoRunState save_state(this); 168 AutoRunState save_state(this);
159 state_->quit_received = true; // Means run until we would otherwise block. 169 state_->quit_received = true; // Means run until we would otherwise block.
160 RunHandler(); 170 RunHandler();
161 } 171 }
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 } 328 }
319 329
320 //------------------------------------------------------------------------------ 330 //------------------------------------------------------------------------------
321 331
322 void MessageLoop::RunTask(Task* task) { 332 void MessageLoop::RunTask(Task* task) {
323 DCHECK(nestable_tasks_allowed_); 333 DCHECK(nestable_tasks_allowed_);
324 // Execute the task and assume the worst: It is probably not reentrant. 334 // Execute the task and assume the worst: It is probably not reentrant.
325 nestable_tasks_allowed_ = false; 335 nestable_tasks_allowed_ = false;
326 336
327 HistogramEvent(kTaskRunEvent); 337 HistogramEvent(kTaskRunEvent);
338 FOR_EACH_OBSERVER(TaskObserver, task_observers_,
339 WillProcessTask(task->tracked_birth_time()));
328 task->Run(); 340 task->Run();
341 FOR_EACH_OBSERVER(TaskObserver, task_observers_, DidProcessTask());
329 delete task; 342 delete task;
330 343
331 nestable_tasks_allowed_ = true; 344 nestable_tasks_allowed_ = true;
332 } 345 }
333 346
334 bool MessageLoop::DeferOrRunPendingTask(const PendingTask& pending_task) { 347 bool MessageLoop::DeferOrRunPendingTask(const PendingTask& pending_task) {
335 if (pending_task.nestable || state_->run_depth == 1) { 348 if (pending_task.nestable || state_->run_depth == 1) {
336 RunTask(pending_task.task); 349 RunTask(pending_task.task);
337 // Show that we ran a task (Note: a new one might arrive as a 350 // Show that we ran a task (Note: a new one might arrive as a
338 // consequence!). 351 // consequence!).
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 VALUE_TO_NUMBER_AND_NAME(kTaskRunEvent) 590 VALUE_TO_NUMBER_AND_NAME(kTaskRunEvent)
578 VALUE_TO_NUMBER_AND_NAME(kTimerEvent) 591 VALUE_TO_NUMBER_AND_NAME(kTimerEvent)
579 592
580 {-1, NULL} // The list must be null terminated, per API to histogram. 593 {-1, NULL} // The list must be null terminated, per API to histogram.
581 }; 594 };
582 595
583 //------------------------------------------------------------------------------ 596 //------------------------------------------------------------------------------
584 // MessageLoopForUI 597 // MessageLoopForUI
585 598
586 #if defined(OS_WIN) 599 #if defined(OS_WIN)
587 void MessageLoopForUI::WillProcessMessage(const MSG& message) {
588 pump_win()->WillProcessMessage(message);
589 }
590 void MessageLoopForUI::DidProcessMessage(const MSG& message) { 600 void MessageLoopForUI::DidProcessMessage(const MSG& message) {
591 pump_win()->DidProcessMessage(message); 601 pump_win()->DidProcessMessage(message);
592 } 602 }
593 void MessageLoopForUI::PumpOutPendingPaintMessages() {
594 pump_ui()->PumpOutPendingPaintMessages();
595 }
596
597 #endif // defined(OS_WIN) 603 #endif // defined(OS_WIN)
598 604
599 #if !defined(OS_MACOSX) 605 #if !defined(OS_MACOSX)
600 void MessageLoopForUI::AddObserver(Observer* observer) { 606 void MessageLoopForUI::AddObserver(Observer* observer) {
601 pump_ui()->AddObserver(observer); 607 pump_ui()->AddObserver(observer);
602 } 608 }
603 609
604 void MessageLoopForUI::RemoveObserver(Observer* observer) { 610 void MessageLoopForUI::RemoveObserver(Observer* observer) {
605 pump_ui()->RemoveObserver(observer); 611 pump_ui()->RemoveObserver(observer);
606 } 612 }
(...skipping 27 matching lines...) Expand all
634 Watcher *delegate) { 640 Watcher *delegate) {
635 return pump_libevent()->WatchFileDescriptor( 641 return pump_libevent()->WatchFileDescriptor(
636 fd, 642 fd,
637 persistent, 643 persistent,
638 static_cast<base::MessagePumpLibevent::Mode>(mode), 644 static_cast<base::MessagePumpLibevent::Mode>(mode),
639 controller, 645 controller,
640 delegate); 646 delegate);
641 } 647 }
642 648
643 #endif 649 #endif
OLDNEW
« no previous file with comments | « base/message_loop.h ('k') | base/message_loop_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698