Home | History | Annotate | Download | only in dm
      1 #include "DMCpuGMTask.h"
      2 #include "DMPipeTask.h"
      3 #include "DMQuiltTask.h"
      4 #include "DMSerializeTask.h"
      5 #include "DMUtil.h"
      6 #include "DMWriteTask.h"
      7 
      8 namespace DM {
      9 
     10 CpuGMTask::CpuGMTask(const char* config,
     11                      Reporter* reporter,
     12                      TaskRunner* taskRunner,
     13                      skiagm::GMRegistry::Factory gmFactory,
     14                      SkColorType colorType)
     15     : CpuTask(reporter, taskRunner)
     16     , fGMFactory(gmFactory)
     17     , fGM(fGMFactory(NULL))
     18     , fName(UnderJoin(fGM->getName(), config))
     19     , fColorType(colorType)
     20     {}
     21 
     22 void CpuGMTask::draw() {
     23     SkBitmap bm;
     24     AllocatePixels(fColorType, fGM->getISize().width(), fGM->getISize().height(), &bm);
     25 
     26     SkCanvas canvas(bm);
     27     CanvasPreflight(&canvas);
     28     canvas.concat(fGM->getInitialTransform());
     29     fGM->draw(&canvas);
     30     canvas.flush();
     31 
     32 #define SPAWN(ChildTask, ...) this->spawnChild(SkNEW_ARGS(ChildTask, (*this, __VA_ARGS__)))
     33     SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kInProcess_Mode);
     34     SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kCrossProcess_Mode);
     35     SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kSharedAddress_Mode);
     36 
     37     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kNone_BBH,     QuiltTask::kDefault_Backend);
     38     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH,    QuiltTask::kDefault_Backend);
     39     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kTileGrid_BBH, QuiltTask::kDefault_Backend);
     40     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kNone_BBH,     QuiltTask::kSkRecord_Backend);
     41     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH,    QuiltTask::kSkRecord_Backend);
     42     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kTileGrid_BBH, QuiltTask::kSkRecord_Backend);
     43 
     44     SPAWN(SerializeTask, fGMFactory(NULL), bm, SerializeTask::kNormal_Mode);
     45     SPAWN(SerializeTask, fGMFactory(NULL), bm, SerializeTask::kSkRecord_Mode);
     46 
     47     SPAWN(WriteTask, "GM", bm);
     48 #undef SPAWN
     49 }
     50 
     51 bool CpuGMTask::shouldSkip() const {
     52     if (kRGB_565_SkColorType == fColorType && (fGM->getFlags() & skiagm::GM::kSkip565_Flag)) {
     53         return true;
     54     }
     55     if (fGM->getFlags() & skiagm::GM::kGPUOnly_Flag) {
     56         return true;
     57     }
     58     return false;
     59 }
     60 
     61 }  // namespace DM
     62