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

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: Changes for Sami Created 5 years, 8 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 EndIdlePeriod();
108 task_queue_selector_->DisableQueue(QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE);
109 task_queue_selector_->DisableQueue(QueueId::DEFAULT_TASK_QUEUE);
110 for (size_t i = TASK_QUEUE_COUNT; i < total_task_queue_count_; i++) {
111 task_queue_selector_->DisableQueue(i);
112 }
113 }
114
100 void SchedulerHelper::Shutdown() { 115 void SchedulerHelper::Shutdown() {
101 CheckOnValidThread(); 116 CheckOnValidThread();
102 task_queue_manager_.reset(); 117 task_queue_manager_.reset();
103 } 118 }
104 119
105 scoped_refptr<base::SingleThreadTaskRunner> 120 scoped_refptr<base::SingleThreadTaskRunner>
106 SchedulerHelper::DefaultTaskRunner() { 121 SchedulerHelper::DefaultTaskRunner() {
107 CheckOnValidThread(); 122 CheckOnValidThread();
108 return default_task_runner_; 123 return default_task_runner_;
109 } 124 }
110 125
111 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() { 126 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() {
112 CheckOnValidThread(); 127 CheckOnValidThread();
113 return idle_task_runner_; 128 return idle_task_runner_;
114 } 129 }
115 130
116 scoped_refptr<base::SingleThreadTaskRunner> 131 scoped_refptr<base::SingleThreadTaskRunner>
132 SchedulerHelper::ShutdownTaskRunner() {
133 return shutdown_task_runner_;
134 }
135
136 scoped_refptr<base::SingleThreadTaskRunner>
117 SchedulerHelper::ControlTaskRunner() { 137 SchedulerHelper::ControlTaskRunner() {
118 return control_task_runner_; 138 return control_task_runner_;
119 } 139 }
120 140
121 void SchedulerHelper::CurrentIdleTaskDeadlineCallback( 141 void SchedulerHelper::CurrentIdleTaskDeadlineCallback(
122 base::TimeTicks* deadline_out) const { 142 base::TimeTicks* deadline_out) const {
123 CheckOnValidThread(); 143 CheckOnValidThread();
124 *deadline_out = idle_period_deadline_; 144 *deadline_out = idle_period_deadline_;
125 } 145 }
126 146
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 return task_queue_manager_->IsQueueEmpty(queue_index); 377 return task_queue_manager_->IsQueueEmpty(queue_index);
358 } 378 }
359 379
360 // static 380 // static
361 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) { 381 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) {
362 switch (queue_id) { 382 switch (queue_id) {
363 case DEFAULT_TASK_QUEUE: 383 case DEFAULT_TASK_QUEUE:
364 return "default_tq"; 384 return "default_tq";
365 case IDLE_TASK_QUEUE: 385 case IDLE_TASK_QUEUE:
366 return "idle_tq"; 386 return "idle_tq";
387 case SHUTDOWN_TASK_QUEUE:
388 return "shutdown_tq";
367 case CONTROL_TASK_QUEUE: 389 case CONTROL_TASK_QUEUE:
368 return "control_tq"; 390 return "control_tq";
369 case CONTROL_TASK_AFTER_WAKEUP_QUEUE: 391 case CONTROL_TASK_AFTER_WAKEUP_QUEUE:
370 return "control_after_wakeup_tq"; 392 return "control_after_wakeup_tq";
371 default: 393 default:
372 NOTREACHED(); 394 NOTREACHED();
373 return nullptr; 395 return nullptr;
374 } 396 }
375 } 397 }
376 398
(...skipping 25 matching lines...) Expand all
402 } 424 }
403 425
404 void SchedulerHelper::RemoveTaskObserver( 426 void SchedulerHelper::RemoveTaskObserver(
405 base::MessageLoop::TaskObserver* task_observer) { 427 base::MessageLoop::TaskObserver* task_observer) {
406 CheckOnValidThread(); 428 CheckOnValidThread();
407 if (task_queue_manager_) 429 if (task_queue_manager_)
408 task_queue_manager_->RemoveTaskObserver(task_observer); 430 task_queue_manager_->RemoveTaskObserver(task_observer);
409 } 431 }
410 432
411 } // namespace scheduler 433 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698