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

Unified 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: Rebase of DOOM 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 side-by-side diff with in-line comments
Download patch
Index: components/scheduler/child/scheduler_helper.cc
diff --git a/components/scheduler/child/scheduler_helper.cc b/components/scheduler/child/scheduler_helper.cc
index 19e8d2b65120525765527af4775d9564d2590f51..348ddae5a5c518f2a419b939b0eb84f1b336c3a7 100644
--- a/components/scheduler/child/scheduler_helper.cc
+++ b/components/scheduler/child/scheduler_helper.cc
@@ -4,6 +4,7 @@
#include "components/scheduler/child/scheduler_helper.h"
+#include "base/synchronization/waitable_event.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/trace_event_argument.h"
#include "components/scheduler/child/nestable_single_thread_task_runner.h"
@@ -34,6 +35,9 @@ SchedulerHelper::SchedulerHelper(
QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)),
default_task_runner_(
task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)),
+ shutdown_task_runner_(task_queue_manager_->TaskRunnerForQueue(
+ QueueId::SHUTDOWN_TASK_QUEUE)),
+ total_task_queue_count_(total_task_queue_count),
quiescence_monitored_task_queue_mask_(
((1ull << total_task_queue_count) - 1ull) &
~(1ull << QueueId::IDLE_TASK_QUEUE) &
@@ -97,6 +101,32 @@ SchedulerHelper::SchedulerHelperDelegate::SchedulerHelperDelegate() {
SchedulerHelper::SchedulerHelperDelegate::~SchedulerHelperDelegate() {
}
+void SchedulerHelper::PreShutdown() {
Sami 2015/04/23 13:14:03 Can we make the client ensure that this is called
alex clarke (OOO till 29th) 2015/04/23 17:34:32 I was able to do this blink side instead.
Sami 2015/04/23 18:47:49 Great, thanks.
+ TRACE_EVENT0(disabled_by_default_tracing_category_, "PreShutdown");
+ if (shutdown_task_runner_->BelongsToCurrentThread()) {
+ PreShutdownInternal(nullptr);
+ } else {
+ base::WaitableEvent completion(false, false);
+ shutdown_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&SchedulerHelper::PreShutdownInternal,
+ base::Unretained(this), &completion));
+ completion.Wait();
+ }
+}
+
+void SchedulerHelper::PreShutdownInternal(base::WaitableEvent* completion) {
+ TRACE_EVENT0(disabled_by_default_tracing_category_, "PreShutdownInternal");
+ CheckOnValidThread();
+ EndIdlePeriod();
Sami 2015/04/23 13:14:02 Do we actually need to end the idle period? The id
alex clarke (OOO till 29th) 2015/04/23 17:34:32 Yes I think so because enable_next_long_idle_perio
Sami 2015/04/23 18:47:49 We could just let those run. I don't think there s
alex clarke (OOO till 29th) 2015/04/24 09:32:35 The reason I wrote this patch in the first place i
Sami 2015/04/24 10:38:40 That sounds like an instance of the bug I was worr
alex clarke (OOO till 29th) 2015/04/24 14:10:04 Done.
+ task_queue_selector_->DisableQueue(QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE);
+ task_queue_selector_->DisableQueue(QueueId::DEFAULT_TASK_QUEUE);
+ for (size_t i = TASK_QUEUE_COUNT; i < total_task_queue_count_; i++) {
Sami 2015/04/23 13:14:02 Can we get a policy update that undoes all of this
alex clarke (OOO till 29th) 2015/04/23 17:34:32 Yes, but only on the render thread where this isn'
Sami 2015/04/24 10:38:40 Looks like my reply here got lost somehow: I don't
alex clarke (OOO till 29th) 2015/04/24 14:10:04 Done.
+ task_queue_selector_->DisableQueue(i);
+ }
+ if (completion)
+ completion->Signal();
+}
+
void SchedulerHelper::Shutdown() {
CheckOnValidThread();
task_queue_manager_.reset();
@@ -114,6 +144,12 @@ scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() {
}
scoped_refptr<base::SingleThreadTaskRunner>
+SchedulerHelper::ShutdownTaskRunner() {
+ CheckOnValidThread();
+ return shutdown_task_runner_;
+}
+
+scoped_refptr<base::SingleThreadTaskRunner>
SchedulerHelper::ControlTaskRunner() {
return control_task_runner_;
}
@@ -364,6 +400,8 @@ const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) {
return "default_tq";
case IDLE_TASK_QUEUE:
return "idle_tq";
+ case SHUTDOWN_TASK_QUEUE:
+ return "shutdown_tq";
case CONTROL_TASK_QUEUE:
return "control_tq";
case CONTROL_TASK_AFTER_WAKEUP_QUEUE:

Powered by Google App Engine
This is Rietveld 408576698