Revert of Avoid too small reads to bufferMoreData() (patchset #4 id:60001 of https...
authorjcgregorio <jcgregorio@google.com>
Tue, 2 Feb 2016 13:36:34 +0000 (05:36 -0800)
committerCommit bot <commit-bot@chromium.org>
Tue, 2 Feb 2016 13:36:34 +0000 (05:36 -0800)
Reason for revert:
Crashed both Nexus 5s:

  https://build.chromium.org/p/client.skia.android/builders/Perf-Android-GCC-Nexus5-CPU-NEON-Arm7-Release/builds/3355
https://build.chromium.org/p/client.skia.android/builders/Perf-Android-GCC-Nexus5-CPU-NEON-Arm7-Release/builds/3354

Original issue's description:
> Avoid too small reads to bufferMoreData()
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1644893003
>
> Committed: https://skia.googlesource.com/skia/+/fd918e8c739065fa467cf6614181d3a2c5dcadcb

TBR=msarett@google.com,scroggo@google.com,yujieqin@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/1656303002

src/codec/SkRawCodec.cpp

index c7de317..da3c28c 100644 (file)
@@ -267,13 +267,10 @@ private:
             return false;
         }
 
-        // 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 sizeToRead = newSize - fStreamBuffer.bytesWritten();
+        SkAutoTMalloc<uint8> tempBuffer(sizeToRead);
         const size_t bytesRead = fStream->read(tempBuffer.get(), sizeToRead);
-        if (bytesRead < sizeRequested) {
+        if (bytesRead != sizeToRead) {
             return false;
         }
         return fStreamBuffer.write(tempBuffer.get(), bytesRead);
@@ -441,6 +438,9 @@ 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);