aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/utils/SkFrontBufferedStream.cpp4
-rw-r--r--tests/CodexTest.cpp15
-rw-r--r--tests/FrontBufferedStreamTest.cpp13
-rw-r--r--tests/StreamTest.cpp5
4 files changed, 21 insertions, 16 deletions
diff --git a/src/utils/SkFrontBufferedStream.cpp b/src/utils/SkFrontBufferedStream.cpp
index e0b586a29d..a0dbeb6a7a 100644
--- a/src/utils/SkFrontBufferedStream.cpp
+++ b/src/utils/SkFrontBufferedStream.cpp
@@ -22,10 +22,6 @@ public:
bool rewind() override;
- bool hasPosition() const override { return true; }
-
- size_t getPosition() const override { return fOffset; }
-
bool hasLength() const override { return fHasLength; }
size_t getLength() const override { return fLength; }
diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp
index c5651ac0af..a0789fb819 100644
--- a/tests/CodexTest.cpp
+++ b/tests/CodexTest.cpp
@@ -11,6 +11,7 @@
#include "SkCodec.h"
#include "SkCodecImageGenerator.h"
#include "SkData.h"
+#include "SkFrontBufferedStream.h"
#include "SkImageDecoder.h"
#include "SkMD5.h"
#include "SkRandom.h"
@@ -180,7 +181,7 @@ static void check(skiatest::Reporter* r,
// Test full image decodes with SkCodec
SkMD5::Digest codecDigest;
- SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType);
+ const SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType);
SkBitmap bm;
SkCodec::Result expectedResult = isIncomplete ? SkCodec::kIncompleteInput : SkCodec::kSuccess;
test_codec(r, codec.get(), bm, info, size, expectedResult, &codecDigest, nullptr);
@@ -313,8 +314,8 @@ static void check(skiatest::Reporter* r,
&codecDigest);
}
- // Test SkCodecImageGenerator
if (!isIncomplete) {
+ // Test SkCodecImageGenerator
SkAutoTDelete<SkStream> stream(resource(path));
SkAutoTUnref<SkData> fullData(SkData::NewFromStream(stream, stream->getLength()));
SkAutoTDelete<SkImageGenerator> gen(SkCodecImageGenerator::NewFromEncodedCodec(fullData));
@@ -323,6 +324,16 @@ static void check(skiatest::Reporter* r,
SkAutoLockPixels autoLockPixels(bm);
REPORTER_ASSERT(r, gen->getPixels(info, bm.getPixels(), bm.rowBytes()));
compare_to_good_digest(r, codecDigest, bm);
+
+ // Test using SkFrontBufferedStream, as Android does
+ SkStream* bufferedStream = SkFrontBufferedStream::Create(new SkMemoryStream(fullData),
+ SkCodec::MinBufferedBytesNeeded());
+ REPORTER_ASSERT(r, bufferedStream);
+ codec.reset(SkCodec::NewFromStream(bufferedStream));
+ REPORTER_ASSERT(r, codec);
+ if (codec) {
+ test_info(r, codec.get(), info, SkCodec::kSuccess, &codecDigest);
+ }
}
// If we've just tested incomplete decodes, let's run the same test again on full decodes.
diff --git a/tests/FrontBufferedStreamTest.cpp b/tests/FrontBufferedStreamTest.cpp
index 0b161b96d8..7821c5e40d 100644
--- a/tests/FrontBufferedStreamTest.cpp
+++ b/tests/FrontBufferedStreamTest.cpp
@@ -68,7 +68,7 @@ static void test_incremental_buffering(skiatest::Reporter* reporter, size_t buff
test_read(reporter, bufferedStream, gAbcs, bufferSize / 4);
// Now test reading part of what was buffered, and buffering new data.
- test_read(reporter, bufferedStream, gAbcs + bufferedStream->getPosition(), bufferSize / 2);
+ test_read(reporter, bufferedStream, gAbcs + bufferSize / 4, bufferSize / 2);
// Now test reading what was buffered, buffering new data, and
// reading directly from the stream.
@@ -96,7 +96,7 @@ static void test_perfectly_sized_buffer(skiatest::Reporter* reporter, size_t buf
test_read(reporter, bufferedStream, gAbcs, bufferSize);
// Read past the size of the buffer. At this point, we cannot return.
- test_read(reporter, bufferedStream, gAbcs + bufferedStream->getPosition(), 1);
+ test_read(reporter, bufferedStream, gAbcs + memStream->getPosition(), 1);
test_rewind(reporter, bufferedStream, false);
}
@@ -116,7 +116,7 @@ static void test_skipping(skiatest::Reporter* reporter, size_t bufferSize) {
bufferedStream->skip(bufferSize / 2);
// Test that reading will still work.
- test_read(reporter, bufferedStream, gAbcs + bufferedStream->getPosition(), bufferSize / 4);
+ test_read(reporter, bufferedStream, gAbcs + memStream->getPosition(), bufferSize / 4);
test_rewind(reporter, bufferedStream, true);
test_read(reporter, bufferedStream, gAbcs, bufferSize);
@@ -219,13 +219,12 @@ static void test_initial_offset(skiatest::Reporter* reporter, size_t bufferSize)
memStream->skip(arbitraryOffset);
SkAutoTDelete<SkStream> bufferedStream(SkFrontBufferedStream::Create(memStream, bufferSize));
- // Since SkMemoryStream has a length and a position, bufferedStream must also.
+ // Since SkMemoryStream has a length, bufferedStream must also.
REPORTER_ASSERT(reporter, bufferedStream->hasLength());
const size_t amountToRead = 10;
const size_t bufferedLength = bufferedStream->getLength();
- size_t currentPosition = bufferedStream->getPosition();
- REPORTER_ASSERT(reporter, 0 == currentPosition);
+ size_t currentPosition = 0;
// Read the stream in chunks. After each read, the position must match currentPosition,
// which sums the amount attempted to read, unless the end of the stream has been reached.
@@ -235,7 +234,7 @@ static void test_initial_offset(skiatest::Reporter* reporter, size_t bufferSize)
test_read(reporter, bufferedStream, gAbcs + arbitraryOffset + currentPosition,
amountToRead);
currentPosition = SkTMin(currentPosition + amountToRead, bufferedLength);
- REPORTER_ASSERT(reporter, bufferedStream->getPosition() == currentPosition);
+ REPORTER_ASSERT(reporter, memStream->getPosition() - arbitraryOffset == currentPosition);
}
REPORTER_ASSERT(reporter, bufferedStream->isAtEnd());
REPORTER_ASSERT(reporter, bufferedLength == currentPosition);
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp
index 15ebfcf07d..2a60a7b10f 100644
--- a/tests/StreamTest.cpp
+++ b/tests/StreamTest.cpp
@@ -266,12 +266,11 @@ static void test_peeking_front_buffered_stream(skiatest::Reporter* r,
for (size_t start = 0; start <= bufferSize; start++) {
// Skip to the starting point
REPORTER_ASSERT(r, bufferedStream->skip(start) == start);
- REPORTER_ASSERT(r, bufferedStream->getPosition() == start);
const size_t bytesPeeked = bufferedStream->peek(peekStorage.get(), bytesToPeek);
if (0 == bytesPeeked) {
- // Peeking should only fail completely if we have read beyond the buffer.
- REPORTER_ASSERT(r, bufferedStream->getPosition() >= bufferSize);
+ // Peeking should only fail completely if we have read/skipped beyond the buffer.
+ REPORTER_ASSERT(r, start >= bufferSize);
break;
}