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

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

Issue 1652083002: Prepare for per-webview virtual time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 11 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 584eb703646e0173c5e79b748993e49a56760677..4e31a868176c71e584d2a8d48338b8c57854711a 100644
--- a/components/scheduler/base/task_queue_manager.cc
+++ b/components/scheduler/base/task_queue_manager.cc
@@ -48,6 +48,7 @@ TaskQueueManager::TaskQueueManager(
disabled_by_default_tracing_category),
disabled_by_default_verbose_tracing_category_(
disabled_by_default_verbose_tracing_category),
+ currently_executing_task_queue_(nullptr),
observer_(nullptr),
deletion_sentinel_(new DeletionSentinel()),
weak_factory_(this) {
@@ -218,12 +219,8 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) {
// 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() || TryAdvanceTimeDomains()) {
+ if (!selector_.EnabledWorkQueuesEmpty() || TryAdvanceTimeDomains())
MaybeScheduleImmediateWork(FROM_HERE);
- } else {
- // Tell the task runner we have no more work.
- delegate_->OnNoMoreImmediateWork();
- }
}
bool TaskQueueManager::TryAdvanceTimeDomains() {
@@ -280,6 +277,12 @@ TaskQueueManager::ProcessTaskResult TaskQueueManager::ProcessTaskFromWorkQueue(
}
TRACE_EVENT1(tracing_category_,
"TaskQueueManager::RunTask", "queue", queue->GetName());
+ // NOTE when TaskQueues get unregistered a reference ends up getting retained
+ // by |queues_to_delete_| which is cleared at the top of |DoWork|. This means
+ // we are OK to use raw pointers here.
+ internal::TaskQueueImpl* prev_executing_task_queue =
+ currently_executing_task_queue_;
+ currently_executing_task_queue_ = queue;
task_annotator_.RunTask("TaskQueueManager::PostTask", pending_task);
// Detect if the TaskQueueManager just got deleted. If this happens we must
@@ -287,6 +290,8 @@ TaskQueueManager::ProcessTaskResult TaskQueueManager::ProcessTaskFromWorkQueue(
if (protect->HasOneRef())
return ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED;
+ currently_executing_task_queue_ = prev_executing_task_queue;
+
if (queue->GetShouldNotifyObservers()) {
FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_,
DidProcessTask(pending_task));
« no previous file with comments | « components/scheduler/base/task_queue_manager.h ('k') | components/scheduler/base/task_queue_manager_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698