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