Index: dm/DMCpuGMTask.cpp |
diff --git a/dm/DMCpuGMTask.cpp b/dm/DMCpuGMTask.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1a2c00d1d76019ebe1529bca96d10e4b81618e45 |
--- /dev/null |
+++ b/dm/DMCpuGMTask.cpp |
@@ -0,0 +1,56 @@ |
+#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); |
+ SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH); |
+ |
+ SPAWN(SerializeTask, fGMFactory(NULL), bm); |
+ |
+ 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 |