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_ |