Index: dm/DMReplayTask.cpp |
diff --git a/dm/DMReplayTask.cpp b/dm/DMReplayTask.cpp |
index 0d6780ef4200b13e119efb7539b45ef2ffdec60c..a0ecf5fadf7812e282b1a8a7b745a698204fda77 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 |