Chromium Code Reviews| Index: src/core/SkPicture.cpp |
| diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp |
| index f83a5fb9aadc33ff1aacdefa42b3244bbbaec4a7..d5edd24f9f1dce3ce2ad1d46c8c76d9cba92ab09 100644 |
| --- a/src/core/SkPicture.cpp |
| +++ b/src/core/SkPicture.cpp |
| @@ -260,7 +260,6 @@ void SkPicture::draw(SkCanvas* surface, SkDrawPictureCallback* callback) { |
| #include "SkStream.h" |
| static const char kMagic[] = { 's', 'k', 'i', 'a', 'p', 'i', 'c', 't' }; |
| -static const size_t kHeaderSize = sizeof(kMagic) + sizeof(SkPictInfo); |
| bool SkPicture::InternalOnly_StreamIsSKP(SkStream* stream, SkPictInfo* pInfo) { |
| if (NULL == stream) { |
| @@ -268,47 +267,40 @@ bool SkPicture::InternalOnly_StreamIsSKP(SkStream* stream, SkPictInfo* pInfo) { |
| } |
| // Check magic bytes. |
|
reed1
2014/03/11 21:13:12
should we have a static helper
static bool is_va
|
| - char magic[sizeof(kMagic)]; |
| - if (!stream->read(magic, sizeof(kMagic)) || |
| - (0 != memcmp(magic, kMagic, sizeof(kMagic)))) { |
| + SkPictInfo header; |
| + SkASSERT(sizeof(kMagic) == sizeof(header.fMagic)); |
| + if (!stream->read(&header, sizeof(header)) || |
| + (0 != memcmp(header.fMagic, kMagic, sizeof(kMagic)))) { |
| return false; |
| } |
| - SkPictInfo info; |
| - if (!stream->read(&info, sizeof(SkPictInfo))) { |
| - return false; |
| - } |
| - |
| - if (info.fVersion < MIN_PICTURE_VERSION || info.fVersion > CURRENT_PICTURE_VERSION) { |
| + if (header.fVersion < MIN_PICTURE_VERSION || |
| + header.fVersion > CURRENT_PICTURE_VERSION) { |
| return false; |
| } |
| if (pInfo != NULL) { |
| - *pInfo = info; |
| + *pInfo = header; |
| } |
| return true; |
| } |
| bool SkPicture::InternalOnly_BufferIsSKP(SkReadBuffer& buffer, SkPictInfo* pInfo) { |
| // Check magic bytes. |
| - char magic[sizeof(kMagic)]; |
| - |
| - if (!buffer.readByteArray(magic, sizeof(kMagic)) || |
| - (0 != memcmp(magic, kMagic, sizeof(kMagic)))) { |
| - return false; |
| - } |
| - |
| - SkPictInfo info; |
| - if (!buffer.readByteArray(&info, sizeof(SkPictInfo))) { |
| + SkPictInfo header; |
| + SkASSERT(sizeof(kMagic) == sizeof(header.fMagic)); |
| + if (!buffer.readByteArray(&header, sizeof(header)) || |
| + (0 != memcmp(header.fMagic, kMagic, sizeof(kMagic)))) { |
| return false; |
| } |
| - if (info.fVersion < MIN_PICTURE_VERSION || info.fVersion > CURRENT_PICTURE_VERSION) { |
| + if (header.fVersion < MIN_PICTURE_VERSION || |
| + header.fVersion > CURRENT_PICTURE_VERSION) { |
| return false; |
| } |
| if (pInfo != NULL) { |
| - *pInfo = info; |
| + *pInfo = header; |
| } |
| return true; |
| } |
| @@ -361,22 +353,22 @@ SkPicture* SkPicture::CreateFromBuffer(SkReadBuffer& buffer) { |
| return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight)); |
| } |
| -void SkPicture::createHeader(void* header) const { |
| +void SkPicture::createHeader(SkPictInfo* header) const { |
| // Copy magic bytes at the beginning of the header |
| SkASSERT(sizeof(kMagic) == 8); |
| - memcpy(header, kMagic, sizeof(kMagic)); |
| + SkASSERT(sizeof(kMagic) == sizeof(header->fMagic)); |
| + memcpy(header->fMagic, kMagic, sizeof(kMagic)); |
| // Set picture info after magic bytes in the header |
| - SkPictInfo* info = (SkPictInfo*)(((char*)header) + sizeof(kMagic)); |
| - info->fVersion = CURRENT_PICTURE_VERSION; |
| - info->fWidth = fWidth; |
| - info->fHeight = fHeight; |
| - info->fFlags = SkPictInfo::kCrossProcess_Flag; |
| + header->fVersion = CURRENT_PICTURE_VERSION; |
|
reed1
2014/03/11 21:13:12
nit: calling this info instead of header would be
|
| + header->fWidth = fWidth; |
| + header->fHeight = fHeight; |
| + header->fFlags = SkPictInfo::kCrossProcess_Flag; |
| // TODO: remove this flag, since we're always float (now) |
| - info->fFlags |= SkPictInfo::kScalarIsFloat_Flag; |
| + header->fFlags |= SkPictInfo::kScalarIsFloat_Flag; |
| if (8 == sizeof(void*)) { |
| - info->fFlags |= SkPictInfo::kPtrIs64Bit_Flag; |
| + header->fFlags |= SkPictInfo::kPtrIs64Bit_Flag; |
| } |
| } |
| @@ -387,9 +379,9 @@ void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { |
| playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); |
| } |
| - char header[kHeaderSize]; |
| + SkPictInfo header; |
| this->createHeader(&header); |
| - stream->write(header, kHeaderSize); |
| + stream->write(&header, sizeof(header)); |
| if (playback) { |
| stream->writeBool(true); |
| playback->serialize(stream, encoder); |
| @@ -409,9 +401,9 @@ void SkPicture::flatten(SkWriteBuffer& buffer) const { |
| playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); |
| } |
| - char header[kHeaderSize]; |
| + SkPictInfo header; |
| this->createHeader(&header); |
| - buffer.writeByteArray(header, kHeaderSize); |
| + buffer.writeByteArray(&header, sizeof(header)); |
| if (playback) { |
| buffer.writeBool(true); |
| playback->flatten(buffer); |