Home | History | Annotate | Download | only in dm
      1 #ifndef DMTask_DEFINED
      2 #define DMTask_DEFINED
      3 
      4 #include "DMReporter.h"
      5 #include "DMGpuSupport.h"
      6 #include "SkRunnable.h"
      7 #include "SkTime.h"
      8 
      9 // DM will run() these tasks on one of two threadpools.
     10 // Subclasses can call fail() to mark this task as failed, or make any number of spawnChild() calls
     11 // to kick off dependent tasks.
     12 //
     13 // Tasks delete themselves when run.
     14 
     15 namespace DM {
     16 
     17 class TaskRunner;
     18 
     19 class CpuTask;
     20 
     21 class Task {
     22 public:
     23     virtual bool shouldSkip() const = 0;
     24     virtual SkString name() const = 0;
     25 
     26     // Returns the number of parents above this task.
     27     // Top-level tasks return 0, their children 1, and so on.
     28     int depth() const { return fDepth; }
     29 
     30 protected:
     31     Task(Reporter* reporter, TaskRunner* taskRunner);
     32     Task(const Task& parent);
     33     virtual ~Task();
     34 
     35     void start();
     36     void fail(const char* msg = NULL);
     37     void finish();
     38 
     39     void spawnChildNext(CpuTask* task);  // For now we don't allow GPU child tasks.
     40 
     41 private:
     42     Reporter* fReporter;      // Unowned.
     43     TaskRunner* fTaskRunner;  // Unowned.
     44     int fDepth;
     45     SkMSec fStart;
     46 };
     47 
     48 class CpuTask : public Task, public SkRunnable {
     49 public:
     50     CpuTask(Reporter* reporter, TaskRunner* taskRunner);
     51     CpuTask(const Task& parent);
     52     virtual ~CpuTask() {}
     53 
     54     void run() SK_OVERRIDE;
     55     virtual void draw() = 0;
     56 
     57     void spawnChild(CpuTask* task);
     58 };
     59 
     60 class GpuTask : public Task, public SkTRunnable<GrContextFactory> {
     61  public:
     62     GpuTask(Reporter* reporter, TaskRunner* taskRunner);
     63     virtual ~GpuTask() {}
     64 
     65     void run(GrContextFactory&) SK_OVERRIDE;
     66     virtual void draw(GrContextFactory*) = 0;
     67 
     68     void spawnChild(CpuTask* task);
     69 };
     70 
     71 }  // namespace DM
     72 
     73 #endif  // DMTask_DEFINED
     74