Index: components/scheduler/base/task_queue_manager.cc |
diff --git a/components/scheduler/base/task_queue_manager.cc b/components/scheduler/base/task_queue_manager.cc |
index 099edd3f29082216b91a56fe839ffcf28041861e..64414b0466c86f8c9d461fcf9482591bf6c14397 100644 |
--- a/components/scheduler/base/task_queue_manager.cc |
+++ b/components/scheduler/base/task_queue_manager.cc |
@@ -8,7 +8,6 @@ |
#include <set> |
#include "base/bind.h" |
-#include "base/time/default_tick_clock.h" |
#include "components/scheduler/base/lazy_now.h" |
#include "components/scheduler/base/nestable_single_thread_task_runner.h" |
#include "components/scheduler/base/task_queue_impl.h" |
@@ -30,7 +29,6 @@ TaskQueueManager::TaskQueueManager( |
task_was_run_on_quiescence_monitored_queue_(false), |
pending_dowork_count_(0), |
work_batch_size_(1), |
- time_source_(new base::DefaultTickClock), |
tracing_category_(tracing_category), |
disabled_by_default_tracing_category_( |
disabled_by_default_tracing_category), |
@@ -175,7 +173,7 @@ void TaskQueueManager::UpdateWorkQueues( |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
TRACE_EVENT0(disabled_by_default_tracing_category_, |
"TaskQueueManager::UpdateWorkQueues"); |
- internal::LazyNow lazy_now(this); |
+ internal::LazyNow lazy_now(tick_clock()); |
// Move any ready delayed tasks into the incomming queues. |
WakeupReadyDelayedQueues(&lazy_now); |
@@ -196,7 +194,7 @@ void TaskQueueManager::UpdateWorkQueues( |
void TaskQueueManager::ScheduleDelayedWorkTask( |
scoped_refptr<internal::TaskQueueImpl> queue, |
base::TimeTicks delayed_run_time) { |
- internal::LazyNow lazy_now(this); |
+ internal::LazyNow lazy_now(tick_clock()); |
ScheduleDelayedWork(queue.get(), delayed_run_time, &lazy_now); |
} |
@@ -232,7 +230,7 @@ void TaskQueueManager::DelayedDoWork() { |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
{ |
- internal::LazyNow lazy_now(this); |
+ internal::LazyNow lazy_now(tick_clock()); |
WakeupReadyDelayedQueues(&lazy_now); |
} |
@@ -319,8 +317,12 @@ void TaskQueueManager::DoWork(bool decrement_pending_dowork_count) { |
// TODO(alexclarke): Consider refactoring the above loop to terminate only |
// when there's no more work left to be done, rather than posting a |
// continuation task. |
- if (!selector_.EnabledWorkQueuesEmpty()) |
+ if (!selector_.EnabledWorkQueuesEmpty()) { |
MaybePostDoWorkOnMainRunner(); |
+ } else { |
+ // Tell the task runner we have no more work. |
+ main_task_runner_->OnNoMoreWork(); |
+ } |
} |
bool TaskQueueManager::SelectQueueToService( |
@@ -415,20 +417,14 @@ void TaskQueueManager::RemoveTaskObserver( |
task_observers_.RemoveObserver(task_observer); |
} |
-void TaskQueueManager::SetTimeSourceForTesting( |
- scoped_ptr<base::TickClock> time_source) { |
- DCHECK(main_thread_checker_.CalledOnValidThread()); |
- time_source_ = time_source.Pass(); |
-} |
- |
bool TaskQueueManager::GetAndClearSystemIsQuiescentBit() { |
bool task_was_run = task_was_run_on_quiescence_monitored_queue_; |
task_was_run_on_quiescence_monitored_queue_ = false; |
return !task_was_run; |
} |
-base::TimeTicks TaskQueueManager::Now() const { |
- return time_source_->NowTicks(); |
+base::TickClock* TaskQueueManager::tick_clock() const { |
+ return main_task_runner_.get(); |
} |
int TaskQueueManager::GetNextSequenceNumber() { |