| Index: dm/DMBenchTask.cpp
|
| diff --git a/dm/DMBenchTask.cpp b/dm/DMBenchTask.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4e251de2e9e1a69383dccaa4ab79edaaa22c092a
|
| --- /dev/null
|
| +++ b/dm/DMBenchTask.cpp
|
| @@ -0,0 +1,86 @@
|
| +#include "DMBenchTask.h"
|
| +#include "DMUtil.h"
|
| +#include "SkSurface.h"
|
| +
|
| +namespace DM {
|
| +
|
| +static SkString bench_name(const char* name, const char* config) {
|
| + SkString result("bench ");
|
| + result.appendf("%s_%s", name, config);
|
| + return result;
|
| +}
|
| +
|
| +NonRenderingBenchTask::NonRenderingBenchTask(const char* config,
|
| + Reporter* reporter,
|
| + TaskRunner* tasks,
|
| + BenchRegistry::Factory factory)
|
| + : Task(reporter, tasks)
|
| + , fBench(factory(NULL))
|
| + , fName(bench_name(fBench->getName(), config)) {}
|
| +
|
| +CpuBenchTask::CpuBenchTask(const char* config,
|
| + Reporter* reporter,
|
| + TaskRunner* tasks,
|
| + BenchRegistry::Factory factory,
|
| + SkColorType colorType)
|
| + : Task(reporter, tasks)
|
| + , fBench(factory(NULL))
|
| + , fName(bench_name(fBench->getName(), config))
|
| + , fColorType(colorType) {}
|
| +
|
| +GpuBenchTask::GpuBenchTask(const char* config,
|
| + Reporter* reporter,
|
| + TaskRunner* tasks,
|
| + BenchRegistry::Factory factory,
|
| + GrContextFactory::GLContextType contextType,
|
| + int sampleCount)
|
| + : Task(reporter, tasks)
|
| + , fBench(factory(NULL))
|
| + , fName(bench_name(fBench->getName(), config))
|
| + , fContextType(contextType)
|
| + , fSampleCount(sampleCount) {}
|
| +
|
| +bool NonRenderingBenchTask::shouldSkip() const {
|
| + return !fBench->isSuitableFor(SkBenchmark::kNonRendering_Backend);
|
| +}
|
| +
|
| +bool CpuBenchTask::shouldSkip() const {
|
| + return !fBench->isSuitableFor(SkBenchmark::kRaster_Backend);
|
| +}
|
| +
|
| +bool GpuBenchTask::shouldSkip() const {
|
| + return !fBench->isSuitableFor(SkBenchmark::kGPU_Backend);
|
| +}
|
| +
|
| +static void draw_raster(SkBenchmark* bench, SkColorType colorType) {
|
| + SkBitmap bitmap;
|
| + SetupBitmap(colorType, bench, &bitmap);
|
| + SkCanvas canvas(bitmap);
|
| +
|
| + bench->preDraw();
|
| + bench->draw(1, &canvas);
|
| + bench->postDraw();
|
| +}
|
| +
|
| +void NonRenderingBenchTask::draw() {
|
| + draw_raster(fBench.get(), kPMColor_SkColorType);
|
| +}
|
| +
|
| +void CpuBenchTask::draw() {
|
| + draw_raster(fBench.get(), fColorType);
|
| +}
|
| +
|
| +void GpuBenchTask::draw() {
|
| + SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
|
| + fBench->getSize().y(),
|
| + kPMColor_SkColorType,
|
| + kPremul_SkAlphaType);
|
| + SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(
|
| + this->getGrContextFactory()->get(fContextType), info, fSampleCount));
|
| +
|
| + fBench->preDraw();
|
| + fBench->draw(1, surface->getCanvas());
|
| + fBench->postDraw();
|
| +}
|
| +
|
| +} // namespace DM
|
|
|