| Index: tools/bench_pictures_main.cpp
|
| diff --git a/tools/bench_pictures_main.cpp b/tools/bench_pictures_main.cpp
|
| index ffcab747720e5e765cab6e06b66b2615c935d715..0c7644f2441613caf6ed2c160de98bf5f67b1556 100644
|
| --- a/tools/bench_pictures_main.cpp
|
| +++ b/tools/bench_pictures_main.cpp
|
| @@ -44,6 +44,9 @@ DEFINE_bool(timeIndividualTiles, false, "Report times for drawing individual til
|
| "times for drawing the whole page. Requires tiled rendering.");
|
| DEFINE_string(timers, "", "[wcgWC]*: Display wall, cpu, gpu, truncated wall or truncated cpu time"
|
| " for each picture.");
|
| +DEFINE_bool(trackDeferredCaching, false, "Only meaningful with --deferImageDecoding and "
|
| + "LAZY_CACHE_STATS set to true. Report percentage of cache hits when using deferred "
|
| + "image decoding.");
|
|
|
| static char const * const gFilterTypes[] = {
|
| "paint",
|
| @@ -140,6 +143,7 @@ static SkString filterFlagsUsage() {
|
|
|
| #include "SkData.h"
|
| #include "SkLruImageCache.h"
|
| +#include "SkLazyPixelRef.h"
|
|
|
| static SkLruImageCache gLruImageCache(1024*1024);
|
|
|
| @@ -152,6 +156,11 @@ static bool lazy_decode_bitmap(const void* buffer, size_t size, SkBitmap* bitmap
|
| return factory.installPixelRef(data, bitmap);
|
| }
|
|
|
| +#if LAZY_CACHE_STATS
|
| +static int32_t gTotalCacheHits;
|
| +static int32_t gTotalCacheMisses;
|
| +#endif
|
| +
|
| static bool run_single_benchmark(const SkString& inputPath,
|
| sk_tools::PictureBenchmark& benchmark) {
|
| SkFILEStream inputStream;
|
| @@ -189,6 +198,18 @@ static bool run_single_benchmark(const SkString& inputPath,
|
| gLogger.logProgress(result);
|
|
|
| benchmark.run(picture);
|
| +
|
| +#if LAZY_CACHE_STATS
|
| + if (FLAGS_trackDeferredCaching) {
|
| + int32_t cacheHits = SkLazyPixelRef::GetCacheHits();
|
| + int32_t cacheMisses = SkLazyPixelRef::GetCacheMisses();
|
| + SkLazyPixelRef::ResetCacheStats();
|
| + SkDebugf("Cache hit rate: %f\n", (double) cacheHits / (cacheHits + cacheMisses));
|
| + gTotalCacheHits += cacheHits;
|
| + gTotalCacheMisses += cacheMisses;
|
| + }
|
| +#endif
|
| +
|
| return true;
|
| }
|
|
|
| @@ -200,12 +221,12 @@ static void setup_benchmark(sk_tools::PictureBenchmark* benchmark) {
|
| const char* filters = FLAGS_filter[0];
|
| const char* colon = strchr(filters, ':');
|
| if (colon) {
|
| - int type = -1;
|
| + int32_t type = -1;
|
| size_t typeLen = colon - filters;
|
| for (size_t tIndex = 0; tIndex < kFilterTypesCount; ++tIndex) {
|
| if (typeLen == strlen(gFilterTypes[tIndex])
|
| && !strncmp(filters, gFilterTypes[tIndex], typeLen)) {
|
| - type = tIndex;
|
| + type = SkToS32(tIndex);
|
| break;
|
| }
|
| }
|
| @@ -396,6 +417,12 @@ int tool_main(int argc, char** argv) {
|
| gLogger.logError(err);
|
| return 1;
|
| }
|
| +#if LAZY_CACHE_STATS
|
| + if (FLAGS_trackDeferredCaching) {
|
| + SkDebugf("Total cache hit rate: %f\n",
|
| + (double) gTotalCacheHits / (gTotalCacheHits + gTotalCacheMisses));
|
| + }
|
| +#endif
|
| return 0;
|
| }
|
|
|
|
|