blob: 5534ba4a43c8baa1a152b86d261323a1085d9f21 [file] [log] [blame]
mtklein@google.comd36522d2013-10-16 13:02:15 +00001#include "DMCpuTask.h"
2#include "DMReplayTask.h"
3#include "DMUtil.h"
4#include "SkCommandLineFlags.h"
5
6DEFINE_bool(replay, false, "If true, run replay tests for each CpuTask.");
7// TODO(mtklein): add the other various options
8
9namespace DM {
10
11CpuTask::CpuTask(const char* name,
12 Reporter* reporter,
13 TaskRunner* taskRunner,
14 const skiagm::ExpectationsSource& expectations,
15 skiagm::GMRegistry::Factory gmFactory,
16 SkBitmap::Config config)
17 : Task(reporter, taskRunner)
18 , fGMFactory(gmFactory)
19 , fGM(fGMFactory(NULL))
20 , fName(underJoin(fGM->shortName(), name))
21 , fExpectations(expectations.get(png(fName).c_str()))
22 , fConfig(config)
23 {}
24
25void CpuTask::draw() {
26 SkBitmap bitmap;
27 bitmap.setConfig(fConfig, fGM->width(), fGM->height());
28 bitmap.allocPixels();
29 bitmap.eraseColor(0x00000000);
30 SkCanvas canvas(bitmap);
31
32 canvas.concat(fGM->getInitialTransform());
33 fGM->draw(&canvas);
34 canvas.flush();
35
36 const skiagm::GmResultDigest digest(bitmap);
37 if (!meetsExpectations(fExpectations, digest)) {
38 this->fail();
39 }
40
41 if (FLAGS_replay) {
42 this->spawnChild(SkNEW_ARGS(ReplayTask,
43 ("replay", *this, fGMFactory(NULL), digest, fConfig)));
44 }
45}
46
47bool CpuTask::shouldSkip() const {
48 if (SkBitmap::kRGB_565_Config == fConfig && (fGM->getFlags() & skiagm::GM::kSkip565_Flag)) {
49 return true;
50 }
51 if (fGM->getFlags() & skiagm::GM::kGPUOnly_Flag) {
52 return true;
53 }
54 return false;
55}
56
57} // namespace DM