aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/BitmapRegionDecoderBench.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bench/BitmapRegionDecoderBench.cpp')
-rw-r--r--bench/BitmapRegionDecoderBench.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/bench/BitmapRegionDecoderBench.cpp b/bench/BitmapRegionDecoderBench.cpp
new file mode 100644
index 0000000000..77d342331d
--- /dev/null
+++ b/bench/BitmapRegionDecoderBench.cpp
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "BitmapRegionDecoderBench.h"
+#include "CodecBenchPriv.h"
+#include "SkBitmap.h"
+#include "SkCodecTools.h"
+#include "SkOSFile.h"
+
+BitmapRegionDecoderBench::BitmapRegionDecoderBench(const char* baseName, SkData* encoded,
+ SkBitmapRegionDecoderInterface::Strategy strategy, SkColorType colorType,
+ uint32_t sampleSize, const SkIRect& subset)
+ : fBRD(nullptr)
+ , fData(SkRef(encoded))
+ , fStrategy(strategy)
+ , fColorType(colorType)
+ , fSampleSize(sampleSize)
+ , fSubset(subset)
+{
+ // Choose a useful name for the region decoding strategy
+ const char* strategyName;
+ switch (strategy) {
+ case SkBitmapRegionDecoderInterface::kOriginal_Strategy:
+ strategyName = "Original";
+ break;
+ case SkBitmapRegionDecoderInterface::kCanvas_Strategy:
+ strategyName = "Canvas";
+ break;
+ default:
+ SkASSERT(false);
+ strategyName = "";
+ break;
+ }
+
+ // Choose a useful name for the color type
+ const char* colorName = color_type_to_str(colorType);
+
+ fName.printf("BRD_%s_%s_%s", baseName, strategyName, colorName);
+ if (1 != sampleSize) {
+ fName.appendf("_%.3f", get_scale_from_sample_size(sampleSize));
+ }
+}
+
+const char* BitmapRegionDecoderBench::onGetName() {
+ return fName.c_str();
+}
+
+bool BitmapRegionDecoderBench::isSuitableFor(Backend backend) {
+ return kNonRendering_Backend == backend;
+}
+
+void BitmapRegionDecoderBench::onPreDraw() {
+ SkStreamRewindable* stream = new SkMemoryStream(fData);
+ fBRD.reset(SkBitmapRegionDecoderInterface::CreateBitmapRegionDecoder(stream, fStrategy));
+}
+
+void BitmapRegionDecoderBench::onDraw(const int n, SkCanvas* canvas) {
+ SkAutoTDelete<SkBitmap> bitmap;
+ for (int i = 0; i < n; i++) {
+ bitmap.reset(fBRD->decodeRegion(fSubset.left(), fSubset.top(), fSubset.width(),
+ fSubset.height(), fSampleSize, fColorType));
+ SkASSERT(nullptr != bitmap.get());
+ }
+}