| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 | 8 |
| 9 #include "VisualLightweightBenchModule.h" | 9 #include "VisualLightweightBenchModule.h" |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 | 40 |
| 41 static SkString humanize(double ms) { | 41 static SkString humanize(double ms) { |
| 42 if (FLAGS_verbose) { | 42 if (FLAGS_verbose) { |
| 43 return SkStringPrintf("%llu", (uint64_t)(ms*1e6)); | 43 return SkStringPrintf("%llu", (uint64_t)(ms*1e6)); |
| 44 } | 44 } |
| 45 return HumanizeMs(ms); | 45 return HumanizeMs(ms); |
| 46 } | 46 } |
| 47 | 47 |
| 48 #define HUMANIZE(time) humanize(time).c_str() | 48 #define HUMANIZE(time) humanize(time).c_str() |
| 49 | 49 |
| 50 // A trivial bench to warm up the gpu | 50 // We draw a big nonAA path to warmup the gpu / cpu |
| 51 class WarmupBench : public Benchmark { | 51 class WarmupBench : public Benchmark { |
| 52 public: | 52 public: |
| 53 WarmupBench() { |
| 54 make_path(fPath); |
| 55 } |
| 53 private: | 56 private: |
| 57 static void make_path(SkPath& path) { |
| 58 #include "BigPathBench.inc" |
| 59 } |
| 54 const char* onGetName() override { return "warmupbench"; } | 60 const char* onGetName() override { return "warmupbench"; } |
| 55 void onDraw(const int loops, SkCanvas* canvas) override { | 61 void onDraw(const int loops, SkCanvas* canvas) override { |
| 62 SkPaint paint; |
| 63 paint.setStyle(SkPaint::kStroke_Style); |
| 64 paint.setStrokeWidth(2); |
| 56 for (int i = 0; i < loops; i++) { | 65 for (int i = 0; i < loops; i++) { |
| 57 sk_tool_utils::draw_checkerboard(canvas, 0xffffffff, 0xffc6c3c6, 10)
; | 66 canvas->drawPath(fPath, paint); |
| 58 } | 67 } |
| 59 } | 68 } |
| 69 SkPath fPath; |
| 60 }; | 70 }; |
| 61 | 71 |
| 62 VisualLightweightBenchModule::VisualLightweightBenchModule(VisualBench* owner) | 72 VisualLightweightBenchModule::VisualLightweightBenchModule(VisualBench* owner) |
| 63 : fCurrentSample(0) | 73 : fCurrentSample(0) |
| 64 , fCurrentFrame(0) | 74 , fCurrentFrame(0) |
| 65 , fLoops(1) | 75 , fLoops(1) |
| 66 , fState(kWarmup_State) | 76 , fState(kWarmup_State) |
| 67 , fBenchmark(nullptr) | 77 , fBenchmark(nullptr) |
| 68 , fOwner(SkRef(owner)) | 78 , fOwner(SkRef(owner)) |
| 69 , fResults(new ResultsWriter) { | 79 , fResults(new ResultsWriter) { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 HUMANIZE(stats.mean), | 146 HUMANIZE(stats.mean), |
| 137 HUMANIZE(stats.max), | 147 HUMANIZE(stats.max), |
| 138 stdDevPercent, | 148 stdDevPercent, |
| 139 stats.plot.c_str(), | 149 stats.plot.c_str(), |
| 140 shortName); | 150 shortName); |
| 141 } | 151 } |
| 142 } | 152 } |
| 143 | 153 |
| 144 bool VisualLightweightBenchModule::advanceRecordIfNecessary(SkCanvas* canvas) { | 154 bool VisualLightweightBenchModule::advanceRecordIfNecessary(SkCanvas* canvas) { |
| 145 if (!fBenchmark && fState == kWarmup_State) { | 155 if (!fBenchmark && fState == kWarmup_State) { |
| 156 fOwner->clear(canvas, SK_ColorWHITE, 2); |
| 146 fBenchmark.reset(new WarmupBench); | 157 fBenchmark.reset(new WarmupBench); |
| 147 return true; | 158 return true; |
| 148 } | 159 } |
| 149 | 160 |
| 150 if (fBenchmark) { | 161 if (fBenchmark) { |
| 151 return true; | 162 return true; |
| 152 } | 163 } |
| 153 | 164 |
| 154 fBenchmark.reset(fBenchmarkStream->next()); | 165 fBenchmark.reset(fBenchmarkStream->next()); |
| 155 if (!fBenchmark) { | 166 if (!fBenchmark) { |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 fTimer.end(); | 263 fTimer.end(); |
| 253 return fTimer.fWall; | 264 return fTimer.fWall; |
| 254 } | 265 } |
| 255 | 266 |
| 256 void VisualLightweightBenchModule::resetTimingState() { | 267 void VisualLightweightBenchModule::resetTimingState() { |
| 257 fCurrentFrame = 0; | 268 fCurrentFrame = 0; |
| 258 fTimer = WallTimer(); | 269 fTimer = WallTimer(); |
| 259 fOwner->reset(); | 270 fOwner->reset(); |
| 260 } | 271 } |
| 261 | 272 |
| 262 void VisualLightweightBenchModule::scaleLoops(double elapsedMs) { | |
| 263 // Scale back the number of loops | |
| 264 fLoops = (int)ceil(fLoops * FLAGS_loopMs / elapsedMs); | |
| 265 } | |
| 266 | |
| 267 inline void VisualLightweightBenchModule::tuneLoops() { | 273 inline void VisualLightweightBenchModule::tuneLoops() { |
| 268 if (1 << 30 == fLoops) { | 274 if (1 << 30 == fLoops) { |
| 269 // We're about to wrap. Something's wrong with the bench. | 275 // We're about to wrap. Something's wrong with the bench. |
| 270 SkDebugf("InnerLoops wrapped\n"); | 276 SkDebugf("InnerLoops wrapped\n"); |
| 271 fLoops = 1; | 277 fLoops = 1; |
| 272 } else { | 278 } else { |
| 273 double elapsedMs = this->elapsed(); | 279 double elapsedMs = this->elapsed(); |
| 274 if (elapsedMs > FLAGS_loopMs) { | 280 if (elapsedMs > FLAGS_loopMs) { |
| 275 this->scaleLoops(elapsedMs); | |
| 276 this->nextState(kPreWarmTimingPerCanvasPreDraw_State); | 281 this->nextState(kPreWarmTimingPerCanvasPreDraw_State); |
| 277 } else { | 282 } else { |
| 278 fLoops *= 2; | 283 fLoops *= 2; |
| 279 this->nextState(kPreWarmLoops_State); | 284 this->nextState(kPreWarmLoops_State); |
| 280 } | 285 } |
| 281 this->resetTimingState(); | 286 this->resetTimingState(); |
| 282 } | 287 } |
| 283 } | 288 } |
| 284 | 289 |
| 285 void VisualLightweightBenchModule::recordMeasurement() { | 290 void VisualLightweightBenchModule::recordMeasurement() { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 306 } | 311 } |
| 307 this->resetTimingState(); | 312 this->resetTimingState(); |
| 308 } else { | 313 } else { |
| 309 fCurrentFrame++; | 314 fCurrentFrame++; |
| 310 } | 315 } |
| 311 } | 316 } |
| 312 | 317 |
| 313 bool VisualLightweightBenchModule::onHandleChar(SkUnichar c) { | 318 bool VisualLightweightBenchModule::onHandleChar(SkUnichar c) { |
| 314 return true; | 319 return true; |
| 315 } | 320 } |
| OLD | NEW |