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 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 | 240 |
241 for (int i = 0; i < work_batch_size_; i++) { | 241 for (int i = 0; i < work_batch_size_; i++) { |
242 internal::WorkQueue* work_queue; | 242 internal::WorkQueue* work_queue; |
243 if (!SelectWorkQueueToService(&work_queue)) | 243 if (!SelectWorkQueueToService(&work_queue)) |
244 break; | 244 break; |
245 | 245 |
246 // TaskQueueManager guarantees that task queue will not be deleted | 246 // TaskQueueManager guarantees that task queue will not be deleted |
247 // when we are in DoWork (but WorkQueue may be deleted). | 247 // when we are in DoWork (but WorkQueue may be deleted). |
248 internal::TaskQueueImpl* task_queue = work_queue->task_queue(); | 248 internal::TaskQueueImpl* task_queue = work_queue->task_queue(); |
249 | 249 |
250 if (!delegate_->IsNested()) { | |
251 for (auto& observer : task_time_observers_) | |
252 observer.ReportTaskStartTime(MonotonicTimeInSeconds(task_start_time)); | |
253 } | |
254 | |
250 switch (ProcessTaskFromWorkQueue(work_queue)) { | 255 switch (ProcessTaskFromWorkQueue(work_queue)) { |
251 case ProcessTaskResult::DEFERRED: | 256 case ProcessTaskResult::DEFERRED: |
252 // If a task was deferred, try again with another task. | 257 DCHECK(delegate_->IsNested()); |
Sami
2016/11/14 21:16:45
I think this comment is still valid?
tdresser
2016/12/15 13:17:00
Done.
| |
253 continue; | 258 continue; |
254 case ProcessTaskResult::EXECUTED: | 259 case ProcessTaskResult::EXECUTED: |
255 break; | 260 break; |
256 case ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED: | 261 case ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED: |
257 return; // The TaskQueueManager got deleted, we must bail out. | 262 return; // The TaskQueueManager got deleted, we must bail out. |
258 } | 263 } |
259 | 264 |
260 lazy_now = real_time_domain()->CreateLazyNow(); | 265 lazy_now = real_time_domain()->CreateLazyNow(); |
261 if (!delegate_->IsNested() && task_start_time != base::TimeTicks()) { | 266 if (!delegate_->IsNested() && task_start_time != base::TimeTicks()) { |
262 // Only report top level task durations. | 267 // Only report top level task durations. |
263 base::TimeTicks task_end_time = lazy_now.Now(); | 268 base::TimeTicks task_end_time = lazy_now.Now(); |
264 for (auto& observer : task_time_observers_) { | 269 for (auto& observer : task_time_observers_) { |
265 observer.ReportTaskTime(task_queue, | 270 observer.ReportTaskEndTime(task_queue, |
266 MonotonicTimeInSeconds(task_start_time), | 271 MonotonicTimeInSeconds(task_start_time), |
267 MonotonicTimeInSeconds(task_end_time)); | 272 MonotonicTimeInSeconds(task_end_time)); |
268 } | 273 } |
269 task_start_time = task_end_time; | 274 task_start_time = task_end_time; |
270 } | 275 } |
271 | 276 |
272 work_queue = nullptr; // The queue may have been unregistered. | 277 work_queue = nullptr; // The queue may have been unregistered. |
273 | 278 |
274 UpdateWorkQueues(lazy_now); | 279 UpdateWorkQueues(lazy_now); |
275 | 280 |
276 // Only run a single task per batch in nested run loops so that we can | 281 // Only run a single task per batch in nested run loops so that we can |
277 // properly exit the nested loop when someone calls RunLoop::Quit(). | 282 // properly exit the nested loop when someone calls RunLoop::Quit(). |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 *work_queue->GetFrontTask()); | 495 *work_queue->GetFrontTask()); |
491 } | 496 } |
492 } | 497 } |
493 | 498 |
494 bool TaskQueueManager::HasImmediateWorkForTesting() const { | 499 bool TaskQueueManager::HasImmediateWorkForTesting() const { |
495 return !selector_.EnabledWorkQueuesEmpty(); | 500 return !selector_.EnabledWorkQueuesEmpty(); |
496 } | 501 } |
497 | 502 |
498 } // namespace scheduler | 503 } // namespace scheduler |
499 } // namespace blink | 504 } // namespace blink |
OLD | NEW |