| Index: src/core/SkOrderedReadBuffer.cpp | 
| diff --git a/src/core/SkOrderedReadBuffer.cpp b/src/core/SkOrderedReadBuffer.cpp | 
| index a5be45eab1bed3f76aa9f8d6ae0fe547acc81a6d..85491c5607545b04f8c48652399a611b3524cd21 100644 | 
| --- a/src/core/SkOrderedReadBuffer.cpp | 
| +++ b/src/core/SkOrderedReadBuffer.cpp | 
| @@ -23,7 +23,6 @@ SkOrderedReadBuffer::SkOrderedReadBuffer() : INHERITED() { | 
| fFactoryArray = NULL; | 
| fFactoryCount = 0; | 
| fBitmapDecoder = NULL; | 
| -    fPictureVersion = SkPicture::PICTURE_VERSION; | 
| } | 
|  | 
| SkOrderedReadBuffer::SkOrderedReadBuffer(const void* data, size_t size) : INHERITED()  { | 
| @@ -38,7 +37,6 @@ SkOrderedReadBuffer::SkOrderedReadBuffer(const void* data, size_t size) : INHERI | 
| fFactoryArray = NULL; | 
| fFactoryCount = 0; | 
| fBitmapDecoder = NULL; | 
| -    fPictureVersion = SkPicture::PICTURE_VERSION; | 
| } | 
|  | 
| SkOrderedReadBuffer::SkOrderedReadBuffer(SkStream* stream) { | 
| @@ -55,7 +53,6 @@ SkOrderedReadBuffer::SkOrderedReadBuffer(SkStream* stream) { | 
| fFactoryArray = NULL; | 
| fFactoryCount = 0; | 
| fBitmapDecoder = NULL; | 
| -    fPictureVersion = SkPicture::PICTURE_VERSION; | 
| } | 
|  | 
| SkOrderedReadBuffer::~SkOrderedReadBuffer() { | 
| @@ -171,88 +168,52 @@ uint32_t SkOrderedReadBuffer::getArrayCount() { | 
| return *(uint32_t*)fReader.peek(); | 
| } | 
|  | 
| -void SkOrderedReadBuffer::setPictureVersion(uint32_t version) { | 
| -    SkASSERT(version <= SkPicture::PICTURE_VERSION); | 
| -    fPictureVersion = version; | 
| -} | 
| - | 
| void SkOrderedReadBuffer::readBitmap(SkBitmap* bitmap) { | 
| -    if (10 == fPictureVersion) { | 
| -        // Old code to read a bitmap in PICTURE_VERSION 10 | 
| +    const int width = this->readInt(); | 
| +    const int height = this->readInt(); | 
| +    // The writer stored a boolean value to determine whether an SkBitmapHeap was used during | 
| +    // writing. | 
| +    if (this->readBool()) { | 
| +        // An SkBitmapHeap was used for writing. Read the index from the stream and find the | 
| +        // corresponding SkBitmap in fBitmapStorage. | 
| +        const uint32_t index = fReader.readU32(); | 
| +        fReader.readU32(); // bitmap generation ID (see SkOrderedWriteBuffer::writeBitmap) | 
| +        if (fBitmapStorage) { | 
| +            *bitmap = *fBitmapStorage->getBitmap(index); | 
| +            fBitmapStorage->releaseRef(index); | 
| +            return; | 
| +        } else { | 
| +            // The bitmap was stored in a heap, but there is no way to access it. Set an error and | 
| +            // fall through to use a place holder bitmap. | 
| +            SkErrorInternals::SetError(kParseError_SkError, "SkOrderedWriteBuffer::writeBitmap " | 
| +                                       "stored the SkBitmap in an SkBitmapHeap, but " | 
| +                                       "SkOrderedReadBuffer has no SkBitmapHeapReader to " | 
| +                                       "retrieve the SkBitmap."); | 
| +        } | 
| +    } else { | 
| +        // The writer stored false, meaning the SkBitmap was not stored in an SkBitmapHeap. | 
| const size_t length = this->readUInt(); | 
| if (length > 0) { | 
| -            // Bitmap was encoded. | 
| +            // A non-zero size means the SkBitmap was encoded. | 
| const void* data = this->skip(length); | 
| -            const int width = this->readInt(); | 
| -            const int height = this->readInt(); | 
| if (fBitmapDecoder != NULL && fBitmapDecoder(data, length, bitmap)) { | 
| SkASSERT(bitmap->width() == width && bitmap->height() == height); | 
| -            } else { | 
| -                // This bitmap was encoded when written, but we are unable to decode, possibly due to | 
| -                // not having a decoder. Use a placeholder bitmap. | 
| -                SkErrorInternals::SetError(kParseError_SkError, | 
| -                                           "Could not decode bitmap. Resulting bitmap will be red."); | 
| -                bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | 
| -                bitmap->allocPixels(); | 
| -                bitmap->eraseColor(SK_ColorRED); | 
| -            } | 
| -        } else { | 
| -            if (fBitmapStorage) { | 
| -                const uint32_t index = fReader.readU32(); | 
| -                fReader.readU32(); // bitmap generation ID (see SkOrderedWriteBuffer::writeBitmap) | 
| -                *bitmap = *fBitmapStorage->getBitmap(index); | 
| -                fBitmapStorage->releaseRef(index); | 
| -            } else { | 
| -                bitmap->unflatten(*this); | 
| -            } | 
| -        } | 
| -    } else { | 
| -        const int width = this->readInt(); | 
| -        const int height = this->readInt(); | 
| -        // The writer stored a boolean value to determine whether an SkBitmapHeap was used during | 
| -        // writing. | 
| -        if (this->readBool()) { | 
| -            // An SkBitmapHeap was used for writing. Read the index from the stream and find the | 
| -            // corresponding SkBitmap in fBitmapStorage. | 
| -            const uint32_t index = fReader.readU32(); | 
| -            fReader.readU32(); // bitmap generation ID (see SkOrderedWriteBuffer::writeBitmap) | 
| -            if (fBitmapStorage) { | 
| -                *bitmap = *fBitmapStorage->getBitmap(index); | 
| -                fBitmapStorage->releaseRef(index); | 
| return; | 
| -            } else { | 
| -                // The bitmap was stored in a heap, but there is no way to access it. Set an error and | 
| -                // fall through to use a place holder bitmap. | 
| -                SkErrorInternals::SetError(kParseError_SkError, "SkOrderedWriteBuffer::writeBitmap " | 
| -                                           "stored the SkBitmap in an SkBitmapHeap, but " | 
| -                                           "SkOrderedReadBuffer has no SkBitmapHeapReader to " | 
| -                                           "retrieve the SkBitmap."); | 
| } | 
| +            // This bitmap was encoded when written, but we are unable to decode, possibly due to | 
| +            // not having a decoder. | 
| +            SkErrorInternals::SetError(kParseError_SkError, | 
| +                                       "Could not decode bitmap. Resulting bitmap will be red."); | 
| } else { | 
| -            // The writer stored false, meaning the SkBitmap was not stored in an SkBitmapHeap. | 
| -            const size_t length = this->readUInt(); | 
| -            if (length > 0) { | 
| -                // A non-zero size means the SkBitmap was encoded. | 
| -                const void* data = this->skip(length); | 
| -                if (fBitmapDecoder != NULL && fBitmapDecoder(data, length, bitmap)) { | 
| -                    SkASSERT(bitmap->width() == width && bitmap->height() == height); | 
| -                    return; | 
| -                } | 
| -                // This bitmap was encoded when written, but we are unable to decode, possibly due to | 
| -                // not having a decoder. | 
| -                SkErrorInternals::SetError(kParseError_SkError, | 
| -                                           "Could not decode bitmap. Resulting bitmap will be red."); | 
| -            } else { | 
| -                // A size of zero means the SkBitmap was simply flattened. | 
| -                bitmap->unflatten(*this); | 
| -                return; | 
| -            } | 
| +            // A size of zero means the SkBitmap was simply flattened. | 
| +            bitmap->unflatten(*this); | 
| +            return; | 
| } | 
| -        // Could not read the SkBitmap. Use a placeholder bitmap. | 
| -        bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | 
| -        bitmap->allocPixels(); | 
| -        bitmap->eraseColor(SK_ColorRED); | 
| } | 
| +    // Could not read the SkBitmap. Use a placeholder bitmap. | 
| +    bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | 
| +    bitmap->allocPixels(); | 
| +    bitmap->eraseColor(SK_ColorRED); | 
| } | 
|  | 
| SkTypeface* SkOrderedReadBuffer::readTypeface() { | 
|  |