aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/RecordingBench.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bench/RecordingBench.cpp')
-rw-r--r--bench/RecordingBench.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/bench/RecordingBench.cpp b/bench/RecordingBench.cpp
new file mode 100644
index 0000000000..ee626bc52c
--- /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());
+ }
+}