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

Unified Diff: components/scheduler/base/task_queue_manager.cc

Issue 1424053002: Adds a flag to support "Virtual Time" to the blink scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a test Created 5 years, 2 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/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() {

Powered by Google App Engine
This is Rietveld 408576698