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

Side by Side Diff: components/scheduler/child/scheduler_helper.cc

Issue 1101703003: Adds a SHUTDOWN_TASK_QUEUE and a PreShutdown api to the scheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix comment Created 5 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/scheduler/child/scheduler_helper.h" 5 #include "components/scheduler/child/scheduler_helper.h"
6 6
7 #include "base/synchronization/waitable_event.h"
7 #include "base/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
8 #include "base/trace_event/trace_event_argument.h" 9 #include "base/trace_event/trace_event_argument.h"
9 #include "components/scheduler/child/nestable_single_thread_task_runner.h" 10 #include "components/scheduler/child/nestable_single_thread_task_runner.h"
10 #include "components/scheduler/child/prioritizing_task_queue_selector.h" 11 #include "components/scheduler/child/prioritizing_task_queue_selector.h"
11 #include "components/scheduler/child/time_source.h" 12 #include "components/scheduler/child/time_source.h"
12 13
13 namespace scheduler { 14 namespace scheduler {
14 15
15 SchedulerHelper::SchedulerHelper( 16 SchedulerHelper::SchedulerHelper(
16 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner, 17 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner,
(...skipping 10 matching lines...) Expand all
27 task_queue_selector_.get(), 28 task_queue_selector_.get(),
28 disabled_by_default_tracing_category)), 29 disabled_by_default_tracing_category)),
29 idle_period_state_(IdlePeriodState::NOT_IN_IDLE_PERIOD), 30 idle_period_state_(IdlePeriodState::NOT_IN_IDLE_PERIOD),
30 scheduler_helper_delegate_(scheduler_helper_delegate), 31 scheduler_helper_delegate_(scheduler_helper_delegate),
31 control_task_runner_( 32 control_task_runner_(
32 task_queue_manager_->TaskRunnerForQueue(QueueId::CONTROL_TASK_QUEUE)), 33 task_queue_manager_->TaskRunnerForQueue(QueueId::CONTROL_TASK_QUEUE)),
33 control_task_after_wakeup_runner_(task_queue_manager_->TaskRunnerForQueue( 34 control_task_after_wakeup_runner_(task_queue_manager_->TaskRunnerForQueue(
34 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), 35 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)),
35 default_task_runner_( 36 default_task_runner_(
36 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)), 37 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)),
38 shutdown_task_runner_(task_queue_manager_->TaskRunnerForQueue(
39 QueueId::SHUTDOWN_TASK_QUEUE)),
40 total_task_queue_count_(total_task_queue_count),
37 quiescence_monitored_task_queue_mask_( 41 quiescence_monitored_task_queue_mask_(
38 ((1ull << total_task_queue_count) - 1ull) & 42 ((1ull << total_task_queue_count) - 1ull) &
39 ~(1ull << QueueId::IDLE_TASK_QUEUE) & 43 ~(1ull << QueueId::IDLE_TASK_QUEUE) &
40 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & 44 ~(1ull << QueueId::CONTROL_TASK_QUEUE) &
41 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), 45 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)),
42 required_quiescence_duration_before_long_idle_period_( 46 required_quiescence_duration_before_long_idle_period_(
43 required_quiescence_duration_before_long_idle_period), 47 required_quiescence_duration_before_long_idle_period),
44 time_source_(new TimeSource), 48 time_source_(new TimeSource),
45 tracing_category_(tracing_category), 49 tracing_category_(tracing_category),
46 disabled_by_default_tracing_category_( 50 disabled_by_default_tracing_category_(
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 94
91 SchedulerHelper::~SchedulerHelper() { 95 SchedulerHelper::~SchedulerHelper() {
92 } 96 }
93 97
94 SchedulerHelper::SchedulerHelperDelegate::SchedulerHelperDelegate() { 98 SchedulerHelper::SchedulerHelperDelegate::SchedulerHelperDelegate() {
95 } 99 }
96 100
97 SchedulerHelper::SchedulerHelperDelegate::~SchedulerHelperDelegate() { 101 SchedulerHelper::SchedulerHelperDelegate::~SchedulerHelperDelegate() {
98 } 102 }
99 103
104 void SchedulerHelper::PreShutdown() {
105 CheckOnValidThread();
106 TRACE_EVENT0(disabled_by_default_tracing_category_, "PreShutdownInternal");
107 task_queue_selector_->DisableQueue(QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE);
108 task_queue_selector_->DisableQueue(QueueId::DEFAULT_TASK_QUEUE);
109 task_queue_selector_->DisableQueue(QueueId::IDLE_TASK_QUEUE);
110 for (size_t i = TASK_QUEUE_COUNT; i < total_task_queue_count_; i++) {
111 task_queue_selector_->DisableQueue(i);
112 }
113 // Prevent any further enabling/disabling of queues.
114 task_queue_selector_->PreShutdown();
115 }
116
100 void SchedulerHelper::Shutdown() { 117 void SchedulerHelper::Shutdown() {
101 CheckOnValidThread(); 118 CheckOnValidThread();
102 task_queue_manager_.reset(); 119 task_queue_manager_.reset();
103 } 120 }
104 121
105 scoped_refptr<base::SingleThreadTaskRunner> 122 scoped_refptr<base::SingleThreadTaskRunner>
106 SchedulerHelper::DefaultTaskRunner() { 123 SchedulerHelper::DefaultTaskRunner() {
107 CheckOnValidThread(); 124 CheckOnValidThread();
108 return default_task_runner_; 125 return default_task_runner_;
109 } 126 }
110 127
111 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() { 128 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() {
112 CheckOnValidThread(); 129 CheckOnValidThread();
113 return idle_task_runner_; 130 return idle_task_runner_;
114 } 131 }
115 132
116 scoped_refptr<base::SingleThreadTaskRunner> 133 scoped_refptr<base::SingleThreadTaskRunner>
134 SchedulerHelper::ShutdownTaskRunner() {
135 return shutdown_task_runner_;
136 }
137
138 scoped_refptr<base::SingleThreadTaskRunner>
117 SchedulerHelper::ControlTaskRunner() { 139 SchedulerHelper::ControlTaskRunner() {
118 return control_task_runner_; 140 return control_task_runner_;
119 } 141 }
120 142
121 void SchedulerHelper::CurrentIdleTaskDeadlineCallback( 143 void SchedulerHelper::CurrentIdleTaskDeadlineCallback(
122 base::TimeTicks* deadline_out) const { 144 base::TimeTicks* deadline_out) const {
123 CheckOnValidThread(); 145 CheckOnValidThread();
124 *deadline_out = idle_period_deadline_; 146 *deadline_out = idle_period_deadline_;
125 } 147 }
126 148
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 return task_queue_manager_->IsQueueEmpty(queue_index); 379 return task_queue_manager_->IsQueueEmpty(queue_index);
358 } 380 }
359 381
360 // static 382 // static
361 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) { 383 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) {
362 switch (queue_id) { 384 switch (queue_id) {
363 case DEFAULT_TASK_QUEUE: 385 case DEFAULT_TASK_QUEUE:
364 return "default_tq"; 386 return "default_tq";
365 case IDLE_TASK_QUEUE: 387 case IDLE_TASK_QUEUE:
366 return "idle_tq"; 388 return "idle_tq";
389 case SHUTDOWN_TASK_QUEUE:
390 return "shutdown_tq";
367 case CONTROL_TASK_QUEUE: 391 case CONTROL_TASK_QUEUE:
368 return "control_tq"; 392 return "control_tq";
369 case CONTROL_TASK_AFTER_WAKEUP_QUEUE: 393 case CONTROL_TASK_AFTER_WAKEUP_QUEUE:
370 return "control_after_wakeup_tq"; 394 return "control_after_wakeup_tq";
371 default: 395 default:
372 NOTREACHED(); 396 NOTREACHED();
373 return nullptr; 397 return nullptr;
374 } 398 }
375 } 399 }
376 400
(...skipping 25 matching lines...) Expand all
402 } 426 }
403 427
404 void SchedulerHelper::RemoveTaskObserver( 428 void SchedulerHelper::RemoveTaskObserver(
405 base::MessageLoop::TaskObserver* task_observer) { 429 base::MessageLoop::TaskObserver* task_observer) {
406 CheckOnValidThread(); 430 CheckOnValidThread();
407 if (task_queue_manager_) 431 if (task_queue_manager_)
408 task_queue_manager_->RemoveTaskObserver(task_observer); 432 task_queue_manager_->RemoveTaskObserver(task_observer);
409 } 433 }
410 434
411 } // namespace scheduler 435 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/child/scheduler_helper.h ('k') | components/scheduler/child/scheduler_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698