Index: bench/AndroidCodecBench.cpp |
diff --git a/bench/AndroidCodecBench.cpp b/bench/AndroidCodecBench.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..01aae791990a4c0826695773bbbc8388a57a4b08 |
--- /dev/null |
+++ b/bench/AndroidCodecBench.cpp |
@@ -0,0 +1,56 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
scroggo
2016/02/10 16:29:49
nit 2016
msarett
2016/02/11 14:07:15
Done.
|
+ * |
+ * 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); |
scroggo
2016/02/10 16:29:49
This just occurred to me - should we print the ben
msarett
2016/02/10 20:06:45
Do you think I should change the name to match the
scroggo
2016/02/10 21:13:54
My idea was that the name did not include the type
msarett
2016/02/11 14:07:15
Ahh ok I understand. I think it's a good idea, bu
scroggo
2016/02/11 14:08:54
sgtm
|
+} |
+ |
+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); |
scroggo
2016/02/10 16:29:49
why only n32, and only premul?
- edit: looking do
msarett
2016/02/10 20:06:45
Yep that's right
|
+ 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); |
+ } |
+} |