1 #include "DMGpuGMTask.h"
3 #include "DMWriteTask.h"
4 #include "SkCommonFlags.h"
10 GpuGMTask::GpuGMTask(const char* config,
12 TaskRunner* taskRunner,
13 skiagm::GMRegistry::Factory gmFactory,
14 GrContextFactory::GLContextType contextType,
17 : GpuTask(reporter, taskRunner)
18 , fGM(gmFactory(NULL))
19 , fName(UnderJoin(fGM->getName(), config))
20 , fContextType(contextType)
22 , fSampleCount(sampleCount)
25 static bool gAlreadyWarned[GrContextFactory::kGLContextTypeCnt][kGrGLStandardCnt];
27 void GpuGMTask::draw(GrContextFactory* grFactory) {
28 SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()),
29 SkScalarCeilToInt(fGM->height()),
32 SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, fGpuAPI, info,
35 if (!gAlreadyWarned[fContextType][fGpuAPI]) {
36 SkDebugf("FYI: couldn't create GPU context, type %d API %d. Will skip.\n",
37 fContextType, fGpuAPI);
38 gAlreadyWarned[fContextType][fGpuAPI] = true;
42 SkCanvas* canvas = surface->getCanvas();
43 CanvasPreflight(canvas);
45 canvas->concat(fGM->getInitialTransform());
48 #if GR_CACHE_STATS && SK_SUPPORT_GPU
49 if (FLAGS_veryVerbose) {
50 grFactory->get(fContextType)->printCacheStats();
56 canvas->readPixels(&bitmap, 0, 0);
58 this->spawnChild(SkNEW_ARGS(WriteTask, (*this, "GM", bitmap)));
61 bool GpuGMTask::shouldSkip() const {
62 return kGPUDisabled || SkToBool(fGM->getFlags() & skiagm::GM::kSkipGPU_Flag);