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 "cc/resources/task_graph_runner.h" | 5 #include "cc/resources/task_graph_runner.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/threading/thread_restrictions.h" | 10 #include "base/threading/thread_restrictions.h" |
(...skipping 272 matching lines...) Loading... |
283 } | 283 } |
284 } | 284 } |
285 | 285 |
286 void TaskGraphRunner::WaitForTasksToFinishRunning(NamespaceToken token) { | 286 void TaskGraphRunner::WaitForTasksToFinishRunning(NamespaceToken token) { |
287 TRACE_EVENT0("cc", "TaskGraphRunner::WaitForTasksToFinishRunning"); | 287 TRACE_EVENT0("cc", "TaskGraphRunner::WaitForTasksToFinishRunning"); |
288 | 288 |
289 DCHECK(token.IsValid()); | 289 DCHECK(token.IsValid()); |
290 | 290 |
291 { | 291 { |
292 base::AutoLock lock(lock_); | 292 base::AutoLock lock(lock_); |
| 293 base::ThreadRestrictions::ScopedAllowWait allow_wait; |
293 | 294 |
294 TaskNamespaceMap::const_iterator it = namespaces_.find(token.id_); | 295 TaskNamespaceMap::const_iterator it = namespaces_.find(token.id_); |
295 if (it == namespaces_.end()) | 296 if (it == namespaces_.end()) |
296 return; | 297 return; |
297 | 298 |
298 const TaskNamespace& task_namespace = it->second; | 299 const TaskNamespace& task_namespace = it->second; |
299 | 300 |
300 while (!HasFinishedRunningTasksInNamespace(&task_namespace)) | 301 while (!HasFinishedRunningTasksInNamespace(&task_namespace)) |
301 has_namespaces_with_finished_running_tasks_cv_.Wait(); | 302 has_namespaces_with_finished_running_tasks_cv_.Wait(); |
302 | 303 |
(...skipping 168 matching lines...) Loading... |
471 | 472 |
472 // Finally add task to |completed_tasks_|. | 473 // Finally add task to |completed_tasks_|. |
473 task_namespace->completed_tasks.push_back(task); | 474 task_namespace->completed_tasks.push_back(task); |
474 | 475 |
475 // If namespace has finished running all tasks, wake up origin thread. | 476 // If namespace has finished running all tasks, wake up origin thread. |
476 if (HasFinishedRunningTasksInNamespace(task_namespace)) | 477 if (HasFinishedRunningTasksInNamespace(task_namespace)) |
477 has_namespaces_with_finished_running_tasks_cv_.Signal(); | 478 has_namespaces_with_finished_running_tasks_cv_.Signal(); |
478 } | 479 } |
479 | 480 |
480 } // namespace cc | 481 } // namespace cc |
OLD | NEW |