DMReplayTask.cpp revision d36522d12d3e71958e50683a7eef43dc2a47d96d
1#include "DMReplayTask.h" 2#include "DMUtil.h" 3 4#include "SkPicture.h" 5 6namespace DM { 7 8ReplayTask::ReplayTask(const char* suffix, 9 const Task& parent, 10 skiagm::GM* gm, 11 skiagm::GmResultDigest reference, 12 SkBitmap::Config config) 13 : Task(parent) 14 , fName(underJoin(parent.name().c_str(), suffix)) 15 , fGM(gm) 16 , fReference(reference) 17 , fConfig(config) 18 {} 19 20void ReplayTask::draw() { 21 SkPicture picture; 22 SkCanvas* canvas = picture.beginRecording(fGM->width(), fGM->height(), 0 /*flags*/); 23 24 canvas->concat(fGM->getInitialTransform()); 25 fGM->draw(canvas); 26 canvas->flush(); 27 28 picture.endRecording(); 29 30 SkBitmap bitmap; 31 bitmap.setConfig(fConfig, fGM->width(), fGM->height()); 32 bitmap.allocPixels(); 33 bitmap.eraseColor(0x00000000); 34 35 SkCanvas replay(bitmap); 36 replay.drawPicture(picture); 37 replay.flush(); 38 39 const skiagm::GmResultDigest replayDigest(bitmap); 40 if (!replayDigest.equals(fReference)) { 41 this->fail(); 42 } 43} 44 45bool ReplayTask::shouldSkip() const { 46 return fGM->getFlags() & skiagm::GM::kGPUOnly_Flag || 47 fGM->getFlags() & skiagm::GM::kSkipPicture_Flag; 48} 49 50} // namespace 51