| 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 7b65bb581978b228d3f69f8fdae7334d1fa9c977..b0557efd60ade856b5d3699258826b95da769724 100644
|
| --- a/components/scheduler/child/task_queue_manager.cc
|
| +++ b/components/scheduler/child/task_queue_manager.cc
|
| @@ -688,7 +688,7 @@ void TaskQueueManager::DoWork(bool posted_from_main_thread) {
|
| // already pending, so it is safe to call it in a loop.
|
| MaybePostDoWorkOnMainRunner();
|
|
|
| - if (ProcessTaskFromWorkQueue(queue_index, i > 0, &previous_task))
|
| + if (ProcessTaskFromWorkQueue(queue_index, &previous_task))
|
| return; // The TaskQueueManager got deleted, we must bail out.
|
|
|
| bool should_trigger_wakeup = Queue(queue_index)->wakeup_policy() ==
|
| @@ -712,8 +712,7 @@ void TaskQueueManager::DidQueueTask(const base::PendingTask& pending_task) {
|
|
|
| bool TaskQueueManager::ProcessTaskFromWorkQueue(
|
| size_t queue_index,
|
| - bool has_previous_task,
|
| - base::PendingTask* previous_task) {
|
| + base::PendingTask* out_task) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| scoped_refptr<DeletionSentinel> protect(deletion_sentinel_);
|
| internal::TaskQueueImpl* queue = Queue(queue_index);
|
| @@ -725,18 +724,10 @@ bool TaskQueueManager::ProcessTaskFromWorkQueue(
|
| main_task_runner_->PostNonNestableTask(pending_task.posted_from,
|
| pending_task.task);
|
| } else {
|
| - // Suppress "will" task observer notifications for the first and "did"
|
| - // notifications for the last task in the batch to avoid duplicate
|
| - // notifications.
|
| - if (has_previous_task) {
|
| - FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_,
|
| - DidProcessTask(*previous_task));
|
| - FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_,
|
| - WillProcessTask(pending_task));
|
| - }
|
| -
|
| TRACE_TASK_EXECUTION("TaskQueueManager::ProcessTaskFromWorkQueue",
|
| pending_task);
|
| + FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_,
|
| + WillProcessTask(pending_task));
|
| task_annotator_.RunTask("TaskQueueManager::PostTask", pending_task);
|
|
|
| // Detect if the TaskQueueManager just got deleted. If this happens we must
|
| @@ -744,8 +735,11 @@ bool TaskQueueManager::ProcessTaskFromWorkQueue(
|
| if (protect->HasOneRef())
|
| return true;
|
|
|
| + FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_,
|
| + DidProcessTask(pending_task));
|
| +
|
| pending_task.task.Reset();
|
| - *previous_task = pending_task;
|
| + *out_task = pending_task;
|
| }
|
| return false;
|
| }
|
| @@ -777,14 +771,12 @@ void TaskQueueManager::SetWorkBatchSize(int work_batch_size) {
|
| void TaskQueueManager::AddTaskObserver(
|
| base::MessageLoop::TaskObserver* task_observer) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| - main_task_runner_->AddTaskObserver(task_observer);
|
| task_observers_.AddObserver(task_observer);
|
| }
|
|
|
| void TaskQueueManager::RemoveTaskObserver(
|
| base::MessageLoop::TaskObserver* task_observer) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| - main_task_runner_->RemoveTaskObserver(task_observer);
|
| task_observers_.RemoveObserver(task_observer);
|
| }
|
|
|
|
|