Index: bench/RecordingBench.cpp |
diff --git a/bench/RecordingBench.cpp b/bench/RecordingBench.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee626bc52cdde3ff5a62478fc7f5bebdb01dc536 |
--- /dev/null |
+++ b/bench/RecordingBench.cpp |
@@ -0,0 +1,48 @@ |
+/* |
+ * Copyright 2014 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "RecordingBench.h" |
+ |
+#include "SkBBHFactory.h" |
+#include "SkPictureRecorder.h" |
+ |
+static const int kTileSize = 256; |
+ |
+RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH) |
+ : fSrc(SkRef(pic)) |
+ , fName(name) |
+ , fUseBBH(useBBH) {} |
+ |
+const char* RecordingBench::onGetName() { |
+ return fName.c_str(); |
+} |
+ |
+bool RecordingBench::isSuitableFor(Backend backend) { |
+ return backend == kNonRendering_Backend; |
+} |
+ |
+SkIPoint RecordingBench::onGetSize() { |
+ return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()), |
+ SkScalarCeilToInt(fSrc->cullRect().height())); |
+} |
+ |
+void RecordingBench::onDraw(const int loops, SkCanvas*) { |
+ SkTileGridFactory::TileGridInfo info; |
+ info.fTileInterval.set(kTileSize, kTileSize); |
+ info.fMargin.setEmpty(); |
+ info.fOffset.setZero(); |
+ SkTileGridFactory factory(info); |
+ |
+ const SkScalar w = fSrc->cullRect().width(), |
+ h = fSrc->cullRect().height(); |
+ |
+ for (int i = 0; i < loops; i++) { |
+ SkPictureRecorder recorder; |
+ fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : NULL)); |
+ SkDELETE(recorder.endRecording()); |
+ } |
+} |