blob: c3767e1cb3b2ef4197a302ed59450c035a7d826a [file] [log] [blame]
keyar@chromium.org163b5672012-08-01 17:53:29 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef PictureBenchmark_DEFINED
9#define PictureBenchmark_DEFINED
10#include "SkTypes.h"
11#include "SkRefCnt.h"
12#include "PictureRenderer.h"
13
keyar@chromium.org77a55222012-08-20 15:03:47 +000014class BenchTimer;
scroggo@google.com9a412522012-09-07 15:21:18 +000015class SkBenchLogger;
keyar@chromium.org163b5672012-08-01 17:53:29 +000016class SkPicture;
17class SkString;
18
19namespace sk_tools {
20
21class PictureBenchmark : public SkRefCnt {
22public:
scroggo@google.com9a412522012-09-07 15:21:18 +000023 PictureBenchmark()
24 : fRepeats(1)
25 , fLogger(NULL) {}
26
27 void run(SkPicture* pict);
keyar@chromium.org163b5672012-08-01 17:53:29 +000028
29 void setRepeats(int repeats) {
30 fRepeats = repeats;
31 }
32
keyar@chromium.orgc81686c2012-08-20 15:04:04 +000033 void setDeviceType(PictureRenderer::SkDeviceTypes deviceType) {
34 sk_tools::PictureRenderer* renderer = getRenderer();
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000035
36 if (renderer != NULL) {
keyar@chromium.orgc81686c2012-08-20 15:04:04 +000037 renderer->setDeviceType(deviceType);
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000038 }
39 }
40
scroggo@google.com9a412522012-09-07 15:21:18 +000041 void setLogger(SkBenchLogger* logger) { fLogger = logger; }
42
43private:
44 int fRepeats;
45 SkBenchLogger* fLogger;
46
47 void logProgress(const char msg[]);
48
49 virtual sk_tools::PictureRenderer* getRenderer() = 0;
50
keyar@chromium.org77a55222012-08-20 15:03:47 +000051 BenchTimer* setupTimer();
52
keyar@chromium.org9d696c02012-08-07 17:11:33 +000053 typedef SkRefCnt INHERITED;
keyar@chromium.org163b5672012-08-01 17:53:29 +000054};
55
scroggo@google.com9a412522012-09-07 15:21:18 +000056// TODO: Use just one PictureBenchmark with different renderers.
57
keyar@chromium.org163b5672012-08-01 17:53:29 +000058class PipePictureBenchmark : public PictureBenchmark {
keyar@chromium.org163b5672012-08-01 17:53:29 +000059private:
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000060 PipePictureRenderer fRenderer;
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000061
62 virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
63 return &fRenderer;
64 }
scroggo@google.com9a412522012-09-07 15:21:18 +000065
66 typedef PictureBenchmark INHERITED;
keyar@chromium.org163b5672012-08-01 17:53:29 +000067};
68
69class RecordPictureBenchmark : public PictureBenchmark {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000070private:
scroggo@google.com9a412522012-09-07 15:21:18 +000071 RecordPictureRenderer fRenderer;
72
73 virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
74 return &fRenderer;
75 }
76
keyar@chromium.org9d696c02012-08-07 17:11:33 +000077 typedef PictureBenchmark INHERITED;
keyar@chromium.org163b5672012-08-01 17:53:29 +000078};
79
80class SimplePictureBenchmark : public PictureBenchmark {
keyar@chromium.org163b5672012-08-01 17:53:29 +000081private:
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000082 SimplePictureRenderer fRenderer;
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000083
84 virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
85 return &fRenderer;
86 }
scroggo@google.com9a412522012-09-07 15:21:18 +000087
88 typedef PictureBenchmark INHERITED;
keyar@chromium.org163b5672012-08-01 17:53:29 +000089};
90
91class TiledPictureBenchmark : public PictureBenchmark {
92public:
keyar@chromium.org163b5672012-08-01 17:53:29 +000093 void setTileWidth(int width) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000094 fRenderer.setTileWidth(width);
keyar@chromium.org163b5672012-08-01 17:53:29 +000095 }
96
97 int getTileWidth() const {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000098 return fRenderer.getTileWidth();
keyar@chromium.org163b5672012-08-01 17:53:29 +000099 }
100
101 void setTileHeight(int height) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000102 fRenderer.setTileHeight(height);
keyar@chromium.org163b5672012-08-01 17:53:29 +0000103 }
104
105 int getTileHeight() const {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000106 return fRenderer.getTileHeight();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000107 }
108
109 void setTileWidthPercentage(double percentage) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000110 fRenderer.setTileWidthPercentage(percentage);
keyar@chromium.org163b5672012-08-01 17:53:29 +0000111 }
112
113 double getTileWidthPercentage() const {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000114 return fRenderer.getTileWidthPercentage();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000115 }
116
117 void setTileHeightPercentage(double percentage) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000118 fRenderer.setTileHeightPercentage(percentage);
keyar@chromium.org163b5672012-08-01 17:53:29 +0000119 }
120
121 double getTileHeightPercentage() const {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000122 return fRenderer.getTileHeightPercentage();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000123 }
124
keyar@chromium.orgf4959ab2012-08-23 20:53:25 +0000125 void setTileMinPowerOf2Width(int width) {
126 fRenderer.setTileMinPowerOf2Width(width);
127 }
128
129 int getTileMinPowerOf2Width() {
130 return fRenderer.getTileMinPowerOf2Width();
131 }
132
scroggo@google.com58b4ead2012-08-31 16:15:22 +0000133 void setThreading(bool multi) {
134 fRenderer.setMultiThreaded(multi);
135 }
136
137 void setUsePipe(bool usePipe) {
138 fRenderer.setUsePipe(usePipe);
139 }
140
keyar@chromium.org163b5672012-08-01 17:53:29 +0000141private:
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000142 TiledPictureRenderer fRenderer;
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000143
144 virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE{
145 return &fRenderer;
146 }
scroggo@google.com9a412522012-09-07 15:21:18 +0000147
148 typedef PictureBenchmark INHERITED;
keyar@chromium.org163b5672012-08-01 17:53:29 +0000149};
150
scroggo@google.com9a412522012-09-07 15:21:18 +0000151class PlaybackCreationBenchmark : public PictureBenchmark {
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000152private:
scroggo@google.com9a412522012-09-07 15:21:18 +0000153 PlaybackCreationRenderer fRenderer;
154
155 virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE{
156 return &fRenderer;
157 }
158
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000159 typedef PictureBenchmark INHERITED;
keyar@chromium.org163b5672012-08-01 17:53:29 +0000160};
161
162}
163
164#endif // PictureBenchmark_DEFINED