Chromium Code Reviews| 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: |
|
robertphillips
2014/06/24 18:34:46
const SkBitmap& reference ?
mtklein
2014/06/24 19:17:03
This one's tricky. I've always found it more help
|
| + 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 |