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