Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / dm / DMBenchTask.cpp
1 #include "DMBenchTask.h"
2 #include "DMUtil.h"
3 #include "SkSurface.h"
4
5 namespace DM {
6
7 static 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
13 NonRenderingBenchTask::NonRenderingBenchTask(const char* config,
14                                              Reporter* reporter,
15                                              TaskRunner* tasks,
16                                              BenchRegistry::Factory factory)
17     : CpuTask(reporter, tasks)
18     , fBench(factory(NULL))
19     , fName(bench_name(fBench->getName(), config)) {}
20
21 CpuBenchTask::CpuBenchTask(const char* config,
22                            Reporter* reporter,
23                            TaskRunner* tasks,
24                            BenchRegistry::Factory factory,
25                            SkColorType colorType)
26     : CpuTask(reporter, tasks)
27     , fBench(factory(NULL))
28     , fName(bench_name(fBench->getName(), config))
29     , fColorType(colorType) {}
30
31 GpuBenchTask::GpuBenchTask(const char* config,
32                            Reporter* reporter,
33                            TaskRunner* tasks,
34                            BenchRegistry::Factory factory,
35                            GrContextFactory::GLContextType contextType,
36                            int sampleCount)
37     : GpuTask(reporter, tasks)
38     , fBench(factory(NULL))
39     , fName(bench_name(fBench->getName(), config))
40     , fContextType(contextType)
41     , fSampleCount(sampleCount) {}
42
43 bool NonRenderingBenchTask::shouldSkip() const {
44     return !fBench->isSuitableFor(Benchmark::kNonRendering_Backend);
45 }
46
47 bool CpuBenchTask::shouldSkip() const {
48     return !fBench->isSuitableFor(Benchmark::kRaster_Backend);
49 }
50
51 bool GpuBenchTask::shouldSkip() const {
52     return kGPUDisabled || !fBench->isSuitableFor(Benchmark::kGPU_Backend);
53 }
54
55 static void draw_raster(Benchmark* bench, SkColorType colorType) {
56     SkBitmap bitmap;
57     AllocatePixels(colorType, bench->getSize().x(), bench->getSize().y(), &bitmap);
58     SkCanvas canvas(bitmap);
59
60     bench->preDraw();
61     bench->draw(1, &canvas);
62 }
63
64 void NonRenderingBenchTask::draw() {
65     draw_raster(fBench.get(), kN32_SkColorType);
66 }
67
68 void CpuBenchTask::draw() {
69     draw_raster(fBench.get(), fColorType);
70 }
71
72 void GpuBenchTask::draw(GrContextFactory* grFactory) {
73     SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
74                                          fBench->getSize().y(),
75                                          kN32_SkColorType,
76                                          kPremul_SkAlphaType);
77     SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, info, fSampleCount));
78
79     fBench->preDraw();
80     fBench->draw(1, surface->getCanvas());
81 }
82
83 }  // namespace DM