Index: bench/DecodingBench.cpp |
diff --git a/bench/DecodingBench.cpp b/bench/DecodingBench.cpp |
index c8490ca7a89cf2d91fa8f5aa0b4866d3ee5b18cd..31796565d46cac19cda5a77ed27a6641d78f304c 100644 |
--- a/bench/DecodingBench.cpp |
+++ b/bench/DecodingBench.cpp |
@@ -41,7 +41,11 @@ DecodingBench::DecodingBench(SkString path, SkColorType colorType) |
// Perform setup for the decode |
SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
fStream.reset(new SkMemoryStream(encoded)); |
- fDecoder.reset(SkImageDecoder::Factory(fStream.get())); |
+#ifdef SK_DEBUG |
+ // Ensure that we can create a decoder. |
+ SkAutoTDelete<SkImageDecoder> decoder(SkImageDecoder::Factory(fStream.get())); |
+ SkASSERT(decoder != NULL); |
+#endif |
} |
const char* DecodingBench::onGetName() { |
@@ -54,9 +58,13 @@ bool DecodingBench::isSuitableFor(Backend backend) { |
void DecodingBench::onDraw(const int n, SkCanvas* canvas) { |
SkBitmap bitmap; |
+ SkAutoTDelete<SkImageDecoder> decoder; |
+ SkAutoTDelete<SkStreamRewindable> stream; |
for (int i = 0; i < n; i++) { |
- fStream->rewind(); |
- fDecoder->decode(fStream, &bitmap, fColorType, |
- SkImageDecoder::kDecodePixels_Mode); |
+ // duplicate the stream and create a new decoder to mimic the behavior of CodecBench. |
+ stream.reset(fStream->duplicate()); |
+ decoder.reset(SkImageDecoder::Factory(stream)); |
+ decoder->decode(stream, &bitmap, fColorType, |
+ SkImageDecoder::kDecodePixels_Mode); |
} |
} |