blob: bc94f73cb1791230a5362d6d299fd7ff6544be3a [file] [log] [blame]
mtklein@google.comd36522d2013-10-16 13:02:15 +00001#include "DMReplayTask.h"
2#include "DMUtil.h"
3
4#include "SkPicture.h"
5
6namespace DM {
7
8ReplayTask::ReplayTask(const char* suffix,
9 const Task& parent,
10 skiagm::GM* gm,
11 skiagm::GmResultDigest reference,
12 SkBitmap::Config config)
13 : Task(parent)
14 , fName(underJoin(parent.name().c_str(), suffix))
15 , fGM(gm)
16 , fReference(reference)
17 , fConfig(config)
18 {}
19
20void ReplayTask::draw() {
21 SkPicture picture;
22 SkCanvas* canvas = picture.beginRecording(fGM->width(), fGM->height(), 0 /*flags*/);
23
24 canvas->concat(fGM->getInitialTransform());
25 fGM->draw(canvas);
26 canvas->flush();
27
28 picture.endRecording();
29
30 SkBitmap bitmap;
31 bitmap.setConfig(fConfig, fGM->width(), fGM->height());
32 bitmap.allocPixels();
33 bitmap.eraseColor(0x00000000);
34
35 SkCanvas replay(bitmap);
36 replay.drawPicture(picture);
37 replay.flush();
38
39 const skiagm::GmResultDigest replayDigest(bitmap);
40 if (!replayDigest.equals(fReference)) {
41 this->fail();
42 }
43}
44
45bool ReplayTask::shouldSkip() const {
46 return fGM->getFlags() & skiagm::GM::kGPUOnly_Flag ||
47 fGM->getFlags() & skiagm::GM::kSkipPicture_Flag;
48}
49
50} // namespace