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 8namespace DM { 9 10CpuGMTask::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 22void 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 51bool 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