OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include <new> | 8 #include <new> |
9 #include "SkBBoxHierarchy.h" | 9 #include "SkBBoxHierarchy.h" |
10 #include "SkOffsetTable.h" | 10 #include "SkOffsetTable.h" |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
263 fPaints = NULL; | 263 fPaints = NULL; |
264 fPictureRefs = NULL; | 264 fPictureRefs = NULL; |
265 fPictureCount = 0; | 265 fPictureCount = 0; |
266 fOpData = NULL; | 266 fOpData = NULL; |
267 fFactoryPlayback = NULL; | 267 fFactoryPlayback = NULL; |
268 fBoundingHierarchy = NULL; | 268 fBoundingHierarchy = NULL; |
269 fStateTree = NULL; | 269 fStateTree = NULL; |
270 } | 270 } |
271 | 271 |
272 SkPicturePlayback::~SkPicturePlayback() { | 272 SkPicturePlayback::~SkPicturePlayback() { |
273 fOpData->unref(); | 273 SkSafeUnref(fOpData); |
274 | 274 |
275 SkSafeUnref(fBitmaps); | 275 SkSafeUnref(fBitmaps); |
276 SkSafeUnref(fPaints); | 276 SkSafeUnref(fPaints); |
277 SkSafeUnref(fBoundingHierarchy); | 277 SkSafeUnref(fBoundingHierarchy); |
278 SkSafeUnref(fStateTree); | 278 SkSafeUnref(fStateTree); |
279 | 279 |
280 for (int i = 0; i < fPictureCount; i++) { | 280 for (int i = 0; i < fPictureCount; i++) { |
281 fPictureRefs[i]->unref(); | 281 fPictureRefs[i]->unref(); |
282 } | 282 } |
283 SkDELETE_ARRAY(fPictureRefs); | 283 SkDELETE_ARRAY(fPictureRefs); |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
605 fPaints = SkTRefArray<SkPaint>::Create(size); | 605 fPaints = SkTRefArray<SkPaint>::Create(size); |
606 for (size_t i = 0; i < size; ++i) { | 606 for (size_t i = 0; i < size; ++i) { |
607 buffer.readPaint(&fPaints->writableAt(i)); | 607 buffer.readPaint(&fPaints->writableAt(i)); |
608 } | 608 } |
609 } break; | 609 } break; |
610 case SK_PICT_PATH_BUFFER_TAG: | 610 case SK_PICT_PATH_BUFFER_TAG: |
611 if (size > 0) { | 611 if (size > 0) { |
612 fPathHeap.reset(SkNEW_ARGS(SkPathHeap, (buffer))); | 612 fPathHeap.reset(SkNEW_ARGS(SkPathHeap, (buffer))); |
613 } | 613 } |
614 break; | 614 break; |
615 case SK_PICT_READER_TAG: { | |
616 SkAutoMalloc storage(size); | |
617 if (!buffer.readByteArray(storage.get(), size) || | |
618 !buffer.validate(NULL == fOpData)) { | |
619 return false; | |
620 } | |
621 SkASSERT(NULL == fOpData); | |
Stephen White
2014/03/11 19:05:54
Nit: this assert is spurious now.
sugoi1
2014/03/11 19:20:02
Well, if you're using SkReadBuffer, it will still
| |
622 fOpData = SkData::NewFromMalloc(storage.detach(), size); | |
623 } break; | |
624 case SK_PICT_PICTURE_TAG: { | |
625 if (!buffer.validate((0 == fPictureCount) && (NULL == fPictureRefs)) ) { | |
626 return false; | |
627 } | |
628 fPictureCount = size; | |
629 fPictureRefs = SkNEW_ARRAY(SkPicture*, fPictureCount); | |
630 bool success = true; | |
631 int i = 0; | |
632 for ( ; i < fPictureCount; i++) { | |
633 fPictureRefs[i] = SkPicture::CreateFromBuffer(buffer); | |
634 if (NULL == fPictureRefs[i]) { | |
635 success = false; | |
636 break; | |
637 } | |
638 } | |
639 if (!success) { | |
640 // Delete all of the pictures that were already created (up to b ut excluding i): | |
641 for (int j = 0; j < i; j++) { | |
642 fPictureRefs[j]->unref(); | |
643 } | |
644 // Delete the array | |
645 SkDELETE_ARRAY(fPictureRefs); | |
646 fPictureCount = 0; | |
647 return false; | |
648 } | |
649 } break; | |
615 default: | 650 default: |
616 // The tag was invalid. | 651 // The tag was invalid. |
617 return false; | 652 return false; |
618 } | 653 } |
619 return true; // success | 654 return true; // success |
620 } | 655 } |
621 | 656 |
622 SkPicturePlayback* SkPicturePlayback::CreateFromStream(SkStream* stream, | 657 SkPicturePlayback* SkPicturePlayback::CreateFromStream(SkStream* stream, |
623 const SkPictInfo& info, | 658 const SkPictInfo& info, |
624 SkPicture::InstallPixelRe fProc proc) { | 659 SkPicture::InstallPixelRe fProc proc) { |
(...skipping 1105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1730 for (index = 0; index < fPictureCount; index++) | 1765 for (index = 0; index < fPictureCount; index++) |
1731 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), | 1766 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), |
1732 "picture%p, ", fPictureRefs[index]); | 1767 "picture%p, ", fPictureRefs[index]); |
1733 if (fPictureCount > 0) | 1768 if (fPictureCount > 0) |
1734 SkDebugf("%s0};\n", pBuffer); | 1769 SkDebugf("%s0};\n", pBuffer); |
1735 | 1770 |
1736 const_cast<SkPicturePlayback*>(this)->dumpStream(); | 1771 const_cast<SkPicturePlayback*>(this)->dumpStream(); |
1737 } | 1772 } |
1738 | 1773 |
1739 #endif | 1774 #endif |
OLD | NEW |