blob: 8241ac5aeb92a218d840af36c53741bee92efd6b [file] [log] [blame]
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +00001#include "DMRecordTask.h"
2#include "DMUtil.h"
3#include "DMWriteTask.h"
4#include "SkCommandLineFlags.h"
commit-bot@chromium.org93043bc2014-05-06 19:48:02 +00005#include "SkRecord.h"
6#include "SkRecordDraw.h"
7#include "SkRecordOpts.h"
8#include "SkRecorder.h"
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +00009
commit-bot@chromium.org5aacfe92014-05-02 21:23:52 +000010DEFINE_bool(skr, true, "If true, run SKR tests.");
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000011
12namespace DM {
13
commit-bot@chromium.org90b5a2a2014-05-14 17:55:32 +000014RecordTask::RecordTask(const Task& parent, skiagm::GM* gm, SkBitmap reference, Mode mode)
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000015 : CpuTask(parent)
commit-bot@chromium.org90b5a2a2014-05-14 17:55:32 +000016 , fOptimize(mode == kOptimize_Mode)
17 , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt"))
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000018 , fGM(gm)
19 , fReference(reference)
commit-bot@chromium.org90b5a2a2014-05-14 17:55:32 +000020 {}
21
22RecordTask::RecordTask(const Task& parent, SkPicture* pic, SkBitmap reference, Mode 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)
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000028 {}
29
30void RecordTask::draw() {
commit-bot@chromium.org90b5a2a2014-05-14 17:55:32 +000031 // Record into an SkRecord.
commit-bot@chromium.org93043bc2014-05-06 19:48:02 +000032 SkRecord record;
33 SkRecorder recorder(SkRecorder::kWriteOnly_Mode, &record,
34 fReference.width(), fReference.height());
commit-bot@chromium.org90b5a2a2014-05-14 17:55:32 +000035
36 if (fGM.get()) {
37 recorder.concat(fGM->getInitialTransform());
38 fGM->draw(&recorder);
39 } else {
40 fPicture->draw(&recorder);
41 }
42
commit-bot@chromium.org93043bc2014-05-06 19:48:02 +000043
44 if (fOptimize) {
45 SkRecordOptimize(&record);
46 }
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000047
48 // Draw the SkRecord back into a bitmap.
49 SkBitmap bitmap;
commit-bot@chromium.org26642072014-05-15 17:33:31 +000050 AllocatePixels(fReference, &bitmap);
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000051 SkCanvas target(bitmap);
commit-bot@chromium.org93043bc2014-05-06 19:48:02 +000052 SkRecordDraw(record, &target);
commit-bot@chromium.orge3ff5582014-04-01 16:24:06 +000053
54 if (!BitmapsEqual(bitmap, fReference)) {
55 this->fail();
56 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
57 }
58}
59
60bool RecordTask::shouldSkip() const {
61 return !FLAGS_skr;
62}
63
64} // namespace DM