1 #ifndef DMTask_DEFINED 2 #define DMTask_DEFINED 3 4 #include "DMReporter.h" 5 #include "SkRunnable.h" 6 #include "SkThreadPool.h" 7 8 // DM will run() these tasks on one of two threadpools, depending on the result 9 // of usesGpu(). The subclasses can call fail() to mark this task as failed, 10 // or make any number of spawnChild() calls to kick off dependent tasks. 11 // 12 // Task deletes itself when run. 13 14 namespace DM { 15 16 class TaskRunner; 17 18 class Task : public SkRunnable { 19 public: 20 Task(Reporter* reporter, TaskRunner* taskRunner); 21 Task(const Task& parent); 22 virtual ~Task(); 23 24 void run() SK_OVERRIDE; 25 26 virtual void draw() = 0; 27 virtual bool usesGpu() const = 0; 28 virtual bool shouldSkip() const = 0; 29 virtual SkString name() const = 0; 30 31 // Returns the number of parents above this task. 32 // Top-level tasks return 0, their children 1, and so on. 33 int depth() const { return fDepth; } 34 35 protected: 36 void spawnChild(Task* task); 37 void fail(); 38 39 private: 40 // Both unowned. 41 Reporter* fReporter; 42 TaskRunner* fTaskRunner; 43 int fDepth; 44 45 typedef SkRunnable INHERITED; 46 }; 47 48 } // namespace DM 49 50 #endif // DMTask_DEFINED 51