blob: 379a79b0d2a69b68d33f620ae174df4d7e12dbd2 [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#include "SkTypes.h"
9#include "BenchTimer.h"
10#include "PictureBenchmark.h"
11#include "SkCanvas.h"
12#include "SkPicture.h"
13#include "SkString.h"
14#include "picture_utils.h"
15
16namespace sk_tools {
17
18void PipePictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000019 SkASSERT(pict);
20 if (pict == NULL) {
21 return;
22 }
keyar@chromium.org163b5672012-08-01 17:53:29 +000023
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000024 fRenderer.init(pict);
keyar@chromium.org163b5672012-08-01 17:53:29 +000025
26 // We throw this away to remove first time effects (such as paging in this
27 // program)
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000028 fRenderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000029
30 BenchTimer timer = BenchTimer(NULL);
31 timer.start();
32 for (int i = 0; i < fRepeats; ++i) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000033 fRenderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000034 }
35 timer.end();
36
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000037 fRenderer.end();
keyar@chromium.org9d696c02012-08-07 17:11:33 +000038
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000039 SkDebugf("pipe: msecs = %6.2f", timer.fWall / fRepeats);
40 if (fRenderer.isUsingGpuDevice()) {
41 SkDebugf(" gmsecs = %6.2f", timer.fGpu / fRepeats);
42 }
43 SkDebugf("\n");
keyar@chromium.org163b5672012-08-01 17:53:29 +000044}
45
46void RecordPictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000047 SkASSERT(pict);
48 if (pict == NULL) {
49 return;
50 }
51
keyar@chromium.org163b5672012-08-01 17:53:29 +000052 BenchTimer timer = BenchTimer(NULL);
53 double wall_time = 0;
54
55 for (int i = 0; i < fRepeats + 1; ++i) {
56 SkPicture replayer;
57 SkCanvas* recorder = replayer.beginRecording(pict->width(), pict->height());
58
59 timer.start();
60 recorder->drawPicture(*pict);
61 timer.end();
62
63 // We want to ignore first time effects
64 if (i > 0) {
65 wall_time += timer.fWall;
66 }
67 }
68
69 SkDebugf("record: msecs = %6.5f\n", wall_time / fRepeats);
70}
71
72void SimplePictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000073 SkASSERT(pict);
74 if (pict == NULL) {
75 return;
76 }
keyar@chromium.org163b5672012-08-01 17:53:29 +000077
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000078 fRenderer.init(pict);
keyar@chromium.org163b5672012-08-01 17:53:29 +000079
80 // We throw this away to remove first time effects (such as paging in this
81 // program)
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000082 fRenderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000083
84 BenchTimer timer = BenchTimer(NULL);
85 timer.start();
86 for (int i = 0; i < fRepeats; ++i) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000087 fRenderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000088 }
89 timer.end();
90
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000091 fRenderer.end();
keyar@chromium.org9d696c02012-08-07 17:11:33 +000092
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +000093 SkDebugf("simple: msecs = %6.2f", timer.fWall / fRepeats);
94 if (fRenderer.isUsingGpuDevice()) {
95 SkDebugf(" gmsecs = %6.2f", timer.fGpu / fRepeats);
96 }
97 SkDebugf("\n");
keyar@chromium.org163b5672012-08-01 17:53:29 +000098}
99
100void TiledPictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000101 SkASSERT(pict);
102 if (pict == NULL) {
103 return;
104 }
105
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000106 fRenderer.init(pict);
keyar@chromium.org163b5672012-08-01 17:53:29 +0000107
108 // We throw this away to remove first time effects (such as paging in this
109 // program)
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000110 fRenderer.drawTiles();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000111
112 BenchTimer timer = BenchTimer(NULL);
113 timer.start();
114 for (int i = 0; i < fRepeats; ++i) {
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000115 fRenderer.drawTiles();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000116 }
117 timer.end();
118
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000119 fRenderer.end();
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000120
keyar@chromium.orgfe6391a2012-08-20 15:03:41 +0000121 SkDebugf("%i_tiles_%ix%i: msecs = %6.2f", fRenderer.numTiles(), fRenderer.getTileWidth(),
122 fRenderer.getTileHeight(), timer.fWall / fRepeats);
123 if (fRenderer.isUsingGpuDevice()) {
124 SkDebugf(" gmsecs = %6.2f", timer.fGpu / fRepeats);
125 }
126 SkDebugf("\n");
keyar@chromium.org163b5672012-08-01 17:53:29 +0000127}
128
129void UnflattenPictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000130 SkASSERT(pict);
131 if (pict == NULL) {
132 return;
133 }
134
keyar@chromium.org163b5672012-08-01 17:53:29 +0000135 BenchTimer timer = BenchTimer(NULL);
136 double wall_time = 0;
137
138 for (int i = 0; i < fRepeats + 1; ++i) {
139 SkPicture replayer;
140 SkCanvas* recorder = replayer.beginRecording(pict->width(), pict->height());
141
142 recorder->drawPicture(*pict);
143
144 timer.start();
145 replayer.endRecording();
146 timer.end();
147
148 // We want to ignore first time effects
149 if (i > 0) {
150 wall_time += timer.fWall;
151 }
152 }
153
154 SkDebugf("unflatten: msecs = %6.4f\n", wall_time / fRepeats);
155}
156
157}