Adding flag to switch bench_record into tilegrid mode
authorcommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 28 Feb 2014 19:25:11 +0000 (19:25 +0000)
committercommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 28 Feb 2014 19:25:11 +0000 (19:25 +0000)
BUG=skia:
R=tomhudson@google.com, mtklein@google.com, skyostil@google.com, skyostil@chromium.org

Author: iancottrell@google.com

Review URL: https://codereview.chromium.org/184543003

git-svn-id: http://skia.googlecode.com/svn/trunk@13628 2bbb7eff-a529-9590-31e7-b0007b416f81

tools/bench_record.cpp

index cea3f0b6267ac34fcb4cfab0c55559bae11e0bcb..8faf81bbea7c58ba05d9c6dc6b95c3ae80f07caf 100644 (file)
@@ -12,6 +12,7 @@
 #include "SkPicture.h"
 #include "SkStream.h"
 #include "SkString.h"
+#include "SkTileGridPicture.h"
 #include "SkTime.h"
 
 __SK_FORCE_IMAGE_DECODER_LINKING;
@@ -25,6 +26,7 @@ DEFINE_int32(loops, 900, "Number of times to re-record each SKP.");
 DEFINE_int32(flags, SkPicture::kUsePathBoundsForClip_RecordingFlag, "RecordingFlags to use.");
 DEFINE_bool(endRecording, true, "If false, don't time SkPicture::endRecording()");
 DEFINE_int32(nullSize, 1000, "Pretend dimension of null source picture.");
+DEFINE_int32(tileGridSize, 0, "Set the tile grid size, if non zero switches to tile grid picture and enables kOptimizeForClippedPlayback_RecordingFlag.");
 
 static void bench_record(SkPicture* src, const char* name) {
     const SkMSec start = SkTime::GetMSecs();
@@ -32,10 +34,21 @@ static void bench_record(SkPicture* src, const char* name) {
     const int height = src ? src->height() : FLAGS_nullSize;
 
     for (int i = 0; i < FLAGS_loops; i++) {
-        SkPicture dst;
-        SkCanvas* canvas = dst.beginRecording(width, height, FLAGS_flags);
+        SkAutoTUnref<SkPicture> dst;
+        int recordingFlags = FLAGS_flags;
+        if (FLAGS_tileGridSize > 0) {
+            SkTileGridPicture::TileGridInfo info;
+            info.fTileInterval.set(FLAGS_tileGridSize, FLAGS_tileGridSize);
+            info.fMargin.setEmpty();
+            info.fOffset.setZero();
+            dst.reset(SkNEW_ARGS(SkTileGridPicture, (width, height, info)));
+            recordingFlags |= SkPicture::kOptimizeForClippedPlayback_RecordingFlag;
+        } else {
+            dst.reset(SkNEW(SkPicture));
+        }
+        SkCanvas* canvas = dst->beginRecording(width, height, recordingFlags);
         if (src) src->draw(canvas);
-        if (FLAGS_endRecording) dst.endRecording();
+        if (FLAGS_endRecording) dst->endRecording();
     }
 
     const SkMSec elapsed = SkTime::GetMSecs() - start;