1 #include "DMGpuGMTask.h"
2
3 #include "DMExpectationsTask.h"
4 #include "DMUtil.h"
5 #include "DMWriteTask.h"
6 #include "SkCommandLineFlags.h"
7 #include "SkSurface.h"
8 #include "SkTLS.h"
9
10 namespace DM {
11
GpuGMTask(const char * config,Reporter * reporter,TaskRunner * taskRunner,skiagm::GMRegistry::Factory gmFactory,const Expectations & expectations,GrContextFactory::GLContextType contextType,int sampleCount)12 GpuGMTask::GpuGMTask(const char* config,
13 Reporter* reporter,
14 TaskRunner* taskRunner,
15 skiagm::GMRegistry::Factory gmFactory,
16 const Expectations& expectations,
17 GrContextFactory::GLContextType contextType,
18 int sampleCount)
19 : GpuTask(reporter, taskRunner)
20 , fGM(gmFactory(NULL))
21 , fName(UnderJoin(fGM->getName(), config))
22 , fExpectations(expectations)
23 , fContextType(contextType)
24 , fSampleCount(sampleCount)
25 {}
26
draw(GrContextFactory * grFactory)27 void GpuGMTask::draw(GrContextFactory* grFactory) {
28 SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()),
29 SkScalarCeilToInt(fGM->height()),
30 kN32_SkColorType,
31 kPremul_SkAlphaType);
32 SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
33 SkCanvas* canvas = surface->getCanvas();
34
35 canvas->concat(fGM->getInitialTransform());
36 fGM->draw(canvas);
37 canvas->flush();
38
39 SkBitmap bitmap;
40 bitmap.setInfo(info);
41 canvas->readPixels(&bitmap, 0, 0);
42
43 this->spawnChild(SkNEW_ARGS(ExpectationsTask, (*this, fExpectations, bitmap)));
44 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
45 }
46
shouldSkip() const47 bool GpuGMTask::shouldSkip() const {
48 return kGPUDisabled || SkToBool(fGM->getFlags() & skiagm::GM::kSkipGPU_Flag);
49 }
50
51 } // namespace DM
52