blob: a9449a1da09043fcf5e78a56e3dbdd34f770ee59 [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.org9d696c02012-08-07 17:11:33 +000024 renderer.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.org9d696c02012-08-07 17:11:33 +000028 renderer.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.org9d696c02012-08-07 17:11:33 +000033 renderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000034 }
35 timer.end();
36
keyar@chromium.org9d696c02012-08-07 17:11:33 +000037 renderer.end();
38
keyar@chromium.org163b5672012-08-01 17:53:29 +000039 SkDebugf("pipe: msecs = %6.2f\n", timer.fWall / fRepeats);
40}
41
42void RecordPictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000043 SkASSERT(pict);
44 if (pict == NULL) {
45 return;
46 }
47
keyar@chromium.org163b5672012-08-01 17:53:29 +000048 BenchTimer timer = BenchTimer(NULL);
49 double wall_time = 0;
50
51 for (int i = 0; i < fRepeats + 1; ++i) {
52 SkPicture replayer;
53 SkCanvas* recorder = replayer.beginRecording(pict->width(), pict->height());
54
55 timer.start();
56 recorder->drawPicture(*pict);
57 timer.end();
58
59 // We want to ignore first time effects
60 if (i > 0) {
61 wall_time += timer.fWall;
62 }
63 }
64
65 SkDebugf("record: msecs = %6.5f\n", wall_time / fRepeats);
66}
67
68void SimplePictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000069 SkASSERT(pict);
70 if (pict == NULL) {
71 return;
72 }
keyar@chromium.org163b5672012-08-01 17:53:29 +000073
keyar@chromium.org9d696c02012-08-07 17:11:33 +000074 renderer.init(pict);
keyar@chromium.org163b5672012-08-01 17:53:29 +000075
76 // We throw this away to remove first time effects (such as paging in this
77 // program)
keyar@chromium.org9d696c02012-08-07 17:11:33 +000078 renderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000079
80 BenchTimer timer = BenchTimer(NULL);
81 timer.start();
82 for (int i = 0; i < fRepeats; ++i) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000083 renderer.render();
keyar@chromium.org163b5672012-08-01 17:53:29 +000084 }
85 timer.end();
86
keyar@chromium.org9d696c02012-08-07 17:11:33 +000087 renderer.end();
88
keyar@chromium.org163b5672012-08-01 17:53:29 +000089 printf("simple: msecs = %6.2f\n", timer.fWall / fRepeats);
90}
91
92void TiledPictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +000093 SkASSERT(pict);
94 if (pict == NULL) {
95 return;
96 }
97
98 renderer.init(pict);
keyar@chromium.org163b5672012-08-01 17:53:29 +000099
100 // We throw this away to remove first time effects (such as paging in this
101 // program)
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000102 renderer.drawTiles();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000103
104 BenchTimer timer = BenchTimer(NULL);
105 timer.start();
106 for (int i = 0; i < fRepeats; ++i) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000107 renderer.drawTiles();
keyar@chromium.org163b5672012-08-01 17:53:29 +0000108 }
109 timer.end();
110
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000111 renderer.end();
112
keyar@chromium.org163b5672012-08-01 17:53:29 +0000113 SkDebugf("%i_tiles_%ix%i: msecs = %6.2f\n", renderer.numTiles(), renderer.getTileWidth(),
114 renderer.getTileHeight(), timer.fWall / fRepeats);
115}
116
117void UnflattenPictureBenchmark::run(SkPicture* pict) {
keyar@chromium.org9d696c02012-08-07 17:11:33 +0000118 SkASSERT(pict);
119 if (pict == NULL) {
120 return;
121 }
122
keyar@chromium.org163b5672012-08-01 17:53:29 +0000123 BenchTimer timer = BenchTimer(NULL);
124 double wall_time = 0;
125
126 for (int i = 0; i < fRepeats + 1; ++i) {
127 SkPicture replayer;
128 SkCanvas* recorder = replayer.beginRecording(pict->width(), pict->height());
129
130 recorder->drawPicture(*pict);
131
132 timer.start();
133 replayer.endRecording();
134 timer.end();
135
136 // We want to ignore first time effects
137 if (i > 0) {
138 wall_time += timer.fWall;
139 }
140 }
141
142 SkDebugf("unflatten: msecs = %6.4f\n", wall_time / fRepeats);
143}
144
145}