diff options
Diffstat (limited to 'dm/DMReplayTask.cpp')
-rw-r--r-- | dm/DMReplayTask.cpp | 42 |
1 files changed, 13 insertions, 29 deletions
diff --git a/dm/DMReplayTask.cpp b/dm/DMReplayTask.cpp index 0d6780ef42..a0ecf5fadf 100644 --- a/dm/DMReplayTask.cpp +++ b/dm/DMReplayTask.cpp @@ -1,54 +1,38 @@ #include "DMReplayTask.h" +#include "DMWriteTask.h" #include "DMUtil.h" +#include "SkCommandLineFlags.h" #include "SkPicture.h" +DEFINE_bool(replay, false, "If true, run picture replay tests."); + namespace DM { -ReplayTask::ReplayTask(const char* suffix, - const Task& parent, +ReplayTask::ReplayTask(const Task& parent, skiagm::GM* gm, SkBitmap reference) : Task(parent) - , fName(underJoin(parent.name().c_str(), suffix)) + , fName(UnderJoin(parent.name().c_str(), "replay")) , fGM(gm) , fReference(reference) {} void ReplayTask::draw() { - SkPicture picture; - SkCanvas* canvas = picture.beginRecording(SkScalarCeilToInt(fGM->width()), - SkScalarCeilToInt(fGM->height()), - 0 /*flags*/); - - canvas->concat(fGM->getInitialTransform()); - fGM->draw(canvas); - canvas->flush(); - - picture.endRecording(); + SkPicture recorded; + RecordPicture(fGM.get(), &recorded); SkBitmap bitmap; - bitmap.setConfig(fReference.config(), - SkScalarCeilToInt(fGM->width()), - SkScalarCeilToInt(fGM->height())); - bitmap.allocPixels(); - bitmap.eraseColor(0x00000000); - - SkCanvas replay(bitmap); - replay.drawPicture(picture); - replay.flush(); - - const SkAutoLockPixels mine(bitmap), theirs(fReference); - if (bitmap.getSize() != fReference.getSize() || - 0 != memcmp(bitmap.getPixels(), fReference.getPixels(), bitmap.getSize())) - { + SetupBitmap(fReference.config(), fGM.get(), &bitmap); + DrawPicture(&recorded, &bitmap); + if (!BitmapsEqual(bitmap, fReference)) { this->fail(); + this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); } } bool ReplayTask::shouldSkip() const { - return fGM->getFlags() & skiagm::GM::kGPUOnly_Flag || - fGM->getFlags() & skiagm::GM::kSkipPicture_Flag; + return !FLAGS_replay || fGM->getFlags() & skiagm::GM::kSkipPicture_Flag; } } // namespace DM |