Chromium Code Reviews| 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 |