Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: bench/nanobench.cpp

Issue 643143002: detect --loops is < 0 and interpret that as running forever (mostly) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include <ctype.h> 8 #include <ctype.h>
9 9
10 #include "Benchmark.h" 10 #include "Benchmark.h"
(...skipping 17 matching lines...) Expand all
28 #include "SkSurface.h" 28 #include "SkSurface.h"
29 29
30 #if SK_SUPPORT_GPU 30 #if SK_SUPPORT_GPU
31 #include "gl/GrGLDefines.h" 31 #include "gl/GrGLDefines.h"
32 #include "GrContextFactory.h" 32 #include "GrContextFactory.h"
33 SkAutoTDelete<GrContextFactory> gGrFactory; 33 SkAutoTDelete<GrContextFactory> gGrFactory;
34 #endif 34 #endif
35 35
36 __SK_FORCE_IMAGE_DECODER_LINKING; 36 __SK_FORCE_IMAGE_DECODER_LINKING;
37 37
38 static const int kAutoTuneLoops = -1; 38 static const int kAutoTuneLoops = 0;
39 39
40 static const int kDefaultLoops = 40 static const int kDefaultLoops =
41 #ifdef SK_DEBUG 41 #ifdef SK_DEBUG
42 1; 42 1;
43 #else 43 #else
44 kAutoTuneLoops; 44 kAutoTuneLoops;
45 #endif 45 #endif
46 46
47 static SkString loops_help_txt() { 47 static SkString loops_help_txt() {
48 SkString help; 48 SkString help;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 } 107 }
108 108
109 static double estimate_timer_overhead() { 109 static double estimate_timer_overhead() {
110 double overhead = 0; 110 double overhead = 0;
111 for (int i = 0; i < FLAGS_overheadLoops; i++) { 111 for (int i = 0; i < FLAGS_overheadLoops; i++) {
112 overhead += time(1, NULL, NULL, NULL); 112 overhead += time(1, NULL, NULL, NULL);
113 } 113 }
114 return overhead / FLAGS_overheadLoops; 114 return overhead / FLAGS_overheadLoops;
115 } 115 }
116 116
117 static int detect_forever_loops(int loops) {
118 // look for a magic run-forever value
119 if (loops < 0) {
120 loops = SK_MaxS32;
121 }
122 return loops;
123 }
124
117 static int clamp_loops(int loops) { 125 static int clamp_loops(int loops) {
118 if (loops < 1) { 126 if (loops < 1) {
119 SkDebugf("ERROR: clamping loops from %d to 1.\n", loops); 127 SkDebugf("ERROR: clamping loops from %d to 1.\n", loops);
120 return 1; 128 return 1;
121 } 129 }
122 if (loops > FLAGS_maxLoops) { 130 if (loops > FLAGS_maxLoops) {
123 SkDebugf("WARNING: clamping loops from %d to FLAGS_maxLoops, %d.\n", loo ps, FLAGS_maxLoops); 131 SkDebugf("WARNING: clamping loops from %d to FLAGS_maxLoops, %d.\n", loo ps, FLAGS_maxLoops);
124 return FLAGS_maxLoops; 132 return FLAGS_maxLoops;
125 } 133 }
126 return loops; 134 return loops;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 // (overhead / FLAGS_overheadGoal) - overhead 194 // (overhead / FLAGS_overheadGoal) - overhead
187 // ------------------------------------------ < N 195 // ------------------------------------------ < N
188 // bench_plus_overhead - overhead) 196 // bench_plus_overhead - overhead)
189 // 197 //
190 // Luckily, this also works well in practice. :) 198 // Luckily, this also works well in practice. :)
191 int loops = FLAGS_loops; 199 int loops = FLAGS_loops;
192 if (kAutoTuneLoops == loops) { 200 if (kAutoTuneLoops == loops) {
193 const double numer = overhead / FLAGS_overheadGoal - overhead; 201 const double numer = overhead / FLAGS_overheadGoal - overhead;
194 const double denom = bench_plus_overhead - overhead; 202 const double denom = bench_plus_overhead - overhead;
195 loops = (int)ceil(numer / denom); 203 loops = (int)ceil(numer / denom);
204 loops = clamp_loops(loops);
205 } else {
206 loops = detect_forever_loops(loops);
196 } 207 }
197 loops = clamp_loops(loops);
198 208
199 for (int i = 0; i < FLAGS_samples; i++) { 209 for (int i = 0; i < FLAGS_samples; i++) {
200 samples[i] = time(loops, bench, canvas, NULL) / loops; 210 samples[i] = time(loops, bench, canvas, NULL) / loops;
201 } 211 }
202 return loops; 212 return loops;
203 } 213 }
204 214
205 #if SK_SUPPORT_GPU 215 #if SK_SUPPORT_GPU
206 static int gpu_bench(SkGLContext* gl, 216 static int gpu_bench(SkGLContext* gl,
207 Benchmark* bench, 217 Benchmark* bench,
(...skipping 13 matching lines...) Expand all
221 // If the GPU lets frames lag at all, we need to make sure we're tim ing 231 // If the GPU lets frames lag at all, we need to make sure we're tim ing
222 // _this_ round, not still timing last round. We force this by loop ing 232 // _this_ round, not still timing last round. We force this by loop ing
223 // more times than any reasonable GPU will allow frames to lag. 233 // more times than any reasonable GPU will allow frames to lag.
224 for (int i = 0; i < FLAGS_gpuFrameLag; i++) { 234 for (int i = 0; i < FLAGS_gpuFrameLag; i++) {
225 elapsed = time(loops, bench, canvas, gl); 235 elapsed = time(loops, bench, canvas, gl);
226 } 236 }
227 } while (elapsed < FLAGS_gpuMs); 237 } while (elapsed < FLAGS_gpuMs);
228 238
229 // We've overshot at least a little. Scale back linearly. 239 // We've overshot at least a little. Scale back linearly.
230 loops = (int)ceil(loops * FLAGS_gpuMs / elapsed); 240 loops = (int)ceil(loops * FLAGS_gpuMs / elapsed);
241 loops = clamp_loops(loops);
231 242
232 // Might as well make sure we're not still timing our calibration. 243 // Might as well make sure we're not still timing our calibration.
233 SK_GL(*gl, Finish()); 244 SK_GL(*gl, Finish());
245 } else {
246 loops = detect_forever_loops(loops);
234 } 247 }
235 loops = clamp_loops(loops);
236 248
237 // Pretty much the same deal as the calibration: do some warmup to make 249 // Pretty much the same deal as the calibration: do some warmup to make
238 // sure we're timing steady-state pipelined frames. 250 // sure we're timing steady-state pipelined frames.
239 for (int i = 0; i < FLAGS_gpuFrameLag; i++) { 251 for (int i = 0; i < FLAGS_gpuFrameLag; i++) {
240 time(loops, bench, canvas, gl); 252 time(loops, bench, canvas, gl);
241 } 253 }
242 254
243 // Now, actually do the timing! 255 // Now, actually do the timing!
244 for (int i = 0; i < FLAGS_samples; i++) { 256 for (int i = 0; i < FLAGS_samples; i++) {
245 samples[i] = time(loops, bench, canvas, gl) / loops; 257 samples[i] = time(loops, bench, canvas, gl) / loops;
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 729
718 return 0; 730 return 0;
719 } 731 }
720 732
721 #if !defined SK_BUILD_FOR_IOS 733 #if !defined SK_BUILD_FOR_IOS
722 int main(int argc, char** argv) { 734 int main(int argc, char** argv) {
723 SkCommandLineFlags::Parse(argc, argv); 735 SkCommandLineFlags::Parse(argc, argv);
724 return nanobench_main(); 736 return nanobench_main();
725 } 737 }
726 #endif 738 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698