Index: bench/BitmapRegionDecoderBench.cpp |
diff --git a/bench/BitmapRegionDecoderBench.cpp b/bench/BitmapRegionDecoderBench.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7df20eb6c8ef37f88b63b1faac3756e51f73f648 |
--- /dev/null |
+++ b/bench/BitmapRegionDecoderBench.cpp |
@@ -0,0 +1,85 @@ |
+/* |
+ * 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 "SkBitmap.h" |
+#include "SkOSFile.h" |
+ |
+// FIXME (msarett): How can we share this code with DM? |
+static float get_scale_from_sample_size(uint32_t sampleSize) { |
+ return 1.0f / (float) sampleSize; |
+} |
+ |
+BitmapRegionDecoderBench::BitmapRegionDecoderBench(SkString baseName, SkData* encoded, |
+ SkBitmapRegionDecoderInterface::Strategy strategy, SkColorType colorType, |
+ uint32_t sampleSize, const SkIRect& subset) |
+ : 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; |
+ switch (colorType) { |
+ case kN32_SkColorType: |
scroggo
2015/09/17 20:05:38
This switch statement shows up a lot. Maybe we can
msarett
2015/09/18 13:22:30
I moved something into tools, but, on second look,
mtklein
2015/09/18 13:26:51
If the function's defined in the header, you'll wa
msarett
2015/09/18 17:41:17
Thanks for your explanation!
|
+ colorName = "N32"; |
+ break; |
+ case kRGB_565_SkColorType: |
+ colorName = "565"; |
+ break; |
+ case kGray_8_SkColorType: |
+ colorName = "Gray8"; |
+ break; |
+ case kIndex_8_SkColorType: |
+ colorName = "Index8"; |
+ break; |
+ default: |
+ colorName = "Unknown"; |
+ } |
+ if (1 == sampleSize) { |
+ fName.printf("BRD_%s_%s_%s", baseName.c_str(), strategyName, colorName); |
+ } else { |
+ fName.printf("BRD_%s_%s_%s_%.3f", baseName.c_str(), strategyName, colorName, |
+ 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::onDraw(const int n, SkCanvas* canvas) { |
+ SkAutoTDelete<SkBitmapRegionDecoderInterface> brd; |
+ SkAutoTDelete<SkBitmap> bitmap; |
+ for (int i = 0; i < n; i++) { |
+ SkStreamRewindable* stream = new SkMemoryStream(fData); |
+ brd.reset(SkBitmapRegionDecoderInterface::CreateBitmapRegionDecoder(stream, fStrategy)); |
+ bitmap.reset(brd->decodeRegion(fSubset.left(), fSubset.top(), fSubset.width(), |
+ fSubset.height(), fSampleSize, fColorType)); |
+ SkASSERT(nullptr != bitmap.get()); |
+ } |
+} |