Index: components/scheduler/child/task_queue_manager.cc |
diff --git a/components/scheduler/child/task_queue_manager.cc b/components/scheduler/child/task_queue_manager.cc |
index c0895ba4e0103d4d7372b136a8a78adcb8b722e4..d04afa82d96c908e9801a38d520d2e6606db0307 100644 |
--- a/components/scheduler/child/task_queue_manager.cc |
+++ b/components/scheduler/child/task_queue_manager.cc |
@@ -34,6 +34,7 @@ TaskQueueManager::TaskQueueManager( |
disabled_by_default_tracing_category), |
disabled_by_default_verbose_tracing_category_( |
disabled_by_default_verbose_tracing_category), |
+ queue_observer_(nullptr), |
deletion_sentinel_(new DeletionSentinel()), |
weak_factory_(this) { |
DCHECK(main_task_runner->RunsTasksOnCurrentThread()); |
@@ -73,12 +74,20 @@ scoped_refptr<internal::TaskQueueImpl> TaskQueueManager::NewTaskQueue( |
return queue; |
} |
+void TaskQueueManager::SetQueueObserver(Observer* observer) { |
+ DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ queue_observer_ = observer; |
+} |
+ |
void TaskQueueManager::UnregisterTaskQueue( |
scoped_refptr<internal::TaskQueueImpl> task_queue) { |
TRACE_EVENT1(disabled_by_default_tracing_category_, |
"TaskQueueManager::UnregisterTaskQueue", |
"queue_name", task_queue->GetName()); |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ if (queue_observer_) |
+ queue_observer_->OnUnregisterTaskQueue(task_queue); |
+ |
// Add |task_queue| to |queues_to_delete_| so we can prevent it from being |
// freed while any of our structures hold hold a raw pointer to it. |
queues_to_delete_.insert(task_queue); |
@@ -341,8 +350,9 @@ bool TaskQueueManager::ProcessTaskFromWorkQueue( |
WillProcessTask(pending_task)); |
queue->NotifyWillProcessTask(pending_task); |
} |
- TRACE_EVENT1(disabled_by_default_tracing_category_, |
- "Run Task From Queue", "queue", queue->GetName()); |
+ TRACE_EVENT2(disabled_by_default_tracing_category_, |
+ "TaskQueueManager::RunTask", "queue", queue->GetName(), |
+ "origin", queue->GetOrigin()); |
task_annotator_.RunTask("TaskQueueManager::PostTask", pending_task); |
// Detect if the TaskQueueManager just got deleted. If this happens we must |