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

Side by Side Diff: base/message_loop/message_loop.h

Issue 551183002: Microbenchmark for the cost of posting tasks to different pump types (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ 5 #ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_
6 #define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ 6 #define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <string> 9 #include <string>
10 10
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 // Can only be called from the thread that owns the MessageLoop. 384 // Can only be called from the thread that owns the MessageLoop.
385 bool is_running() const; 385 bool is_running() const;
386 386
387 // Returns true if the message loop has high resolution timers enabled. 387 // Returns true if the message loop has high resolution timers enabled.
388 // Provided for testing. 388 // Provided for testing.
389 bool HasHighResolutionTasks(); 389 bool HasHighResolutionTasks();
390 390
391 // Returns true if the message loop is "idle". Provided for testing. 391 // Returns true if the message loop is "idle". Provided for testing.
392 bool IsIdleForTesting(); 392 bool IsIdleForTesting();
393 393
394 // Wakes up the message pump. Can be called on any thread. The caller is
395 // responsible for synchronizing ScheduleWork() calls.
396 void ScheduleWork(bool was_empty);
397
398 // Returns the TaskAnnotator which is used to add debug information to posted
399 // tasks.
400 debug::TaskAnnotator* task_annotator() { return &task_annotator_; }
401
402 // Runs the specified PendingTask.
403 void RunTask(const PendingTask& pending_task);
404
394 //---------------------------------------------------------------------------- 405 //----------------------------------------------------------------------------
395 protected: 406 protected:
396 scoped_ptr<MessagePump> pump_; 407 scoped_ptr<MessagePump> pump_;
397 408
398 private: 409 private:
399 friend class internal::IncomingTaskQueue;
400 friend class RunLoop; 410 friend class RunLoop;
401 411
402 // Configures various members for the two constructors. 412 // Configures various members for the two constructors.
403 void Init(); 413 void Init();
404 414
405 // Invokes the actual run loop using the message pump. 415 // Invokes the actual run loop using the message pump.
406 void RunHandler(); 416 void RunHandler();
407 417
408 // Called to process any delayed non-nestable tasks. 418 // Called to process any delayed non-nestable tasks.
409 bool ProcessNextDelayedNonNestableTask(); 419 bool ProcessNextDelayedNonNestableTask();
410 420
411 // Runs the specified PendingTask.
412 void RunTask(const PendingTask& pending_task);
413
414 // Calls RunTask or queues the pending_task on the deferred task list if it 421 // Calls RunTask or queues the pending_task on the deferred task list if it
415 // cannot be run right now. Returns true if the task was run. 422 // cannot be run right now. Returns true if the task was run.
416 bool DeferOrRunPendingTask(const PendingTask& pending_task); 423 bool DeferOrRunPendingTask(const PendingTask& pending_task);
417 424
418 // Adds the pending task to delayed_work_queue_. 425 // Adds the pending task to delayed_work_queue_.
419 void AddToDelayedWorkQueue(const PendingTask& pending_task); 426 void AddToDelayedWorkQueue(const PendingTask& pending_task);
420 427
421 // Delete tasks that haven't run yet without running them. Used in the 428 // Delete tasks that haven't run yet without running them. Used in the
422 // destructor to make sure all the task's destructors get called. Returns 429 // destructor to make sure all the task's destructors get called. Returns
423 // true if some work was done. 430 // true if some work was done.
424 bool DeletePendingTasks(); 431 bool DeletePendingTasks();
425 432
426 // Returns the TaskAnnotator which is used to add debug information to posted
427 // tasks.
428 debug::TaskAnnotator* task_annotator() { return &task_annotator_; }
429
430 // Loads tasks from the incoming queue to |work_queue_| if the latter is 433 // Loads tasks from the incoming queue to |work_queue_| if the latter is
431 // empty. 434 // empty.
432 void ReloadWorkQueue(); 435 void ReloadWorkQueue();
433 436
434 // Wakes up the message pump. Can be called on any thread. The caller is
435 // responsible for synchronizing ScheduleWork() calls.
436 void ScheduleWork(bool was_empty);
437
438 // Start recording histogram info about events and action IF it was enabled 437 // Start recording histogram info about events and action IF it was enabled
439 // and IF the statistics recorder can accept a registration of our histogram. 438 // and IF the statistics recorder can accept a registration of our histogram.
440 void StartHistogrammer(); 439 void StartHistogrammer();
441 440
442 // Add occurrence of event to our histogram, so that we can see what is being 441 // Add occurrence of event to our histogram, so that we can see what is being
443 // done in a specific MessageLoop instance (i.e., specific thread). 442 // done in a specific MessageLoop instance (i.e., specific thread).
444 // If message_histogram_ is NULL, this is a no-op. 443 // If message_histogram_ is NULL, this is a no-op.
445 void HistogramEvent(int event); 444 void HistogramEvent(int event);
446 445
447 // MessagePump::Delegate methods: 446 // MessagePump::Delegate methods:
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 649
651 // Do not add any member variables to MessageLoopForIO! This is important b/c 650 // Do not add any member variables to MessageLoopForIO! This is important b/c
652 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra 651 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra
653 // data that you need should be stored on the MessageLoop's pump_ instance. 652 // data that you need should be stored on the MessageLoop's pump_ instance.
654 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO), 653 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO),
655 MessageLoopForIO_should_not_have_extra_member_variables); 654 MessageLoopForIO_should_not_have_extra_member_variables);
656 655
657 } // namespace base 656 } // namespace base
658 657
659 #endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ 658 #endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698