OLD | NEW |
1 #include "DMRecordTask.h" | 1 #include "DMRecordTask.h" |
2 #include "DMUtil.h" | 2 #include "DMUtil.h" |
3 #include "DMWriteTask.h" | 3 #include "DMWriteTask.h" |
4 #include "SkCommandLineFlags.h" | 4 #include "SkCommandLineFlags.h" |
5 #include "SkRecord.h" | 5 #include "SkRecord.h" |
6 #include "SkRecordDraw.h" | 6 #include "SkRecordDraw.h" |
7 #include "SkRecordOpts.h" | 7 #include "SkRecordOpts.h" |
8 #include "SkRecorder.h" | 8 #include "SkRecorder.h" |
9 | 9 |
10 DEFINE_bool(skr, true, "If true, run SKR tests."); | 10 DEFINE_bool(skr, true, "If true, run SKR tests."); |
11 | 11 |
12 namespace DM { | 12 namespace DM { |
13 | 13 |
14 RecordTask::RecordTask(const Task& parent, skiagm::GM* gm, SkBitmap reference, b
ool optimize) | 14 RecordTask::RecordTask(const Task& parent, skiagm::GM* gm, SkBitmap reference, M
ode mode) |
15 : CpuTask(parent) | 15 : CpuTask(parent) |
16 , fName(UnderJoin(parent.name().c_str(), optimize ? "skr" : "skr-noopt")) | 16 , fOptimize(mode == kOptimize_Mode) |
| 17 , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt")) |
17 , fGM(gm) | 18 , fGM(gm) |
18 , fReference(reference) | 19 , fReference(reference) |
19 , fOptimize(optimize) | 20 {} |
| 21 |
| 22 RecordTask::RecordTask(const Task& parent, SkPicture* pic, SkBitmap reference, M
ode mode) |
| 23 : CpuTask(parent) |
| 24 , fOptimize(mode == kOptimize_Mode) |
| 25 , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt")) |
| 26 , fPicture(SkRef(pic)) |
| 27 , fReference(reference) |
20 {} | 28 {} |
21 | 29 |
22 void RecordTask::draw() { | 30 void RecordTask::draw() { |
23 // Record the GM into an SkRecord. | 31 // Record into an SkRecord. |
24 SkRecord record; | 32 SkRecord record; |
25 SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, | 33 SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record, |
26 fReference.width(), fReference.height()); | 34 fReference.width(), fReference.height()); |
27 recorder.concat(fGM->getInitialTransform()); | 35 |
28 fGM->draw(&recorder); | 36 if (fGM.get()) { |
| 37 recorder.concat(fGM->getInitialTransform()); |
| 38 fGM->draw(&recorder); |
| 39 } else { |
| 40 fPicture->draw(&recorder); |
| 41 } |
| 42 |
29 | 43 |
30 if (fOptimize) { | 44 if (fOptimize) { |
31 SkRecordOptimize(&record); | 45 SkRecordOptimize(&record); |
32 } | 46 } |
33 | 47 |
34 // Draw the SkRecord back into a bitmap. | 48 // Draw the SkRecord back into a bitmap. |
35 SkBitmap bitmap; | 49 SkBitmap bitmap; |
36 SetupBitmap(fReference.colorType(), fGM.get(), &bitmap); | 50 if (fGM.get()) { |
| 51 SetupBitmap(fReference.colorType(), fGM.get(), &bitmap); |
| 52 } else { |
| 53 SetupBitmap(fReference.colorType(), *fPicture, &bitmap); |
| 54 } |
37 SkCanvas target(bitmap); | 55 SkCanvas target(bitmap); |
38 SkRecordDraw(record, &target); | 56 SkRecordDraw(record, &target); |
39 | 57 |
40 if (!BitmapsEqual(bitmap, fReference)) { | 58 if (!BitmapsEqual(bitmap, fReference)) { |
41 this->fail(); | 59 this->fail(); |
42 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); | 60 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); |
43 } | 61 } |
44 } | 62 } |
45 | 63 |
46 bool RecordTask::shouldSkip() const { | 64 bool RecordTask::shouldSkip() const { |
47 return !FLAGS_skr; | 65 return !FLAGS_skr; |
48 } | 66 } |
49 | 67 |
50 } // namespace DM | 68 } // namespace DM |
OLD | NEW |