Index: bench/AndroidCodecBench.cpp |
diff --git a/bench/AndroidCodecBench.cpp b/bench/AndroidCodecBench.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..97e11760440443f8bc43f68a9e79285027c329e4 |
--- /dev/null |
+++ b/bench/AndroidCodecBench.cpp |
@@ -0,0 +1,56 @@ |
+/* |
+ * Copyright 2016 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "AndroidCodecBench.h" |
+#include "CodecBenchPriv.h" |
+#include "SkBitmap.h" |
+#include "SkAndroidCodec.h" |
+#include "SkCommandLineFlags.h" |
+#include "SkOSFile.h" |
+ |
+AndroidCodecBench::AndroidCodecBench(SkString baseName, SkData* encoded, int sampleSize) |
+ : fData(SkRef(encoded)) |
+ , fSampleSize(sampleSize) |
+{ |
+ // Parse filename and the color type to give the benchmark a useful name |
+ fName.printf("AndroidCodec_%s_SampleSize%d", baseName.c_str(), sampleSize); |
+} |
+ |
+const char* AndroidCodecBench::onGetName() { |
+ return fName.c_str(); |
+} |
+ |
+bool AndroidCodecBench::isSuitableFor(Backend backend) { |
+ return kNonRendering_Backend == backend; |
+} |
+ |
+void AndroidCodecBench::onDelayedSetup() { |
+ SkAutoTDelete<SkAndroidCodec> codec(SkAndroidCodec::NewFromData(fData)); |
+ SkISize scaledSize = codec->getSampledDimensions(fSampleSize); |
+ |
+ fInfo = codec->getInfo().makeWH(scaledSize.width(), scaledSize.height()) |
+ .makeColorType(kN32_SkColorType); |
+ if (kUnpremul_SkAlphaType == fInfo.alphaType()) { |
+ fInfo = fInfo.makeAlphaType(kPremul_SkAlphaType); |
+ } |
+ |
+ fPixelStorage.reset(fInfo.getSafeSize(fInfo.minRowBytes())); |
+} |
+ |
+void AndroidCodecBench::onDraw(int n, SkCanvas* canvas) { |
+ SkAutoTDelete<SkAndroidCodec> codec; |
+ SkAndroidCodec::AndroidOptions options; |
+ options.fSampleSize = fSampleSize; |
+ for (int i = 0; i < n; i++) { |
+ codec.reset(SkAndroidCodec::NewFromData(fData)); |
+#ifdef SK_DEBUG |
+ const SkCodec::Result result = |
+#endif |
+ codec->getAndroidPixels(fInfo, fPixelStorage.get(), fInfo.minRowBytes(), &options); |
+ SkASSERT(result == SkCodec::kSuccess || result == SkCodec::kIncompleteInput); |
+ } |
+} |