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

Unified Diff: components/scheduler/child/idle_helper.cc

Issue 1832673002: Add testRunner.runIdleTasks() to force idle tasks to run. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 4 years, 9 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/idle_helper.cc
diff --git a/components/scheduler/child/idle_helper.cc b/components/scheduler/child/idle_helper.cc
index e64be4fe22488464fdfcdf6b2781fafed24a38cb..1cbeabd9075721cf7644c657d65fb610610b0dae 100644
--- a/components/scheduler/child/idle_helper.cc
+++ b/components/scheduler/child/idle_helper.cc
@@ -15,6 +15,51 @@
namespace scheduler {
+namespace {
+
+class IdleTaskObserverForTesting
+ : public base::MessageLoop::TaskObserver {
+ public:
+ IdleTaskObserverForTesting(
+ scoped_refptr<TaskQueue> idle_queue,
+ SchedulerHelper* helper,
+ const base::Closure& finished_callback);
+ void WillProcessTask(const base::PendingTask& pending_task) override;
+ void DidProcessTask(const base::PendingTask& pending_task) override;
+ private:
+ scoped_refptr<TaskQueue> idle_queue_;
+ SchedulerHelper* helper_;
+ base::Closure finished_callback_;
+};
+
+IdleTaskObserverForTesting::IdleTaskObserverForTesting(
+ scoped_refptr<TaskQueue> idle_queue,
+ SchedulerHelper* helper,
+ const base::Closure& finished_callback)
+ : idle_queue_(idle_queue),
+ helper_(helper),
+ finished_callback_(finished_callback) {
+ helper_->AddTaskObserver(this);
+}
+
+void IdleTaskObserverForTesting::WillProcessTask(
+ const base::PendingTask& pending_task) {
+}
+
+void IdleTaskObserverForTesting::DidProcessTask(
+ const base::PendingTask& pending_task)
+{
+ if (idle_queue_->IsEmpty()) {
+ idle_queue_->SetQueueEnabled(false);
+ helper_->DefaultTaskRunner()->PostTask(
+ FROM_HERE, finished_callback_);
+ helper_->RemoveTaskObserver(this);
+ delete this;
+ }
+}
+
+}
+
IdleHelper::IdleHelper(
SchedulerHelper* helper,
Delegate* delegate,
@@ -482,4 +527,10 @@ const char* IdleHelper::IdlePeriodStateToString(
}
}
+void IdleHelper::RunIdleTasksForTesting(const base::Closure& callback) {
+ new IdleTaskObserverForTesting(idle_queue_, helper_, callback);
szager1 2016/03/23 22:55:13 This is intentional; the instance gets deleted in
Sami 2016/03/29 11:11:17 Instead of using an observer, it might be easier j
szager1 2016/04/06 08:43:17 Done; I was able to get rid of all changes to Idle
+ idle_queue_->SetQueueEnabled(true);
Sami 2016/03/29 11:11:17 I think one problem here is that IdleHelper might
szager1 2016/04/06 08:43:17 Done; added the field in_idle_period_for_testing t
+ idle_queue_->PumpQueue(true);
+}
+
} // namespace scheduler

Powered by Google App Engine
This is Rietveld 408576698