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