Chromium Code Reviews| Index: cc/raster/single_thread_task_graph_runner.h |
| diff --git a/cc/raster/single_thread_task_graph_runner.h b/cc/raster/single_thread_task_graph_runner.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9a5774f77330fa46ce540e80e96089264aede40b |
| --- /dev/null |
| +++ b/cc/raster/single_thread_task_graph_runner.h |
| @@ -0,0 +1,65 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CC_RASTER_SINGLE_THREAD_TASK_GRAPH_RUNNER_H_ |
| +#define CC_RASTER_SINGLE_THREAD_TASK_GRAPH_RUNNER_H_ |
| + |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/threading/simple_thread.h" |
| +#include "cc/raster/task_graph_runner.h" |
| +#include "cc/raster/task_graph_work_queue.h" |
| + |
| +namespace base { |
| +class SimpleThread; |
| +} |
| + |
| +namespace cc { |
| + |
| +// Runs TaskGraphs asynchronously using a single worker thread. |
| +class CC_EXPORT SingleThreadTaskGraphRunner |
| + : public TaskGraphRunner, |
| + public base::DelegateSimpleThread::Delegate { |
| + public: |
| + SingleThreadTaskGraphRunner(); |
| + ~SingleThreadTaskGraphRunner() override; |
| + |
| + // Overridden from TaskGraphRunner: |
| + void ScheduleTasks(NamespaceToken token, TaskGraph* graph) override; |
| + void WaitForTasksToFinishRunning(NamespaceToken token) override; |
| + void CollectCompletedTasks(NamespaceToken token, |
| + Task::Vector* completed_tasks) override; |
| + |
| + // Overridden from base::DelegateSimpleThread::Delegate: |
| + void Run() override; |
| + |
| + void Start(const std::string& thread_name); |
| + void Shutdown(); |
| + |
| + private: |
| + void RunTaskWithLockAcquired(); |
| + |
| + scoped_ptr<base::SimpleThread> raster_thread_; |
|
reveman
2015/11/19 16:05:46
nit: s/raster_thread_/thread_/ as this is not stri
ericrk
2015/11/23 18:43:37
Done.
ericrk
2015/11/23 18:43:37
Done.
|
| + |
| + // Lock to exclusively access all the following members that are used to |
| + // implement the TaskRunner interfaces. |
| + base::Lock lock_; |
| + |
| + // Stores the actual tasks to be run by this runner, sorted by priority. |
| + TaskGraphWorkQueue work_queue_; |
| + |
| + // Condition variable that is waited on by Run() until new tasks are ready to |
| + // run or shutdown starts. |
| + base::ConditionVariable has_ready_to_run_tasks_cv_; |
| + |
| + // Condition variable that is waited on by origin threads until a namespace |
| + // has finished running all associated tasks. |
| + base::ConditionVariable has_namespaces_with_finished_running_tasks_cv_; |
| + |
| + // Set during shutdown. Tells Run() to return when no more tasks are pending. |
| + bool shutdown_; |
| +}; |
| + |
| +} // namespace cc |
| + |
| +#endif // CC_RASTER_SINGLE_THREAD_TASK_GRAPH_RUNNER_H_ |