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