#include "DMCpuGMTask.h" #include "DMPipeTask.h" #include "DMQuiltTask.h" #include "DMSerializeTask.h" #include "DMUtil.h" #include "DMWriteTask.h" namespace DM { CpuGMTask::CpuGMTask(const char* config, Reporter* reporter, TaskRunner* taskRunner, skiagm::GMRegistry::Factory gmFactory, SkColorType colorType) : CpuTask(reporter, taskRunner) , fGMFactory(gmFactory) , fGM(fGMFactory(NULL)) , fName(UnderJoin(fGM->getName(), config)) , fColorType(colorType) {} void CpuGMTask::draw() { SkBitmap bm; AllocatePixels(fColorType, fGM->getISize().width(), fGM->getISize().height(), &bm); SkCanvas canvas(bm); CanvasPreflight(&canvas); canvas.concat(fGM->getInitialTransform()); fGM->draw(&canvas); canvas.flush(); #define SPAWN(ChildTask, ...) this->spawnChild(SkNEW_ARGS(ChildTask, (*this, __VA_ARGS__))) SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kInProcess_Mode); SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kCrossProcess_Mode); SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kSharedAddress_Mode); SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kNone_BBH, QuiltTask::kDefault_Backend); SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH, QuiltTask::kDefault_Backend); SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kTileGrid_BBH, QuiltTask::kDefault_Backend); SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kNone_BBH, QuiltTask::kSkRecord_Backend); SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH, QuiltTask::kSkRecord_Backend); SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kTileGrid_BBH, QuiltTask::kSkRecord_Backend); SPAWN(SerializeTask, fGMFactory(NULL), bm, SerializeTask::kNormal_Mode); SPAWN(SerializeTask, fGMFactory(NULL), bm, SerializeTask::kSkRecord_Mode); SPAWN(WriteTask, "GM", bm); #undef SPAWN } bool CpuGMTask::shouldSkip() const { if (kRGB_565_SkColorType == fColorType && (fGM->getFlags() & skiagm::GM::kSkip565_Flag)) { return true; } if (fGM->getFlags() & skiagm::GM::kGPUOnly_Flag) { return true; } return false; } } // namespace DM