Chromium Code Reviews| 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 |