OLD | NEW |
---|---|
1 #include "DMRecordTask.h" | |
2 #include "DMSKPTask.h" | 1 #include "DMSKPTask.h" |
3 #include "DMUtil.h" | 2 #include "DMUtil.h" |
4 #include "DMWriteTask.h" | 3 #include "DMWriteTask.h" |
5 | 4 |
5 #include "SkCommandLineFlags.h" | |
6 #include "SkPictureRecorder.h" | |
7 | |
8 DECLARE_bool(skr); // in DMReplayTask.cpp | |
9 | |
6 namespace DM { | 10 namespace DM { |
7 | 11 |
8 SKPTask::SKPTask(Reporter* r, TaskRunner* tr, SkPicture* pic, SkString filename) | 12 // Test that an SkPicture plays back the same when re-recorded into an |
13 // SkPicture backed by SkRecord. | |
14 class SkrComparisonTask : public CpuTask { | |
15 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
| |
16 SkrComparisonTask(const Task& parent, const SkPicture* picture, SkBitmap ref erence) | |
17 : CpuTask(parent) | |
18 , fPicture(picture) | |
19 , fReference(reference) | |
20 , fName(UnderJoin(parent.name().c_str(), "skr")) {} | |
21 | |
22 virtual bool shouldSkip() const SK_OVERRIDE { return !FLAGS_skr; } | |
23 virtual SkString name() const SK_OVERRIDE { return fName; } | |
24 | |
25 virtual void draw() SK_OVERRIDE { | |
26 SkPictureRecorder recorder; | |
27 fPicture->draw(recorder.EXPERIMENTAL_beginRecording(fPicture->width(), f Picture->height())); | |
28 SkAutoTDelete<const SkPicture> skrPicture(recorder.endRecording()); | |
29 | |
30 SkBitmap bitmap; | |
31 AllocatePixels(kN32_SkColorType, fPicture->width(), fPicture->height(), &bitmap); | |
32 DrawPicture(*skrPicture, &bitmap); | |
33 | |
34 if (!BitmapsEqual(fReference, bitmap)) { | |
35 this->fail(); | |
36 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); | |
37 } | |
38 } | |
39 | |
40 private: | |
41 SkAutoTUnref<const SkPicture> fPicture; | |
42 const SkBitmap fReference; | |
43 const SkString fName; | |
44 }; | |
45 | |
46 | |
47 SKPTask::SKPTask(Reporter* r, TaskRunner* tr, const SkPicture* pic, SkString fil ename) | |
9 : CpuTask(r, tr), fPicture(SkRef(pic)), fName(FileToTaskName(filename)) {} | 48 : CpuTask(r, tr), fPicture(SkRef(pic)), fName(FileToTaskName(filename)) {} |
10 | 49 |
11 void SKPTask::draw() { | 50 void SKPTask::draw() { |
12 SkBitmap bitmap; | 51 SkBitmap bitmap; |
13 AllocatePixels(kN32_SkColorType, fPicture->width(), fPicture->height(), &bit map); | 52 AllocatePixels(kN32_SkColorType, fPicture->width(), fPicture->height(), &bit map); |
14 DrawPicture(fPicture, &bitmap); | 53 DrawPicture(*fPicture, &bitmap); |
15 | 54 |
16 this->spawnChild(SkNEW_ARGS(RecordTask, | |
17 (*this, fPicture, bitmap, RecordTask::kNoOptimiz e_Mode))); | |
18 this->spawnChild(SkNEW_ARGS(RecordTask, | |
19 (*this, fPicture, bitmap, RecordTask::kOptimize_ Mode))); | |
20 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); | 55 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); |
56 this->spawnChild(SkNEW_ARGS(SkrComparisonTask, (*this, fPicture.get(), bitma p))); | |
21 } | 57 } |
22 | 58 |
23 } // namespace DM | 59 } // namespace DM |
OLD | NEW |