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

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

Issue 281073002: NOT FOR REVIEW: Adding prioritized incoming task queue to renderers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Prioritize input events Created 6 years, 7 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/message_loop.h ('k') | content/child/high_priority_resource_filter.h » ('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 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 #include "base/message_loop/message_loop.h" 5 #include "base/message_loop/message_loop.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 512
513 void MessageLoop::ReloadWorkQueue() { 513 void MessageLoop::ReloadWorkQueue() {
514 // We can improve performance of our loading tasks from the incoming queue to 514 // We can improve performance of our loading tasks from the incoming queue to
515 // |*work_queue| by waiting until the last minute (|*work_queue| is empty) to 515 // |*work_queue| by waiting until the last minute (|*work_queue| is empty) to
516 // load. That reduces the number of locks-per-task significantly when our 516 // load. That reduces the number of locks-per-task significantly when our
517 // queues get large. 517 // queues get large.
518 if (work_queue_.empty()) 518 if (work_queue_.empty())
519 incoming_task_queue_->ReloadWorkQueue(&work_queue_); 519 incoming_task_queue_->ReloadWorkQueue(&work_queue_);
520 } 520 }
521 521
522 TaskQueue& MessageLoop::SelectNextWorkQueue() {
523 return work_queue_;
524 }
525
522 void MessageLoop::ScheduleWork(bool was_empty) { 526 void MessageLoop::ScheduleWork(bool was_empty) {
523 // The Android UI message loop needs to get notified each time 527 // The Android UI message loop needs to get notified each time
524 // a task is added to the incoming queue. 528 // a task is added to the incoming queue.
525 if (was_empty || AlwaysNotifyPump(type_)) 529 if (was_empty || AlwaysNotifyPump(type_))
526 pump_->ScheduleWork(); 530 pump_->ScheduleWork();
527 } 531 }
528 532
529 //------------------------------------------------------------------------------ 533 //------------------------------------------------------------------------------
530 // Method and data for histogramming events and actions taken by each instance 534 // Method and data for histogramming events and actions taken by each instance
531 // on each thread. 535 // on each thread.
(...skipping 21 matching lines...) Expand all
553 } 557 }
554 558
555 bool MessageLoop::DoWork() { 559 bool MessageLoop::DoWork() {
556 if (!nestable_tasks_allowed_) { 560 if (!nestable_tasks_allowed_) {
557 // Task can't be executed right now. 561 // Task can't be executed right now.
558 return false; 562 return false;
559 } 563 }
560 564
561 for (;;) { 565 for (;;) {
562 ReloadWorkQueue(); 566 ReloadWorkQueue();
563 if (work_queue_.empty()) 567
568 TaskQueue& current_work_queue = SelectNextWorkQueue();
569
570 if (current_work_queue.empty())
564 break; 571 break;
565 572
566 // Execute oldest task. 573 // Execute oldest task.
567 do { 574 do {
568 PendingTask pending_task = work_queue_.front(); 575 PendingTask pending_task = current_work_queue.front();
569 work_queue_.pop(); 576 current_work_queue.pop();
570 if (!pending_task.delayed_run_time.is_null()) { 577 if (!pending_task.delayed_run_time.is_null()) {
571 AddToDelayedWorkQueue(pending_task); 578 AddToDelayedWorkQueue(pending_task);
572 // If we changed the topmost task, then it is time to reschedule. 579 // If we changed the topmost task, then it is time to reschedule.
573 if (delayed_work_queue_.top().task.Equals(pending_task.task)) 580 if (delayed_work_queue_.top().task.Equals(pending_task.task))
574 pump_->ScheduleDelayedWork(pending_task.delayed_run_time); 581 pump_->ScheduleDelayedWork(pending_task.delayed_run_time);
575 } else { 582 } else {
576 if (DeferOrRunPendingTask(pending_task)) 583 if (DeferOrRunPendingTask(pending_task))
577 return true; 584 return true;
578 } 585 }
579 } while (!work_queue_.empty()); 586 } while (!current_work_queue.empty());
580 } 587 }
581 588
582 // Nothing happened. 589 // Nothing happened.
583 return false; 590 return false;
584 } 591 }
585 592
586 bool MessageLoop::DoDelayedWork(TimeTicks* next_delayed_work_time) { 593 bool MessageLoop::DoDelayedWork(TimeTicks* next_delayed_work_time) {
587 if (!nestable_tasks_allowed_ || delayed_work_queue_.empty()) { 594 if (!nestable_tasks_allowed_ || delayed_work_queue_.empty()) {
588 recent_time_ = *next_delayed_work_time = TimeTicks(); 595 recent_time_ = *next_delayed_work_time = TimeTicks();
589 return false; 596 return false;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 persistent, 740 persistent,
734 mode, 741 mode,
735 controller, 742 controller,
736 delegate); 743 delegate);
737 } 744 }
738 #endif 745 #endif
739 746
740 #endif // !defined(OS_NACL) 747 #endif // !defined(OS_NACL)
741 748
742 } // namespace base 749 } // namespace base
OLDNEW
« no previous file with comments | « base/message_loop/message_loop.h ('k') | content/child/high_priority_resource_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698