OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "BenchTimer.h" | 10 #include "BenchTimer.h" |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 return false; | 274 return false; |
275 } | 275 } |
276 } | 276 } |
277 return true; | 277 return true; |
278 } | 278 } |
279 | 279 |
280 static void help() { | 280 static void help() { |
281 SkDebugf("Usage: bench [-o outDir] [--repeat nr] [--logPerIter] " | 281 SkDebugf("Usage: bench [-o outDir] [--repeat nr] [--logPerIter] " |
282 "[--timers [wcgWC]*] [--rotate]\n" | 282 "[--timers [wcgWC]*] [--rotate]\n" |
283 " [--scale] [--clip] [--min] [--forceAA 1|0] [--forceFilter 1|0]
\n" | 283 " [--scale] [--clip] [--min] [--forceAA 1|0] [--forceFilter 1|0]
\n" |
284 " [--forceDither 1|0] [--forceBlend 1|0] [--strokeWidth width]\n
" | 284 " [--forceDither 1|0] [--forceBlend 1|0]" |
285 " [--match name] [--mode normal|deferred|deferredSilent|record|p
icturerecord]\n" | 285 #if SK_SUPPORT_GPU |
| 286 " [--gpuCacheSize <bytes> <count>]" |
| 287 #endif |
| 288 "\n" |
| 289 " [--strokeWidth width] [--match name]\n" |
| 290 " [--mode normal|deferred|deferredSilent|record|picturerecord]\n
" |
286 " [--config 8888|565|GPU|ANGLE|NULLGPU] [-Dfoo bar] [--logFile f
ilename]\n" | 291 " [--config 8888|565|GPU|ANGLE|NULLGPU] [-Dfoo bar] [--logFile f
ilename]\n" |
287 " [-h|--help]"); | 292 " [-h|--help]"); |
288 SkDebugf("\n\n"); | 293 SkDebugf("\n\n"); |
289 SkDebugf(" -o outDir : Image of each bench will be put in outDir.\n"); | 294 SkDebugf(" -o outDir : Image of each bench will be put in outDir.\n"); |
290 SkDebugf(" --repeat nr : Each bench repeats for nr times.\n"); | 295 SkDebugf(" --repeat nr : Each bench repeats for nr times.\n"); |
291 SkDebugf(" --logPerIter : " | 296 SkDebugf(" --logPerIter : " |
292 "Log each repeat timer instead of mean, default is disabled.\n"); | 297 "Log each repeat timer instead of mean, default is disabled.\n"); |
293 SkDebugf(" --timers [wcgWC]* : " | 298 SkDebugf(" --timers [wcgWC]* : " |
294 "Display wall, cpu, gpu, truncated wall or truncated cpu time for e
ach bench.\n"); | 299 "Display wall, cpu, gpu, truncated wall or truncated cpu time for e
ach bench.\n"); |
295 SkDebugf(" --rotate : Rotate before each bench runs.\n"); | 300 SkDebugf(" --rotate : Rotate before each bench runs.\n"); |
296 SkDebugf(" --scale : Scale before each bench runs.\n"); | 301 SkDebugf(" --scale : Scale before each bench runs.\n"); |
297 SkDebugf(" --clip : Clip before each bench runs.\n"); | 302 SkDebugf(" --clip : Clip before each bench runs.\n"); |
298 SkDebugf(" --min : Print the minimum times (instead of average).\n"); | 303 SkDebugf(" --min : Print the minimum times (instead of average).\n"); |
299 SkDebugf(" --forceAA 1|0 : " | 304 SkDebugf(" --forceAA 1|0 : " |
300 "Enable/disable anti-aliased, default is enabled.\n"); | 305 "Enable/disable anti-aliased, default is enabled.\n"); |
301 SkDebugf(" --forceFilter 1|0 : " | 306 SkDebugf(" --forceFilter 1|0 : " |
302 "Enable/disable bitmap filtering, default is disabled.\n"); | 307 "Enable/disable bitmap filtering, default is disabled.\n"); |
303 SkDebugf(" --forceDither 1|0 : " | 308 SkDebugf(" --forceDither 1|0 : " |
304 "Enable/disable dithering, default is disabled.\n"); | 309 "Enable/disable dithering, default is disabled.\n"); |
305 SkDebugf(" --forceBlend 1|0 : " | 310 SkDebugf(" --forceBlend 1|0 : " |
306 "Enable/disable dithering, default is disabled.\n"); | 311 "Enable/disable dithering, default is disabled.\n"); |
| 312 #if SK_SUPPORT_GPU |
| 313 SkDebugf(" --gpuCacheSize <bytes> <count>: " |
| 314 "limits gpu cache to bytes size or object count.\n"); |
| 315 SkDebugf(" -1 for either value means use the default. 0 for either disa
bles the cache.\n"); |
| 316 #endif |
307 SkDebugf(" --strokeWidth width : The width for path stroke.\n"); | 317 SkDebugf(" --strokeWidth width : The width for path stroke.\n"); |
308 SkDebugf(" --match name : Only run bench whose name is matched.\n"); | 318 SkDebugf(" --match name : Only run bench whose name is matched.\n"); |
309 SkDebugf(" --mode normal|deferred|deferredSilent|record|picturerecord :\n
" | 319 SkDebugf(" --mode normal|deferred|deferredSilent|record|picturerecord :\n
" |
310 " Run in the corresponding mode\n" | 320 " Run in the corresponding mode\n" |
311 " normal, Use a normal canvas to draw to;\n" | 321 " normal, Use a normal canvas to draw to;\n" |
312 " deferred, Use a deferrred canvas when drawing;\n" | 322 " deferred, Use a deferrred canvas when drawing;\n" |
313 " deferredSilent, deferred with silent playback;\n" | 323 " deferredSilent, deferred with silent playback;\n" |
314 " record, Benchmark the time to record to an SkPict
ure;\n" | 324 " record, Benchmark the time to record to an SkPict
ure;\n" |
315 " picturerecord, Benchmark the time to do record fr
om a \n" | 325 " picturerecord, Benchmark the time to do record fr
om a \n" |
316 " SkPicture to a SkPicture.\n"); | 326 " SkPicture to a SkPicture.\n"); |
(...skipping 26 matching lines...) Expand all Loading... |
343 bool timerWall = false; | 353 bool timerWall = false; |
344 bool truncatedTimerWall = false; | 354 bool truncatedTimerWall = false; |
345 bool timerCpu = true; | 355 bool timerCpu = true; |
346 bool truncatedTimerCpu = false; | 356 bool truncatedTimerCpu = false; |
347 bool timerGpu = true; | 357 bool timerGpu = true; |
348 bool doScale = false; | 358 bool doScale = false; |
349 bool doRotate = false; | 359 bool doRotate = false; |
350 bool doClip = false; | 360 bool doClip = false; |
351 bool printMin = false; | 361 bool printMin = false; |
352 bool hasStrokeWidth = false; | 362 bool hasStrokeWidth = false; |
| 363 |
| 364 #if SK_SUPPORT_GPU |
| 365 struct { |
| 366 size_t fBytes; |
| 367 int fCount; |
| 368 } gpuCacheSize = { -1, -1 }; // -1s mean use the default |
| 369 #endif |
| 370 |
353 float strokeWidth; | 371 float strokeWidth; |
354 SkTDArray<const char*> fMatches; | 372 SkTDArray<const char*> fMatches; |
355 benchModes benchMode = kNormal_benchModes; | 373 benchModes benchMode = kNormal_benchModes; |
356 SkString perIterTimeformat("%.2f"); | 374 SkString perIterTimeformat("%.2f"); |
357 SkString normalTimeFormat("%6.2f"); | 375 SkString normalTimeFormat("%6.2f"); |
358 | 376 |
359 SkString outDir; | 377 SkString outDir; |
360 SkBitmap::Config outConfig = SkBitmap::kNo_Config; | 378 SkBitmap::Config outConfig = SkBitmap::kNo_Config; |
361 const char* configName = ""; | 379 const char* configName = ""; |
362 Backend backend = kRaster_Backend; // for warning | 380 Backend backend = kRaster_Backend; // for warning |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 } | 458 } |
441 forceDither = tmp ? SkTriState::kTrue : SkTriState::kFalse; | 459 forceDither = tmp ? SkTriState::kTrue : SkTriState::kFalse; |
442 } else if (strcmp(*argv, "--forceBlend") == 0) { | 460 } else if (strcmp(*argv, "--forceBlend") == 0) { |
443 bool wantAlpha = false; | 461 bool wantAlpha = false; |
444 if (!parse_bool_arg(++argv, stop, &wantAlpha)) { | 462 if (!parse_bool_arg(++argv, stop, &wantAlpha)) { |
445 logger.logError("missing arg for --forceBlend\n"); | 463 logger.logError("missing arg for --forceBlend\n"); |
446 help(); | 464 help(); |
447 return -1; | 465 return -1; |
448 } | 466 } |
449 forceAlpha = wantAlpha ? 0x80 : 0xFF; | 467 forceAlpha = wantAlpha ? 0x80 : 0xFF; |
| 468 #if SK_SUPPORT_GPU |
| 469 } else if (strcmp(*argv, "--gpuCacheSize") == 0) { |
| 470 if (stop - argv > 2) { |
| 471 gpuCacheSize.fBytes = atoi(*++argv); |
| 472 gpuCacheSize.fCount = atoi(*++argv); |
| 473 } else { |
| 474 SkDebugf("missing arg for --gpuCacheSize\n"); |
| 475 help(); |
| 476 return -1; |
| 477 } |
| 478 #endif |
450 } else if (strcmp(*argv, "--mode") == 0) { | 479 } else if (strcmp(*argv, "--mode") == 0) { |
451 argv++; | 480 argv++; |
452 if (argv < stop) { | 481 if (argv < stop) { |
453 if (strcmp(*argv, "normal") == 0) { | 482 if (strcmp(*argv, "normal") == 0) { |
454 benchMode = kNormal_benchModes; | 483 benchMode = kNormal_benchModes; |
455 } else if (strcmp(*argv, "deferred") == 0) { | 484 } else if (strcmp(*argv, "deferred") == 0) { |
456 benchMode = kDeferred_benchModes; | 485 benchMode = kDeferred_benchModes; |
457 } else if (strcmp(*argv, "deferredSilent") == 0) { | 486 } else if (strcmp(*argv, "deferredSilent") == 0) { |
458 benchMode = kDeferredSilent_benchModes; | 487 benchMode = kDeferredSilent_benchModes; |
459 } else if (strcmp(*argv, "record") == 0) { | 488 } else if (strcmp(*argv, "record") == 0) { |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 #if defined(SK_DEBUG) | 643 #if defined(SK_DEBUG) |
615 str.append(" DEBUG"); | 644 str.append(" DEBUG"); |
616 #endif | 645 #endif |
617 str.append("\n"); | 646 str.append("\n"); |
618 logger.logProgress(str); | 647 logger.logProgress(str); |
619 } | 648 } |
620 | 649 |
621 SkTArray<BenchTimer*> timers(SK_ARRAY_COUNT(gConfigs)); | 650 SkTArray<BenchTimer*> timers(SK_ARRAY_COUNT(gConfigs)); |
622 for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) { | 651 for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) { |
623 #if SK_SUPPORT_GPU | 652 #if SK_SUPPORT_GPU |
624 SkGLContextHelper* ctx = NULL; | 653 SkGLContextHelper* glCtx = NULL; |
625 if (kGPU_Backend == gConfigs[i].fBackend) { | 654 if (kGPU_Backend == gConfigs[i].fBackend) { |
626 ctx = gContextFactory.getGLContext(gConfigs[i].fContextType); | 655 GrContext* context = gContextFactory.get(gConfigs[i].fContextType); |
| 656 if (NULL != context) { |
| 657 // Set the user specified cache limits if non-default. |
| 658 size_t bytes; |
| 659 int count; |
| 660 context->getTextureCacheLimits(&count, &bytes); |
| 661 if (-1 != gpuCacheSize.fBytes) { |
| 662 bytes = gpuCacheSize.fBytes; |
| 663 } |
| 664 if (-1 != gpuCacheSize.fCount) { |
| 665 count = gpuCacheSize.fCount; |
| 666 } |
| 667 context->setTextureCacheLimits(count, bytes); |
| 668 } |
| 669 glCtx = gContextFactory.getGLContext(gConfigs[i].fContextType); |
627 } | 670 } |
628 timers.push_back(SkNEW_ARGS(BenchTimer, (ctx))); | 671 timers.push_back(SkNEW_ARGS(BenchTimer, (glCtx))); |
629 #else | 672 #else |
630 timers.push_back(SkNEW(BenchTimer)); | 673 timers.push_back(SkNEW(BenchTimer)); |
631 #endif | 674 #endif |
632 } | 675 } |
633 | 676 |
634 Iter iter(&defineDict); | 677 Iter iter(&defineDict); |
635 SkBenchmark* bench; | 678 SkBenchmark* bench; |
636 while ((bench = iter.next()) != NULL) { | 679 while ((bench = iter.next()) != NULL) { |
637 SkAutoTUnref<SkBenchmark> benchUnref(bench); | 680 SkAutoTUnref<SkBenchmark> benchUnref(bench); |
638 | 681 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 } | 883 } |
841 | 884 |
842 return 0; | 885 return 0; |
843 } | 886 } |
844 | 887 |
845 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 888 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
846 int main(int argc, char * const argv[]) { | 889 int main(int argc, char * const argv[]) { |
847 return tool_main(argc, (char**) argv); | 890 return tool_main(argc, (char**) argv); |
848 } | 891 } |
849 #endif | 892 #endif |
OLD | NEW |