| Index: dm/DMSKPTask.cpp
|
| diff --git a/dm/DMSKPTask.cpp b/dm/DMSKPTask.cpp
|
| index 760138f7c98a96d4b52ac5d5a424fcd6cdbfe3fc..68fbb60717fc8e94c72b321ba4835c0de78db160 100644
|
| --- a/dm/DMSKPTask.cpp
|
| +++ b/dm/DMSKPTask.cpp
|
| @@ -1,23 +1,59 @@
|
| -#include "DMRecordTask.h"
|
| #include "DMSKPTask.h"
|
| #include "DMUtil.h"
|
| #include "DMWriteTask.h"
|
|
|
| +#include "SkCommandLineFlags.h"
|
| +#include "SkPictureRecorder.h"
|
| +
|
| +DECLARE_bool(skr); // in DMReplayTask.cpp
|
| +
|
| namespace DM {
|
|
|
| -SKPTask::SKPTask(Reporter* r, TaskRunner* tr, SkPicture* pic, SkString filename)
|
| +// Test that an SkPicture plays back the same when re-recorded into an
|
| +// SkPicture backed by SkRecord.
|
| +class SkrComparisonTask : public CpuTask {
|
| +public:
|
| + SkrComparisonTask(const Task& parent, const SkPicture* picture, SkBitmap reference)
|
| + : CpuTask(parent)
|
| + , fPicture(picture)
|
| + , fReference(reference)
|
| + , fName(UnderJoin(parent.name().c_str(), "skr")) {}
|
| +
|
| + virtual bool shouldSkip() const SK_OVERRIDE { return !FLAGS_skr; }
|
| + virtual SkString name() const SK_OVERRIDE { return fName; }
|
| +
|
| + virtual void draw() SK_OVERRIDE {
|
| + SkPictureRecorder recorder;
|
| + fPicture->draw(recorder.EXPERIMENTAL_beginRecording(fPicture->width(), fPicture->height()));
|
| + SkAutoTDelete<const SkPicture> skrPicture(recorder.endRecording());
|
| +
|
| + SkBitmap bitmap;
|
| + AllocatePixels(kN32_SkColorType, fPicture->width(), fPicture->height(), &bitmap);
|
| + DrawPicture(*skrPicture, &bitmap);
|
| +
|
| + if (!BitmapsEqual(fReference, bitmap)) {
|
| + this->fail();
|
| + this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
|
| + }
|
| + }
|
| +
|
| +private:
|
| + SkAutoTUnref<const SkPicture> fPicture;
|
| + const SkBitmap fReference;
|
| + const SkString fName;
|
| +};
|
| +
|
| +
|
| +SKPTask::SKPTask(Reporter* r, TaskRunner* tr, const SkPicture* pic, SkString filename)
|
| : CpuTask(r, tr), fPicture(SkRef(pic)), fName(FileToTaskName(filename)) {}
|
|
|
| void SKPTask::draw() {
|
| SkBitmap bitmap;
|
| AllocatePixels(kN32_SkColorType, fPicture->width(), fPicture->height(), &bitmap);
|
| - DrawPicture(fPicture, &bitmap);
|
| + DrawPicture(*fPicture, &bitmap);
|
|
|
| - this->spawnChild(SkNEW_ARGS(RecordTask,
|
| - (*this, fPicture, bitmap, RecordTask::kNoOptimize_Mode)));
|
| - this->spawnChild(SkNEW_ARGS(RecordTask,
|
| - (*this, fPicture, bitmap, RecordTask::kOptimize_Mode)));
|
| this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
|
| + this->spawnChild(SkNEW_ARGS(SkrComparisonTask, (*this, fPicture.get(), bitmap)));
|
| }
|
|
|
| } // namespace DM
|
|
|