1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 Google LLC 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 "src/base/SkTime.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "tools/flags/CommandLineFlags.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "tools/testrunners/benchmark/target/BenchmarkTarget.h" 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker DECLARE_int(loops); 13*c8dee2aaSAndroid Build Coastguard Worker DECLARE_int(maxLoops); 14*c8dee2aaSAndroid Build Coastguard Worker setup() const15*c8dee2aaSAndroid Build Coastguard Workervoid BenchmarkTarget::setup() const { fBenchmark->perCanvasPreDraw(getCanvas()); } 16*c8dee2aaSAndroid Build Coastguard Worker time(int loops) const17*c8dee2aaSAndroid Build Coastguard Workerdouble BenchmarkTarget::time(int loops) const { 18*c8dee2aaSAndroid Build Coastguard Worker SkCanvas* canvas = getCanvas(); 19*c8dee2aaSAndroid Build Coastguard Worker if (canvas) { 20*c8dee2aaSAndroid Build Coastguard Worker canvas->clear(SK_ColorWHITE); 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker fBenchmark->preDraw(canvas); 23*c8dee2aaSAndroid Build Coastguard Worker double start = nowMs(); 24*c8dee2aaSAndroid Build Coastguard Worker canvas = onBeforeDraw(canvas); 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker fBenchmark->draw(loops, canvas); 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker onAfterDraw(); 29*c8dee2aaSAndroid Build Coastguard Worker double elapsed = nowMs() - start; 30*c8dee2aaSAndroid Build Coastguard Worker fBenchmark->postDraw(canvas); 31*c8dee2aaSAndroid Build Coastguard Worker return elapsed; 32*c8dee2aaSAndroid Build Coastguard Worker } 33*c8dee2aaSAndroid Build Coastguard Worker tearDown() const34*c8dee2aaSAndroid Build Coastguard Workervoid BenchmarkTarget::tearDown() const { fBenchmark->perCanvasPostDraw(getCanvas()); } 35*c8dee2aaSAndroid Build Coastguard Worker getCanvas() const36*c8dee2aaSAndroid Build Coastguard WorkerSkCanvas* BenchmarkTarget::getCanvas() const { 37*c8dee2aaSAndroid Build Coastguard Worker if (!fSurfaceManager || !fSurfaceManager->getSurface()) { 38*c8dee2aaSAndroid Build Coastguard Worker return nullptr; // The NonRenderingBenchmarkTarget has a null SurfaceManager. 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker return fSurfaceManager->getSurface()->getCanvas(); 41*c8dee2aaSAndroid Build Coastguard Worker } 42*c8dee2aaSAndroid Build Coastguard Worker getBenchmark() const43*c8dee2aaSAndroid Build Coastguard WorkerBenchmark* BenchmarkTarget::getBenchmark() const { return fBenchmark; } 44*c8dee2aaSAndroid Build Coastguard Worker getKeyValuePairs(std::string cpuName,std::string gpuName) const45*c8dee2aaSAndroid Build Coastguard Workerstd::map<std::string, std::string> BenchmarkTarget::getKeyValuePairs(std::string cpuName, 46*c8dee2aaSAndroid Build Coastguard Worker std::string gpuName) const { 47*c8dee2aaSAndroid Build Coastguard Worker SkASSERT_RELEASE(fSurfaceManager); 48*c8dee2aaSAndroid Build Coastguard Worker return fSurfaceManager->getPerfKeyValuePairs(cpuName, gpuName); 49*c8dee2aaSAndroid Build Coastguard Worker } 50*c8dee2aaSAndroid Build Coastguard Worker isCpuOrGpuBound() const51*c8dee2aaSAndroid Build Coastguard WorkerSurfaceManager::CpuOrGpu BenchmarkTarget::isCpuOrGpuBound() const { 52*c8dee2aaSAndroid Build Coastguard Worker SkASSERT_RELEASE(fSurfaceManager); 53*c8dee2aaSAndroid Build Coastguard Worker return fSurfaceManager->isCpuOrGpuBound(); 54*c8dee2aaSAndroid Build Coastguard Worker } 55*c8dee2aaSAndroid Build Coastguard Worker nowMs() const56*c8dee2aaSAndroid Build Coastguard Workerdouble BenchmarkTarget::nowMs() const { return SkTime::GetNSecs() * 1e-6; } 57