Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / dm / DMCpuGMTask.cpp
1 #include "DMCpuGMTask.h"
2 #include "DMExpectationsTask.h"
3 #include "DMPipeTask.h"
4 #include "DMQuiltTask.h"
5 #include "DMSerializeTask.h"
6 #include "DMUtil.h"
7 #include "DMWriteTask.h"
8
9 namespace DM {
10
11 CpuGMTask::CpuGMTask(const char* config,
12                      Reporter* reporter,
13                      TaskRunner* taskRunner,
14                      skiagm::GMRegistry::Factory gmFactory,
15                      const Expectations& expectations,
16                      SkColorType colorType)
17     : CpuTask(reporter, taskRunner)
18     , fGMFactory(gmFactory)
19     , fGM(fGMFactory(NULL))
20     , fName(UnderJoin(fGM->getName(), config))
21     , fExpectations(expectations)
22     , fColorType(colorType)
23     {}
24
25 void CpuGMTask::draw() {
26     SkBitmap bm;
27     AllocatePixels(fColorType, fGM->getISize().width(), fGM->getISize().height(), &bm);
28
29     SkCanvas canvas(bm);
30     canvas.concat(fGM->getInitialTransform());
31     fGM->draw(&canvas);
32     canvas.flush();
33
34 #define SPAWN(ChildTask, ...) this->spawnChild(SkNEW_ARGS(ChildTask, (*this, __VA_ARGS__)))
35     SPAWN(ExpectationsTask, fExpectations, bm);
36
37     SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kInProcess_Mode);
38     SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kCrossProcess_Mode);
39     SPAWN(PipeTask, fGMFactory(NULL), bm, PipeTask::kSharedAddress_Mode);
40
41     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kNone_BBH,     QuiltTask::kDefault_Backend);
42     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH,    QuiltTask::kDefault_Backend);
43     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kQuadTree_BBH, QuiltTask::kDefault_Backend);
44     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kTileGrid_BBH, QuiltTask::kDefault_Backend);
45
46     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kNone_BBH,     QuiltTask::kSkRecord_Backend);
47     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kRTree_BBH,    QuiltTask::kSkRecord_Backend);
48     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kQuadTree_BBH, QuiltTask::kSkRecord_Backend);
49     SPAWN(QuiltTask, fGMFactory(NULL), bm, QuiltTask::kTileGrid_BBH, QuiltTask::kSkRecord_Backend);
50
51     SPAWN(SerializeTask, fGMFactory(NULL), bm, SerializeTask::kNormal_Mode);
52     SPAWN(SerializeTask, fGMFactory(NULL), bm, SerializeTask::kSkRecord_Mode);
53
54     SPAWN(WriteTask, bm);
55 #undef SPAWN
56 }
57
58 bool CpuGMTask::shouldSkip() const {
59     if (kRGB_565_SkColorType == fColorType && (fGM->getFlags() & skiagm::GM::kSkip565_Flag)) {
60         return true;
61     }
62     if (fGM->getFlags() & skiagm::GM::kGPUOnly_Flag) {
63         return true;
64     }
65     return false;
66 }
67
68 }  // namespace DM