blob: 1b69e10685bd1f7429b9aeffb8773338d4398d59 [file] [log] [blame]
/*
* Copyright 2023 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "src/base/SkTime.h"
#include "tools/flags/CommandLineFlags.h"
#include "tools/testrunners/benchmark/target/BenchmarkTarget.h"
DECLARE_int(loops);
DECLARE_int(maxLoops);
void BenchmarkTarget::setup() const { fBenchmark->perCanvasPreDraw(getCanvas()); }
double BenchmarkTarget::time(int loops) const {
SkCanvas* canvas = getCanvas();
if (canvas) {
canvas->clear(SK_ColorWHITE);
}
fBenchmark->preDraw(canvas);
double start = nowMs();
canvas = onBeforeDraw(canvas);
fBenchmark->draw(loops, canvas);
onAfterDraw();
double elapsed = nowMs() - start;
fBenchmark->postDraw(canvas);
return elapsed;
}
void BenchmarkTarget::tearDown() const { fBenchmark->perCanvasPostDraw(getCanvas()); }
SkCanvas* BenchmarkTarget::getCanvas() const {
if (!fSurfaceManager || !fSurfaceManager->getSurface()) {
return nullptr; // The NonRenderingBenchmarkTarget has a null SurfaceManager.
}
return fSurfaceManager->getSurface()->getCanvas();
}
Benchmark* BenchmarkTarget::getBenchmark() const { return fBenchmark; }
std::map<std::string, std::string> BenchmarkTarget::getKeyValuePairs(std::string cpuName,
std::string gpuName) const {
SkASSERT_RELEASE(fSurfaceManager);
return fSurfaceManager->getPerfKeyValuePairs(cpuName, gpuName);
}
SurfaceManager::CpuOrGpu BenchmarkTarget::isCpuOrGpuBound() const {
SkASSERT_RELEASE(fSurfaceManager);
return fSurfaceManager->isCpuOrGpuBound();
}
double BenchmarkTarget::nowMs() const { return SkTime::GetNSecs() * 1e-6; }