1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2014 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "bench/GMBench.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrRecordingContext.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrRecordingContextPriv.h" 12*c8dee2aaSAndroid Build Coastguard Worker GMBench(std::unique_ptr<skiagm::GM> gm)13*c8dee2aaSAndroid Build Coastguard WorkerGMBench::GMBench(std::unique_ptr<skiagm::GM> gm) : fGM(std::move(gm)) { 14*c8dee2aaSAndroid Build Coastguard Worker fGM->setMode(skiagm::GM::kBench_Mode); 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker fName.printf("GM_%s", fGM->getName().c_str()); 17*c8dee2aaSAndroid Build Coastguard Worker } 18*c8dee2aaSAndroid Build Coastguard Worker onGetName()19*c8dee2aaSAndroid Build Coastguard Workerconst char* GMBench::onGetName() { 20*c8dee2aaSAndroid Build Coastguard Worker return fName.c_str(); 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker isSuitableFor(Backend backend)23*c8dee2aaSAndroid Build Coastguard Workerbool GMBench::isSuitableFor(Backend backend) { 24*c8dee2aaSAndroid Build Coastguard Worker return Backend::kNonRendering != backend; 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker onPerCanvasPreDraw(SkCanvas * canvas)27*c8dee2aaSAndroid Build Coastguard Workervoid GMBench::onPerCanvasPreDraw(SkCanvas* canvas) { 28*c8dee2aaSAndroid Build Coastguard Worker SkString msg; 29*c8dee2aaSAndroid Build Coastguard Worker if (fGM->gpuSetup(canvas, &msg) != skiagm::DrawResult::kOk) { 30*c8dee2aaSAndroid Build Coastguard Worker fGpuSetupFailed = true; 31*c8dee2aaSAndroid Build Coastguard Worker } 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker fGM->onceBeforeDraw(); 34*c8dee2aaSAndroid Build Coastguard Worker } 35*c8dee2aaSAndroid Build Coastguard Worker onPerCanvasPostDraw(SkCanvas *)36*c8dee2aaSAndroid Build Coastguard Workervoid GMBench::onPerCanvasPostDraw(SkCanvas*) { 37*c8dee2aaSAndroid Build Coastguard Worker fGM->gpuTeardown(); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker // The same GM will be reused with multiple GrContexts. Let the next GrContext start 40*c8dee2aaSAndroid Build Coastguard Worker // afresh. 41*c8dee2aaSAndroid Build Coastguard Worker fGpuSetupFailed = false; 42*c8dee2aaSAndroid Build Coastguard Worker } 43*c8dee2aaSAndroid Build Coastguard Worker onDraw(int loops,SkCanvas * canvas)44*c8dee2aaSAndroid Build Coastguard Workervoid GMBench::onDraw(int loops, SkCanvas* canvas) { 45*c8dee2aaSAndroid Build Coastguard Worker if (fGpuSetupFailed) { 46*c8dee2aaSAndroid Build Coastguard Worker return; 47*c8dee2aaSAndroid Build Coastguard Worker } 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker fGM->drawBackground(canvas); 50*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < loops; ++i) { 51*c8dee2aaSAndroid Build Coastguard Worker fGM->drawContent(canvas); 52*c8dee2aaSAndroid Build Coastguard Worker } 53*c8dee2aaSAndroid Build Coastguard Worker } 54*c8dee2aaSAndroid Build Coastguard Worker onGetSize()55*c8dee2aaSAndroid Build Coastguard WorkerSkISize GMBench::onGetSize() { 56*c8dee2aaSAndroid Build Coastguard Worker return fGM->getISize(); 57*c8dee2aaSAndroid Build Coastguard Worker } 58