blob: 9bdbbf29744c0f1d08943ebd75b9d6f7ff47008d [file] [log] [blame]
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +00001#include "DMBenchTask.h"
2#include "DMUtil.h"
3#include "SkSurface.h"
4
5namespace DM {
6
7static SkString bench_name(const char* name, const char* config) {
8 SkString result("bench ");
9 result.appendf("%s_%s", name, config);
10 return result;
11}
12
13NonRenderingBenchTask::NonRenderingBenchTask(const char* config,
14 Reporter* reporter,
15 TaskRunner* tasks,
16 BenchRegistry::Factory factory)
commit-bot@chromium.orgef57b7e2014-02-28 20:31:31 +000017 : CpuTask(reporter, tasks)
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000018 , fBench(factory(NULL))
19 , fName(bench_name(fBench->getName(), config)) {}
20
21CpuBenchTask::CpuBenchTask(const char* config,
22 Reporter* reporter,
23 TaskRunner* tasks,
24 BenchRegistry::Factory factory,
25 SkColorType colorType)
commit-bot@chromium.orgef57b7e2014-02-28 20:31:31 +000026 : CpuTask(reporter, tasks)
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000027 , fBench(factory(NULL))
28 , fName(bench_name(fBench->getName(), config))
29 , fColorType(colorType) {}
30
31GpuBenchTask::GpuBenchTask(const char* config,
32 Reporter* reporter,
33 TaskRunner* tasks,
34 BenchRegistry::Factory factory,
35 GrContextFactory::GLContextType contextType,
kkinnunen80549fc2014-06-30 06:36:31 -070036 GrGLStandard gpuAPI,
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000037 int sampleCount)
commit-bot@chromium.orgef57b7e2014-02-28 20:31:31 +000038 : GpuTask(reporter, tasks)
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000039 , fBench(factory(NULL))
40 , fName(bench_name(fBench->getName(), config))
41 , fContextType(contextType)
kkinnunen80549fc2014-06-30 06:36:31 -070042 , fGpuAPI(gpuAPI)
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000043 , fSampleCount(sampleCount) {}
44
45bool NonRenderingBenchTask::shouldSkip() const {
tfarinaf168b862014-06-19 12:32:29 -070046 return !fBench->isSuitableFor(Benchmark::kNonRendering_Backend);
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000047}
48
49bool CpuBenchTask::shouldSkip() const {
tfarinaf168b862014-06-19 12:32:29 -070050 return !fBench->isSuitableFor(Benchmark::kRaster_Backend);
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000051}
52
53bool GpuBenchTask::shouldSkip() const {
tfarinaf168b862014-06-19 12:32:29 -070054 return kGPUDisabled || !fBench->isSuitableFor(Benchmark::kGPU_Backend);
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000055}
56
tfarinaf168b862014-06-19 12:32:29 -070057static void draw_raster(Benchmark* bench, SkColorType colorType) {
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000058 SkBitmap bitmap;
commit-bot@chromium.org26642072014-05-15 17:33:31 +000059 AllocatePixels(colorType, bench->getSize().x(), bench->getSize().y(), &bitmap);
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000060 SkCanvas canvas(bitmap);
61
62 bench->preDraw();
63 bench->draw(1, &canvas);
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000064}
65
66void NonRenderingBenchTask::draw() {
commit-bot@chromium.org28fcae22014-04-11 17:15:40 +000067 draw_raster(fBench.get(), kN32_SkColorType);
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000068}
69
70void CpuBenchTask::draw() {
71 draw_raster(fBench.get(), fColorType);
72}
73
commit-bot@chromium.orgef57b7e2014-02-28 20:31:31 +000074void GpuBenchTask::draw(GrContextFactory* grFactory) {
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000075 SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
76 fBench->getSize().y(),
commit-bot@chromium.org28fcae22014-04-11 17:15:40 +000077 kN32_SkColorType,
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000078 kPremul_SkAlphaType);
kkinnunen80549fc2014-06-30 06:36:31 -070079 SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, fGpuAPI, info,
80 fSampleCount));
81 if (!surface) {
82 this->fail("Could not create context for the config and the api.");
83 return;
84 }
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000085 fBench->preDraw();
86 fBench->draw(1, surface->getCanvas());
commit-bot@chromium.org38aeb0f2014-02-26 23:01:57 +000087}
88
89} // namespace DM