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 |