Chromium Code Reviews| Index: src/core/SkPicturePlayback.cpp |
| diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp |
| index e71a17fda51095ec44fa49d4e4aa6f81b2493b0b..2259be3a759ccc1465c6993f7e39753331d75131 100644 |
| --- a/src/core/SkPicturePlayback.cpp |
| +++ b/src/core/SkPicturePlayback.cpp |
| @@ -431,6 +431,22 @@ void SkPicturePlayback::serialize(SkWStream* stream, |
| stream->write32(PICT_EOF_TAG); |
| } |
| +void SkPicturePlayback::flatten(SkWriteBuffer& buffer) const { |
| + writeTagSize(buffer, PICT_READER_TAG, fOpData->size()); |
| + buffer.writeByteArray(fOpData->bytes(), fOpData->size()); |
| + |
| + if (fPictureCount > 0) { |
| + writeTagSize(buffer, PICT_PICTURE_TAG, fPictureCount); |
| + for (int i = 0; i < fPictureCount; i++) { |
| + fPictureRefs[i]->flatten(buffer); |
| + } |
| + } |
| + |
| + // Write some of our data into a writebuffer |
|
Stephen White
2014/02/05 16:44:39
Not sure I understand what "some of our data" mean
sugoi1
2014/02/05 16:48:58
That's a copy-paste from SkPicturePlayback::serial
|
| + this->flattenToBuffer(buffer); |
| + buffer.write32(PICT_EOF_TAG); |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| /** |
| @@ -593,6 +609,15 @@ SkPicturePlayback* SkPicturePlayback::CreateFromStream(SkStream* stream, |
| return playback.detach(); |
| } |
| +SkPicturePlayback* SkPicturePlayback::CreateFromBuffer(SkReadBuffer& buffer) { |
| + SkAutoTDelete<SkPicturePlayback> playback(SkNEW(SkPicturePlayback)); |
| + |
| + if (!playback->parseBuffer(buffer)) { |
| + return NULL; |
| + } |
| + return playback.detach(); |
| +} |
| + |
| bool SkPicturePlayback::parseStream(SkStream* stream, const SkPictInfo& info, |
| SkPicture::InstallPixelRefProc proc) { |
| for (;;) { |
| @@ -609,6 +634,21 @@ bool SkPicturePlayback::parseStream(SkStream* stream, const SkPictInfo& info, |
| return true; |
| } |
| +bool SkPicturePlayback::parseBuffer(SkReadBuffer& buffer) { |
| + for (;;) { |
| + uint32_t tag = buffer.readUInt(); |
| + if (PICT_EOF_TAG == tag) { |
| + break; |
| + } |
| + |
| + uint32_t size = buffer.readUInt(); |
| + if (!this->parseBufferTag(buffer, tag, size)) { |
| + return false; // we're invalid |
| + } |
| + } |
| + return true; |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| /////////////////////////////////////////////////////////////////////////////// |