| #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) |
| : CpuTask(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) |
| : CpuTask(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) |
| : GpuTask(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 kGPUDisabled || !fBench->isSuitableFor(SkBenchmark::kGPU_Backend); |
| } |
| |
| static void draw_raster(SkBenchmark* bench, SkColorType colorType) { |
| SkBitmap bitmap; |
| AllocatePixels(colorType, bench->getSize().x(), bench->getSize().y(), &bitmap); |
| SkCanvas canvas(bitmap); |
| |
| bench->preDraw(); |
| bench->draw(1, &canvas); |
| bench->postDraw(); |
| } |
| |
| void NonRenderingBenchTask::draw() { |
| draw_raster(fBench.get(), kN32_SkColorType); |
| } |
| |
| void CpuBenchTask::draw() { |
| draw_raster(fBench.get(), fColorType); |
| } |
| |
| void GpuBenchTask::draw(GrContextFactory* grFactory) { |
| SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(), |
| fBench->getSize().y(), |
| kN32_SkColorType, |
| kPremul_SkAlphaType); |
| SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount)); |
| |
| fBench->preDraw(); |
| fBench->draw(1, surface->getCanvas()); |
| fBench->postDraw(); |
| } |
| |
| } // namespace DM |