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 10namespace DM { 11 12GpuGMTask::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 27void 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 47bool GpuGMTask::shouldSkip() const { 48 return kGPUDisabled || SkToBool(fGM->getFlags() & skiagm::GM::kSkipGPU_Flag); 49} 50 51} // namespace DM 52