| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/scheduler/base/task_queue_manager.h" | 5 #include "platform/scheduler/base/task_queue_manager.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 181 } |
| 182 | 182 |
| 183 void TaskQueueManager::OnBeginNestedMessageLoop() { | 183 void TaskQueueManager::OnBeginNestedMessageLoop() { |
| 184 // We just entered a nested message loop, make sure there's a DoWork posted or | 184 // We just entered a nested message loop, make sure there's a DoWork posted or |
| 185 // the system will grind to a halt. | 185 // the system will grind to a halt. |
| 186 { | 186 { |
| 187 base::AutoLock lock(any_thread_lock_); | 187 base::AutoLock lock(any_thread_lock_); |
| 188 any_thread().immediate_do_work_posted_count++; | 188 any_thread().immediate_do_work_posted_count++; |
| 189 any_thread().is_nested = true; | 189 any_thread().is_nested = true; |
| 190 } | 190 } |
| 191 |
| 192 // When a nested message loop starts, task time observers may want to ignore |
| 193 // the current task. |
| 194 for (auto& observer : task_time_observers_) |
| 195 observer.onBeginNestedMessageLoop(); |
| 196 |
| 191 delegate_->PostTask(FROM_HERE, immediate_do_work_closure_); | 197 delegate_->PostTask(FROM_HERE, immediate_do_work_closure_); |
| 192 } | 198 } |
| 193 | 199 |
| 194 void TaskQueueManager::OnQueueHasIncomingImmediateWork( | 200 void TaskQueueManager::OnQueueHasIncomingImmediateWork( |
| 195 internal::TaskQueueImpl* queue, | 201 internal::TaskQueueImpl* queue, |
| 196 internal::EnqueueOrder enqueue_order, | 202 internal::EnqueueOrder enqueue_order, |
| 197 bool queue_is_blocked) { | 203 bool queue_is_blocked) { |
| 198 MoveableAutoLock lock(any_thread_lock_); | 204 MoveableAutoLock lock(any_thread_lock_); |
| 199 any_thread().has_incoming_immediate_work.insert( | 205 any_thread().has_incoming_immediate_work.insert( |
| 200 std::make_pair(queue, enqueue_order)); | 206 std::make_pair(queue, enqueue_order)); |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 for (const scoped_refptr<internal::TaskQueueImpl>& queue : queues_) { | 711 for (const scoped_refptr<internal::TaskQueueImpl>& queue : queues_) { |
| 706 TimeDomain* time_domain = queue->GetTimeDomain(); | 712 TimeDomain* time_domain = queue->GetTimeDomain(); |
| 707 if (time_domain_now.find(time_domain) == time_domain_now.end()) | 713 if (time_domain_now.find(time_domain) == time_domain_now.end()) |
| 708 time_domain_now.insert(std::make_pair(time_domain, time_domain->Now())); | 714 time_domain_now.insert(std::make_pair(time_domain, time_domain->Now())); |
| 709 queue->SweepCanceledDelayedTasks(time_domain_now[time_domain]); | 715 queue->SweepCanceledDelayedTasks(time_domain_now[time_domain]); |
| 710 } | 716 } |
| 711 } | 717 } |
| 712 | 718 |
| 713 } // namespace scheduler | 719 } // namespace scheduler |
| 714 } // namespace blink | 720 } // namespace blink |
| OLD | NEW |