OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "BenchTimer.h" | 8 #include "BenchTimer.h" |
9 #include "LazyDecodeBitmap.h" | 9 #include "LazyDecodeBitmap.h" |
10 #include "PictureBenchmark.h" | 10 #include "PictureBenchmark.h" |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 | 231 |
232 SkDebugf("%s %s %s %d times...\n", msgPrefix.c_str(), msg, path.c_str(), num
Repeats); | 232 SkDebugf("%s %s %s %d times...\n", msgPrefix.c_str(), msg, path.c_str(), num
Repeats); |
233 for (int i = 0; i < numRepeats; ++i) { | 233 for (int i = 0; i < numRepeats; ++i) { |
234 // Set up the bitmap. | 234 // Set up the bitmap. |
235 SkBitmap** out = NULL; | 235 SkBitmap** out = NULL; |
236 if (i == 0 && kRTree_BenchmarkType == benchmarkType && isPlayback) { | 236 if (i == 0 && kRTree_BenchmarkType == benchmarkType && isPlayback) { |
237 out = &bitmap; | 237 out = &bitmap; |
238 } | 238 } |
239 | 239 |
240 renderer->setup(); | 240 renderer->setup(); |
241 // Render once to fill caches. | 241 // Render once to fill caches. Fill bitmap during the first iteration. |
242 renderer->render(NULL); | 242 renderer->render(NULL, out); |
243 // Render again to measure | 243 // Render again to measure |
244 timer->start(); | 244 timer->start(); |
245 bool result = renderer->render(NULL, out); | 245 bool result = renderer->render(NULL); |
246 timer->end(); | 246 timer->end(); |
247 | 247 |
248 // We only care about a false result on playback. RecordPictureRenderer:
:render will always | 248 // We only care about a false result on playback. RecordPictureRenderer:
:render will always |
249 // return false because we are passing a NULL file name on purpose; whic
h is fine. | 249 // return false because we are passing a NULL file name on purpose; whic
h is fine. |
250 if (isPlayback && !result) { | 250 if (isPlayback && !result) { |
251 SkDebugf("Error rendering during playback.\n"); | 251 SkDebugf("Error rendering during playback.\n"); |
252 } | 252 } |
253 } | 253 } |
254 if (bitmap) { | 254 if (bitmap) { |
255 SkAutoTDelete<SkBitmap> bmDeleter(bitmap); | 255 SkAutoTDelete<SkBitmap> bmDeleter(bitmap); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 recordOut.writeText(out.c_str()); | 381 recordOut.writeText(out.c_str()); |
382 } | 382 } |
383 if (BenchmarkControl::GetBenchmarkFunc(i) == &benchmark_playback) { | 383 if (BenchmarkControl::GetBenchmarkFunc(i) == &benchmark_playback) { |
384 playbackOut.writeText(out.c_str()); | 384 playbackOut.writeText(out.c_str()); |
385 } | 385 } |
386 } | 386 } |
387 recordOut.writeText("\n"); | 387 recordOut.writeText("\n"); |
388 playbackOut.writeText("\n"); | 388 playbackOut.writeText("\n"); |
389 // Write to file, and save recording averages. | 389 // Write to file, and save recording averages. |
390 SkScalar avgRecord = SkIntToScalar(0); | 390 SkScalar avgRecord = SkIntToScalar(0); |
| 391 SkScalar avgPlayback = SkIntToScalar(0); |
391 SkScalar avgRecordRTree = SkIntToScalar(0); | 392 SkScalar avgRecordRTree = SkIntToScalar(0); |
| 393 SkScalar avgPlaybackRTree = SkIntToScalar(0); |
392 for (int i = 0; i < argc - 1; ++i) { | 394 for (int i = 0; i < argc - 1; ++i) { |
393 SkString pbLine; | 395 SkString pbLine; |
394 SkString recLine; | 396 SkString recLine; |
395 // ==== Write record info | 397 // ==== Write record info |
396 recLine.printf("%d ", i); | 398 recLine.printf("%d ", i); |
397 SkScalar cpuTime = histograms[BenchmarkControl::kNormalRecord][i].fCpuTi
me; | 399 SkScalar cpuTime = histograms[BenchmarkControl::kNormalRecord][i].fCpuTi
me; |
398 recLine.appendf("%f ", cpuTime); | 400 recLine.appendf("%f ", cpuTime); |
399 avgRecord += cpuTime; | 401 avgRecord += cpuTime; |
400 cpuTime = histograms[BenchmarkControl::kRTreeRecord][i].fCpuTime; | 402 cpuTime = histograms[BenchmarkControl::kRTreeRecord][i].fCpuTime; |
401 recLine.appendf("%f", cpuTime); | 403 recLine.appendf("%f", cpuTime); |
402 avgRecordRTree += cpuTime; | 404 avgRecordRTree += cpuTime; |
| 405 avgPlaybackRTree += cpuTime; |
403 | 406 |
404 // ==== Write playback info | 407 // ==== Write playback info |
405 pbLine.printf("%d ", i); | 408 pbLine.printf("%d ", i); |
406 pbLine.appendf("%f ", histograms[2][i].fCpuTime); // Start with normal
playback time. | 409 pbLine.appendf("%f ", histograms[2][i].fCpuTime); // Start with normal
playback time. |
| 410 avgPlayback += histograms[kNumBbhPlaybackBenchmarks - 1][i].fCpuTime; |
| 411 avgPlaybackRTree += histograms[kNumBbhPlaybackBenchmarks][i].fCpuTime; |
407 // Append all playback benchmark times. | 412 // Append all playback benchmark times. |
408 for (size_t j = kNumBbhPlaybackBenchmarks; j < kNumBenchmarks; ++j) { | 413 for (size_t j = kNumBbhPlaybackBenchmarks; j < kNumBenchmarks; ++j) { |
409 pbLine.appendf("%f ", histograms[j][i].fCpuTime); | 414 pbLine.appendf("%f ", histograms[j][i].fCpuTime); |
410 } | 415 } |
411 pbLine.remove(pbLine.size() - 1, 1); // Remove trailing space from line
. | 416 pbLine.remove(pbLine.size() - 1, 1); // Remove trailing space from line
. |
412 pbLine.appendf("\n"); | 417 pbLine.appendf("\n"); |
413 recLine.appendf("\n"); | 418 recLine.appendf("\n"); |
414 playbackOut.writeText(pbLine.c_str()); | 419 playbackOut.writeText(pbLine.c_str()); |
415 recordOut.writeText(recLine.c_str()); | 420 recordOut.writeText(recLine.c_str()); |
416 } | 421 } |
417 avgRecord /= argc - 1; | 422 avgRecord /= argc - 1; |
418 avgRecordRTree /= argc - 1; | 423 avgRecordRTree /= argc - 1; |
| 424 avgPlayback /= argc - 1; |
| 425 avgPlaybackRTree /= argc - 1; |
419 SkDebugf("Average base recording time: %.3fms\n", avgRecord); | 426 SkDebugf("Average base recording time: %.3fms\n", avgRecord); |
420 SkDebugf("Average recording time with rtree: %.3fms\n", avgRecordRTree); | 427 SkDebugf("Average recording time with rtree: %.3fms\n", avgRecordRTree); |
| 428 SkDebugf("Average base playback time: %.3fms\n", avgPlayback); |
| 429 SkDebugf("Average playback time with rtree: %.3fms\n", avgPlaybackRTree); |
| 430 |
421 SkDebugf("\nWrote data to gnuplot-readable files: %s %s\n", pbTitle, recTitl
e); | 431 SkDebugf("\nWrote data to gnuplot-readable files: %s %s\n", pbTitle, recTitl
e); |
422 | 432 |
423 return 0; | 433 return 0; |
424 } | 434 } |
425 | 435 |
426 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 436 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
427 int main(int argc, char** argv) { | 437 int main(int argc, char** argv) { |
428 return tool_main(argc, argv); | 438 return tool_main(argc, argv); |
429 } | 439 } |
430 #endif | 440 #endif |
OLD | NEW |