Index: bench/benchmain.cpp |
=================================================================== |
--- bench/benchmain.cpp (revision 8044) |
+++ bench/benchmain.cpp (working copy) |
@@ -281,8 +281,13 @@ |
SkDebugf("Usage: bench [-o outDir] [--repeat nr] [--logPerIter] " |
"[--timers [wcgWC]*] [--rotate]\n" |
" [--scale] [--clip] [--min] [--forceAA 1|0] [--forceFilter 1|0]\n" |
- " [--forceDither 1|0] [--forceBlend 1|0] [--strokeWidth width]\n" |
- " [--match name] [--mode normal|deferred|deferredSilent|record|picturerecord]\n" |
+ " [--forceDither 1|0] [--forceBlend 1|0]" |
+#if SK_SUPPORT_GPU |
+ " [--gpuCacheSize <bytes> <count>]" |
+#endif |
+ "\n" |
+ " [--strokeWidth width] [--match name]\n" |
+ " [--mode normal|deferred|deferredSilent|record|picturerecord]\n" |
" [--config 8888|565|GPU|ANGLE|NULLGPU] [-Dfoo bar] [--logFile filename]\n" |
" [-h|--help]"); |
SkDebugf("\n\n"); |
@@ -304,6 +309,11 @@ |
"Enable/disable dithering, default is disabled.\n"); |
SkDebugf(" --forceBlend 1|0 : " |
"Enable/disable dithering, default is disabled.\n"); |
+#if SK_SUPPORT_GPU |
+ SkDebugf(" --gpuCacheSize <bytes> <count>: " |
+ "limits gpu cache to bytes size or object count.\n"); |
+ SkDebugf(" -1 for either value means use the default. 0 for either disables the cache.\n"); |
+#endif |
SkDebugf(" --strokeWidth width : The width for path stroke.\n"); |
SkDebugf(" --match name : Only run bench whose name is matched.\n"); |
SkDebugf(" --mode normal|deferred|deferredSilent|record|picturerecord :\n" |
@@ -350,6 +360,14 @@ |
bool doClip = false; |
bool printMin = false; |
bool hasStrokeWidth = false; |
+ |
+#if SK_SUPPORT_GPU |
+ struct { |
+ size_t fBytes; |
+ int fCount; |
+ } gpuCacheSize = { -1, -1 }; // -1s mean use the default |
+#endif |
+ |
float strokeWidth; |
SkTDArray<const char*> fMatches; |
benchModes benchMode = kNormal_benchModes; |
@@ -447,6 +465,17 @@ |
return -1; |
} |
forceAlpha = wantAlpha ? 0x80 : 0xFF; |
+#if SK_SUPPORT_GPU |
+ } else if (strcmp(*argv, "--gpuCacheSize") == 0) { |
+ if (stop - argv > 2) { |
+ gpuCacheSize.fBytes = atoi(*++argv); |
+ gpuCacheSize.fCount = atoi(*++argv); |
+ } else { |
+ SkDebugf("missing arg for --gpuCacheSize\n"); |
+ help(); |
+ return -1; |
+ } |
+#endif |
} else if (strcmp(*argv, "--mode") == 0) { |
argv++; |
if (argv < stop) { |
@@ -621,11 +650,25 @@ |
SkTArray<BenchTimer*> timers(SK_ARRAY_COUNT(gConfigs)); |
for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); ++i) { |
#if SK_SUPPORT_GPU |
- SkGLContextHelper* ctx = NULL; |
+ SkGLContextHelper* glCtx = NULL; |
if (kGPU_Backend == gConfigs[i].fBackend) { |
- ctx = gContextFactory.getGLContext(gConfigs[i].fContextType); |
+ GrContext* context = gContextFactory.get(gConfigs[i].fContextType); |
+ if (NULL != context) { |
+ // Set the user specified cache limits if non-default. |
+ size_t bytes; |
+ int count; |
+ context->getTextureCacheLimits(&count, &bytes); |
+ if (-1 != gpuCacheSize.fBytes) { |
+ bytes = gpuCacheSize.fBytes; |
+ } |
+ if (-1 != gpuCacheSize.fCount) { |
+ count = gpuCacheSize.fCount; |
+ } |
+ context->setTextureCacheLimits(count, bytes); |
+ } |
+ glCtx = gContextFactory.getGLContext(gConfigs[i].fContextType); |
} |
- timers.push_back(SkNEW_ARGS(BenchTimer, (ctx))); |
+ timers.push_back(SkNEW_ARGS(BenchTimer, (glCtx))); |
#else |
timers.push_back(SkNEW(BenchTimer)); |
#endif |