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

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

Issue 1461143003: Revert of Adds TimeDomains to the TaskQueueManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
« no previous file with comments | « components/scheduler/base/task_queue_impl.h ('k') | components/scheduler/base/task_queue_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3442b436334df061c9aac0730f58e16ce23beb90..651770740e8a2f7ba6527c25fd042425b0eba6ea 100644
--- a/components/scheduler/base/task_queue_impl.cc
+++ b/components/scheduler/base/task_queue_impl.cc
@@ -6,19 +6,17 @@
#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, time_domain),
+ any_thread_(task_queue_manager, spec.pump_policy),
name_(spec.name),
disabled_by_default_tracing_category_(
disabled_by_default_tracing_category),
@@ -27,9 +25,7 @@
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) {
- DCHECK(time_domain.get());
-}
+ should_notify_observers_(spec.should_notify_observers) {}
TaskQueueImpl::~TaskQueueImpl() {}
@@ -57,13 +53,9 @@
sequence_num = sequence_number;
}
-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(TaskQueueManager* task_queue_manager,
+ PumpPolicy pump_policy)
+ : task_queue_manager(task_queue_manager), pump_policy(pump_policy) {}
TaskQueueImpl::AnyThread::~AnyThread() {}
@@ -78,8 +70,6 @@
base::AutoLock lock(any_thread_lock_);
if (!any_thread().task_queue_manager)
return;
- any_thread().time_domain->UnregisterQueue(this);
- any_thread().time_domain = nullptr;
any_thread().task_queue_manager->UnregisterTaskQueue(this);
any_thread().task_queue_manager = nullptr;
@@ -114,7 +104,7 @@
base::AutoLock lock(any_thread_lock_);
if (!any_thread().task_queue_manager)
return false;
- LazyNow lazy_now(any_thread().time_domain->CreateLazyNow());
+ LazyNow lazy_now(any_thread().task_queue_manager->delegate().get());
return PostDelayedTaskLocked(&lazy_now, from_here, task, desired_run_time,
TaskType::NORMAL);
}
@@ -127,7 +117,7 @@
base::AutoLock lock(any_thread_lock_);
if (!any_thread().task_queue_manager)
return false;
- LazyNow lazy_now(any_thread().time_domain->CreateLazyNow());
+ LazyNow lazy_now(any_thread().task_queue_manager->delegate().get());
base::TimeTicks desired_run_time;
if (delay > base::TimeDelta())
desired_run_time = lazy_now.Now() + delay;
@@ -153,35 +143,13 @@
any_thread().delayed_task_queue.push(pending_task);
TraceQueueSize(true);
// Schedule a later call to MoveReadyDelayedTasksToIncomingQueue.
- if (base::PlatformThread::CurrentId() == thread_id_) {
- any_thread().time_domain->ScheduleDelayedWork(this, desired_run_time,
- lazy_now);
- } else {
- // NOTE posting a delayed task from a different thread is not expected to
- // be common. This pathway is less optimal than perhaps it could be
- // because it causes two main thread tasks to be run. Should this
- // assumption prove to be false in future, we may need to revisit this.
- Task thread_hop_task(
- FROM_HERE, base::Bind(&TaskQueueImpl::ScheduleDelayedWorkTask, this,
- any_thread().time_domain, desired_run_time),
- any_thread().task_queue_manager->GetNextSequenceNumber(), true);
- any_thread().task_queue_manager->DidQueueTask(thread_hop_task);
- pending_task.set_enqueue_order(thread_hop_task.sequence_num);
- EnqueueTaskLocked(thread_hop_task);
- }
+ any_thread().task_queue_manager->ScheduleDelayedWork(this, desired_run_time,
+ lazy_now);
return true;
}
pending_task.set_enqueue_order(pending_task.sequence_num);
EnqueueTaskLocked(pending_task);
return true;
-}
-
-void TaskQueueImpl::ScheduleDelayedWorkTask(
- const scoped_refptr<TimeDomain> time_domain,
- base::TimeTicks desired_run_time) {
- DCHECK(main_thread_checker_.CalledOnValidThread());
- LazyNow lazy_now(time_domain->CreateLazyNow());
- time_domain->ScheduleDelayedWork(this, desired_run_time, &lazy_now);
}
void TaskQueueImpl::MoveReadyDelayedTasksToIncomingQueue(LazyNow* lazy_now) {
@@ -254,6 +222,16 @@
return true;
}
+bool TaskQueueImpl::NextPendingDelayedTaskRunTime(
+ base::TimeTicks* next_pending_delayed_task) {
+ base::AutoLock lock(any_thread_lock_);
+ if (any_thread().delayed_task_queue.empty())
+ return false;
+ *next_pending_delayed_task =
+ any_thread().delayed_task_queue.top().delayed_run_time;
+ return true;
+}
+
void TaskQueueImpl::UpdateWorkQueue(LazyNow* lazy_now,
bool should_trigger_wakeup,
const Task* previous_task) {
@@ -263,9 +241,10 @@
return;
MoveReadyDelayedTasksToIncomingQueueLocked(lazy_now);
std::swap(main_thread_only().work_queue, any_thread().incoming_queue);
- // |any_thread().incoming_queue| is now empty so TimeDomain::UpdateQueues
- // no longer needs to consider this queue for reloading.
- any_thread().time_domain->UnregisterAsUpdatableTaskQueue(this);
+ // |any_thread().incoming_queue| is now empty so
+ // TaskQueueManager::UpdateQueues no longer needs to consider
+ // this queue for reloading.
+ any_thread().task_queue_manager->UnregisterAsUpdatableTaskQueue(this);
if (!main_thread_only().work_queue.empty()) {
DCHECK(any_thread().task_queue_manager);
any_thread().task_queue_manager->selector_.GetTaskQueueSets()->OnPushQueue(
@@ -308,7 +287,7 @@
if (!any_thread().task_queue_manager)
return;
if (any_thread().incoming_queue.empty())
- any_thread().time_domain->RegisterAsUpdatableTaskQueue(this);
+ any_thread().task_queue_manager->RegisterAsUpdatableTaskQueue(this);
if (any_thread().pump_policy == PumpPolicy::AUTO &&
any_thread().incoming_queue.empty()) {
any_thread().task_queue_manager->MaybePostDoWorkOnMainRunner();
@@ -318,17 +297,11 @@
TraceQueueSize(true);
}
-// TODO(alexclarke): Consider merging EnqueueTaskLocked &
-// EnqueueDelayedTaskLocked.
void TaskQueueImpl::EnqueueDelayedTaskLocked(const Task& pending_task) {
if (!any_thread().task_queue_manager)
return;
if (any_thread().incoming_queue.empty())
- any_thread().time_domain->RegisterAsUpdatableTaskQueue(this);
- if (any_thread().pump_policy == PumpPolicy::AUTO &&
- any_thread().incoming_queue.empty()) {
- any_thread().task_queue_manager->MaybePostDoWorkOnMainRunner();
- }
+ any_thread().task_queue_manager->RegisterAsUpdatableTaskQueue(this);
// TODO(alexclarke): consider std::move() when allowed.
any_thread().incoming_queue.push(pending_task);
any_thread().incoming_queue.back().set_enqueue_order(
@@ -349,7 +322,7 @@
if (!any_thread().task_queue_manager)
return;
- LazyNow lazy_now(any_thread().time_domain->CreateLazyNow());
+ LazyNow lazy_now(any_thread().task_queue_manager->delegate().get());
MoveReadyDelayedTasksToIncomingQueueLocked(&lazy_now);
bool was_empty = main_thread_only().work_queue.empty();
@@ -358,9 +331,9 @@
main_thread_only().work_queue.push(any_thread().incoming_queue.front());
any_thread().incoming_queue.pop();
}
- // |incoming_queue| is now empty so TimeDomain::UpdateQueues no longer needs
- // to consider this queue for reloading.
- any_thread().time_domain->UnregisterAsUpdatableTaskQueue(this);
+ // |incoming_queue| is now empty so TaskQueueManager::UpdateQueues no longer
+ // needs to consider this queue for reloading.
+ any_thread().task_queue_manager->UnregisterAsUpdatableTaskQueue(this);
if (!main_thread_only().work_queue.empty()) {
if (was_empty) {
any_thread()
@@ -457,7 +430,6 @@
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;
@@ -509,17 +481,6 @@
DidProcessTask(pending_task));
}
-void TaskQueueImpl::SetTimeDomain(
- const scoped_refptr<TimeDomain>& time_domain) {
- base::AutoLock lock(any_thread_lock_);
- DCHECK(main_thread_checker_.CalledOnValidThread());
- if (time_domain == any_thread().time_domain)
- return;
-
- any_thread().time_domain->MigrateQueue(this, time_domain.get());
- any_thread().time_domain = time_domain;
-}
-
// static
void TaskQueueImpl::QueueAsValueInto(const std::queue<Task>& queue,
base::trace_event::TracedValue* state) {
@@ -555,10 +516,5 @@
state->EndDictionary();
}
-size_t TaskQueueImpl::IncomingQueueSizeForTest() const {
- base::AutoLock lock(any_thread_lock_);
- return any_thread().incoming_queue.size();
-}
-
} // namespace internal
} // namespace scheduler
« no previous file with comments | « components/scheduler/base/task_queue_impl.h ('k') | components/scheduler/base/task_queue_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698