aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar yujieqin <yujieqin@google.com>2016-02-02 08:09:07 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-02 08:09:07 -0800
commit22000d1f8e2c554aec2f50a5a4cad0a5d04ca41c (patch)
tree386d41c0c496005e3a1a1c2785816aeae2d1edd0
parenta341b90c7fc68f7ccdcf024ed753dcc6781a823e (diff)
Avoid too small reads to bufferMoreData()
-rw-r--r--src/codec/SkRawCodec.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/codec/SkRawCodec.cpp b/src/codec/SkRawCodec.cpp
index da3c28c549..c7de317286 100644
--- a/src/codec/SkRawCodec.cpp
+++ b/src/codec/SkRawCodec.cpp
@@ -267,10 +267,13 @@ private:
return false;
}
- const size_t sizeToRead = newSize - fStreamBuffer.bytesWritten();
- SkAutoTMalloc<uint8> tempBuffer(sizeToRead);
+ // Try to read at least 8192 bytes to avoid to many small reads.
+ const size_t kMinSizeToRead = 8192;
+ const size_t sizeRequested = newSize - fStreamBuffer.bytesWritten();
+ const size_t sizeToRead = SkTMax(kMinSizeToRead, sizeRequested);
+ SkAutoSTMalloc<kMinSizeToRead, uint8> tempBuffer(sizeToRead);
const size_t bytesRead = fStream->read(tempBuffer.get(), sizeToRead);
- if (bytesRead != sizeToRead) {
+ if (bytesRead < sizeRequested) {
return false;
}
return fStreamBuffer.write(tempBuffer.get(), bytesRead);
@@ -438,9 +441,6 @@ private:
SkCodec* SkRawCodec::NewFromStream(SkStream* stream) {
SkAutoTDelete<SkRawStream> rawStream(new SkRawStream(stream));
::piex::PreviewImageData imageData;
- // FIXME: ::piex::GetPreviewImageData() calls GetData() frequently with small amounts,
- // resulting in many calls to bufferMoreData(). Could we make this more efficient by grouping
- // smaller requests together?
if (::piex::IsRaw(rawStream.get())) {
::piex::Error error = ::piex::GetPreviewImageData(rawStream.get(), &imageData);