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

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: Responding to feedback 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_manager_->FlushQueue(QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE);
Sami 2015/04/23 18:47:49 Why do we need to flush again? Won't the selector
alex clarke (OOO till 29th) 2015/04/24 09:32:36 I was worried about crashes on shutdown. I was ab
110 task_queue_selector_->DisableQueue(QueueId::DEFAULT_TASK_QUEUE);
111 task_queue_manager_->FlushQueue(QueueId::DEFAULT_TASK_QUEUE);
112 for (size_t i = TASK_QUEUE_COUNT; i < total_task_queue_count_; i++) {
113 task_queue_selector_->DisableQueue(i);
114 task_queue_manager_->FlushQueue(i);
115 }
116 }
117
100 void SchedulerHelper::Shutdown() { 118 void SchedulerHelper::Shutdown() {
101 CheckOnValidThread(); 119 CheckOnValidThread();
102 task_queue_manager_.reset(); 120 task_queue_manager_.reset();
103 } 121 }
104 122
105 scoped_refptr<base::SingleThreadTaskRunner> 123 scoped_refptr<base::SingleThreadTaskRunner>
106 SchedulerHelper::DefaultTaskRunner() { 124 SchedulerHelper::DefaultTaskRunner() {
107 CheckOnValidThread(); 125 CheckOnValidThread();
108 return default_task_runner_; 126 return default_task_runner_;
109 } 127 }
110 128
111 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() { 129 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() {
112 CheckOnValidThread(); 130 CheckOnValidThread();
113 return idle_task_runner_; 131 return idle_task_runner_;
114 } 132 }
115 133
116 scoped_refptr<base::SingleThreadTaskRunner> 134 scoped_refptr<base::SingleThreadTaskRunner>
135 SchedulerHelper::ShutdownTaskRunner() {
136 return shutdown_task_runner_;
137 }
138
139 scoped_refptr<base::SingleThreadTaskRunner>
117 SchedulerHelper::ControlTaskRunner() { 140 SchedulerHelper::ControlTaskRunner() {
118 return control_task_runner_; 141 return control_task_runner_;
119 } 142 }
120 143
121 void SchedulerHelper::CurrentIdleTaskDeadlineCallback( 144 void SchedulerHelper::CurrentIdleTaskDeadlineCallback(
122 base::TimeTicks* deadline_out) const { 145 base::TimeTicks* deadline_out) const {
123 CheckOnValidThread(); 146 CheckOnValidThread();
124 *deadline_out = idle_period_deadline_; 147 *deadline_out = idle_period_deadline_;
125 } 148 }
126 149
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 return task_queue_manager_->IsQueueEmpty(queue_index); 380 return task_queue_manager_->IsQueueEmpty(queue_index);
358 } 381 }
359 382
360 // static 383 // static
361 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) { 384 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) {
362 switch (queue_id) { 385 switch (queue_id) {
363 case DEFAULT_TASK_QUEUE: 386 case DEFAULT_TASK_QUEUE:
364 return "default_tq"; 387 return "default_tq";
365 case IDLE_TASK_QUEUE: 388 case IDLE_TASK_QUEUE:
366 return "idle_tq"; 389 return "idle_tq";
390 case SHUTDOWN_TASK_QUEUE:
391 return "shutdown_tq";
367 case CONTROL_TASK_QUEUE: 392 case CONTROL_TASK_QUEUE:
368 return "control_tq"; 393 return "control_tq";
369 case CONTROL_TASK_AFTER_WAKEUP_QUEUE: 394 case CONTROL_TASK_AFTER_WAKEUP_QUEUE:
370 return "control_after_wakeup_tq"; 395 return "control_after_wakeup_tq";
371 default: 396 default:
372 NOTREACHED(); 397 NOTREACHED();
373 return nullptr; 398 return nullptr;
374 } 399 }
375 } 400 }
376 401
(...skipping 25 matching lines...) Expand all
402 } 427 }
403 428
404 void SchedulerHelper::RemoveTaskObserver( 429 void SchedulerHelper::RemoveTaskObserver(
405 base::MessageLoop::TaskObserver* task_observer) { 430 base::MessageLoop::TaskObserver* task_observer) {
406 CheckOnValidThread(); 431 CheckOnValidThread();
407 if (task_queue_manager_) 432 if (task_queue_manager_)
408 task_queue_manager_->RemoveTaskObserver(task_observer); 433 task_queue_manager_->RemoveTaskObserver(task_observer);
409 } 434 }
410 435
411 } // namespace scheduler 436 } // 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