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

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

Issue 1432263002: (reland) Adds TimeDomains to the TaskQueueManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing some more feedback. Created 5 years, 1 month 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_impl.cc
diff --git a/components/scheduler/base/task_queue_impl.cc b/components/scheduler/base/task_queue_impl.cc
index 651770740e8a2f7ba6527c25fd042425b0eba6ea..486d7cc58ce691380bfaa7ba077b0bae1f1fcc08 100644
--- a/components/scheduler/base/task_queue_impl.cc
+++ b/components/scheduler/base/task_queue_impl.cc
@@ -6,17 +6,19 @@
#include "components/scheduler/base/task_queue_manager.h"
#include "components/scheduler/base/task_queue_manager_delegate.h"
+#include "components/scheduler/base/time_domain.h"
namespace scheduler {
namespace internal {
TaskQueueImpl::TaskQueueImpl(
TaskQueueManager* task_queue_manager,
+ const scoped_refptr<TimeDomain>& time_domain,
const Spec& spec,
const char* disabled_by_default_tracing_category,
const char* disabled_by_default_verbose_tracing_category)
: thread_id_(base::PlatformThread::CurrentId()),
- any_thread_(task_queue_manager, spec.pump_policy),
+ any_thread_(task_queue_manager, spec.pump_policy, time_domain),
name_(spec.name),
disabled_by_default_tracing_category_(
disabled_by_default_tracing_category),
@@ -25,7 +27,9 @@ TaskQueueImpl::TaskQueueImpl(
main_thread_only_(task_queue_manager),
wakeup_policy_(spec.wakeup_policy),
should_monitor_quiescence_(spec.should_monitor_quiescence),
- should_notify_observers_(spec.should_notify_observers) {}
+ should_notify_observers_(spec.should_notify_observers) {
+ DCHECK(time_domain.get());
+}
TaskQueueImpl::~TaskQueueImpl() {}
@@ -53,9 +57,13 @@ TaskQueueImpl::Task::Task(const tracked_objects::Location& posted_from,
sequence_num = sequence_number;
}
-TaskQueueImpl::AnyThread::AnyThread(TaskQueueManager* task_queue_manager,
- PumpPolicy pump_policy)
- : task_queue_manager(task_queue_manager), pump_policy(pump_policy) {}
+TaskQueueImpl::AnyThread::AnyThread(
+ TaskQueueManager* task_queue_manager,
+ PumpPolicy pump_policy,
+ const scoped_refptr<TimeDomain>& time_domain)
+ : task_queue_manager(task_queue_manager),
+ pump_policy(pump_policy),
+ time_domain(time_domain) {}
TaskQueueImpl::AnyThread::~AnyThread() {}
@@ -70,6 +78,8 @@ void TaskQueueImpl::UnregisterTaskQueue() {
base::AutoLock lock(any_thread_lock_);
if (!any_thread().task_queue_manager)
return;
+ any_thread().time_domain->UnregisterQueue(this);
+ any_thread().time_domain = scoped_refptr<TimeDomain>();
Sami 2015/11/18 18:36:24 IIRC you can do = nullptr.
any_thread().task_queue_manager->UnregisterTaskQueue(this);
any_thread().task_queue_manager = nullptr;
@@ -104,7 +114,7 @@ bool TaskQueueImpl::PostDelayedTaskAt(
base::AutoLock lock(any_thread_lock_);
if (!any_thread().task_queue_manager)
return false;
- LazyNow lazy_now(any_thread().task_queue_manager->delegate().get());
+ LazyNow lazy_now(any_thread().time_domain->GetLazyNow());
return PostDelayedTaskLocked(&lazy_now, from_here, task, desired_run_time,
TaskType::NORMAL);
}
@@ -117,7 +127,7 @@ bool TaskQueueImpl::PostDelayedTaskImpl(
base::AutoLock lock(any_thread_lock_);
if (!any_thread().task_queue_manager)
return false;
- LazyNow lazy_now(any_thread().task_queue_manager->delegate().get());
+ LazyNow lazy_now(any_thread().time_domain->GetLazyNow());
base::TimeTicks desired_run_time;
if (delay > base::TimeDelta())
desired_run_time = lazy_now.Now() + delay;
@@ -143,8 +153,8 @@ bool TaskQueueImpl::PostDelayedTaskLocked(
any_thread().delayed_task_queue.push(pending_task);
TraceQueueSize(true);
// Schedule a later call to MoveReadyDelayedTasksToIncomingQueue.
- any_thread().task_queue_manager->ScheduleDelayedWork(this, desired_run_time,
- lazy_now);
+ any_thread().time_domain->ScheduleDelayedWork(this, desired_run_time,
+ lazy_now);
return true;
}
pending_task.set_enqueue_order(pending_task.sequence_num);
@@ -244,7 +254,7 @@ void TaskQueueImpl::UpdateWorkQueue(LazyNow* lazy_now,
// |any_thread().incoming_queue| is now empty so
// TaskQueueManager::UpdateQueues no longer needs to consider
Sami 2015/11/18 18:36:24 nit: function name is out of date.
alex clarke (OOO till 29th) 2015/11/19 12:20:12 Done.
// this queue for reloading.
- any_thread().task_queue_manager->UnregisterAsUpdatableTaskQueue(this);
+ any_thread().time_domain->UnregisterAsUpdatableTaskQueue(this);
if (!main_thread_only().work_queue.empty()) {
DCHECK(any_thread().task_queue_manager);
any_thread().task_queue_manager->selector_.GetTaskQueueSets()->OnPushQueue(
@@ -287,7 +297,7 @@ void TaskQueueImpl::EnqueueTaskLocked(const Task& pending_task) {
if (!any_thread().task_queue_manager)
return;
if (any_thread().incoming_queue.empty())
- any_thread().task_queue_manager->RegisterAsUpdatableTaskQueue(this);
+ any_thread().time_domain->RegisterAsUpdatableTaskQueue(this);
if (any_thread().pump_policy == PumpPolicy::AUTO &&
any_thread().incoming_queue.empty()) {
any_thread().task_queue_manager->MaybePostDoWorkOnMainRunner();
@@ -301,7 +311,7 @@ void TaskQueueImpl::EnqueueDelayedTaskLocked(const Task& pending_task) {
if (!any_thread().task_queue_manager)
return;
if (any_thread().incoming_queue.empty())
- any_thread().task_queue_manager->RegisterAsUpdatableTaskQueue(this);
+ any_thread().time_domain->RegisterAsUpdatableTaskQueue(this);
// TODO(alexclarke): consider std::move() when allowed.
any_thread().incoming_queue.push(pending_task);
any_thread().incoming_queue.back().set_enqueue_order(
@@ -322,7 +332,7 @@ void TaskQueueImpl::PumpQueueLocked() {
if (!any_thread().task_queue_manager)
return;
- LazyNow lazy_now(any_thread().task_queue_manager->delegate().get());
+ LazyNow lazy_now(any_thread().time_domain->GetLazyNow());
MoveReadyDelayedTasksToIncomingQueueLocked(&lazy_now);
bool was_empty = main_thread_only().work_queue.empty();
@@ -333,7 +343,7 @@ void TaskQueueImpl::PumpQueueLocked() {
}
// |incoming_queue| is now empty so TaskQueueManager::UpdateQueues no longer
Sami 2015/11/18 18:36:24 nit: function name is out of date.
alex clarke (OOO till 29th) 2015/11/19 12:20:12 Done.
// needs to consider this queue for reloading.
- any_thread().task_queue_manager->UnregisterAsUpdatableTaskQueue(this);
+ any_thread().time_domain->UnregisterAsUpdatableTaskQueue(this);
if (!main_thread_only().work_queue.empty()) {
if (was_empty) {
any_thread()
@@ -430,6 +440,7 @@ void TaskQueueImpl::AsValueInto(base::trace_event::TracedValue* state) const {
base::AutoLock lock(any_thread_lock_);
state->BeginDictionary();
state->SetString("name", GetName());
+ state->SetString("time_domain_name", any_thread().time_domain->GetName());
state->SetString("pump_policy", PumpPolicyToString(any_thread().pump_policy));
state->SetString("wakeup_policy", WakeupPolicyToString(wakeup_policy_));
bool verbose_tracing_enabled = false;
@@ -516,5 +527,10 @@ void TaskQueueImpl::TaskAsValueInto(const Task& task,
state->EndDictionary();
}
+size_t TaskQueueImpl::IncomingQueueSizeForTest() const {
+ base::AutoLock lock(any_thread_lock_);
+ return any_thread().incoming_queue.size();
+}
+
} // namespace internal
} // namespace scheduler

Powered by Google App Engine
This is Rietveld 408576698