Index: dm/DMTask.h |
diff --git a/dm/DMTask.h b/dm/DMTask.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..744fd6bb9c0634fcee000e09960ea1eadfa91e71 |
--- /dev/null |
+++ b/dm/DMTask.h |
@@ -0,0 +1,43 @@ |
+#ifndef DMTask_DEFINED |
+#define DMTask_DEFINED |
+ |
+#include "DMReporter.h" |
+#include "SkRunnable.h" |
+#include "SkThreadPool.h" |
+ |
+// DM will run() these tasks on one of two threadpools, depending on the result |
+// of usesGpu(). The subclasses can call fail() to mark this task as failed, |
+// or make any number of spawnChild() calls to kick off dependent tasks. |
+// |
+// Task deletes itself when run. |
+ |
+namespace DM { |
+ |
+class TaskRunner; |
+ |
+class Task : public SkRunnable { |
+public: |
+ Task(Reporter* reporter, TaskRunner* taskRunner); |
+ Task(const Task& that); |
+ virtual ~Task(); |
+ |
+ void run(); |
+ |
+ virtual void draw() = 0; |
+ virtual bool usesGpu() const = 0; |
+ virtual bool shouldSkip() const = 0; |
+ virtual SkString name() const = 0; |
+ |
+protected: |
+ void spawnChild(Task* task); |
+ void fail(); |
+ |
+private: |
+ // Both unowned. |
+ Reporter* fReporter; |
+ TaskRunner* fTaskRunner; |
+}; |
+ |
+} // namespace DM |
+ |
+#endif // DMTask_DEFINED |