Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkPictureRecord.h" | 8 #include "SkPictureRecord.h" |
| 9 #include "SkDevice.h" | 9 #include "SkDevice.h" |
| 10 #include "SkPatchUtils.h" | 10 #include "SkPatchUtils.h" |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 static int const kUInt32Size = 4; | 24 static int const kUInt32Size = 4; |
| 25 | 25 |
| 26 static const uint32_t kSaveSize = kUInt32Size; | 26 static const uint32_t kSaveSize = kUInt32Size; |
| 27 #ifdef SK_DEBUG | 27 #ifdef SK_DEBUG |
| 28 static const uint32_t kSaveLayerNoBoundsSize = 4 * kUInt32Size; | 28 static const uint32_t kSaveLayerNoBoundsSize = 4 * kUInt32Size; |
| 29 static const uint32_t kSaveLayerWithBoundsSize = 4 * kUInt32Size + sizeof(SkRect ); | 29 static const uint32_t kSaveLayerWithBoundsSize = 4 * kUInt32Size + sizeof(SkRect ); |
| 30 #endif//SK_DEBUG | 30 #endif//SK_DEBUG |
| 31 | 31 |
| 32 SkPictureRecord::SkPictureRecord(const SkISize& dimensions, uint32_t flags) | 32 SkPictureRecord::SkPictureRecord(const SkISize& dimensions, uint32_t flags) |
| 33 : INHERITED(dimensions.width(), dimensions.height()) | 33 : INHERITED(dimensions.width(), dimensions.height()) |
| 34 , fFlattenableHeap(HEAP_BLOCK_SIZE) | |
| 35 , fPaints(&fFlattenableHeap) | |
| 36 , fRecordFlags(flags) { | 34 , fRecordFlags(flags) { |
| 37 | 35 |
| 38 fBitmapHeap = SkNEW(SkBitmapHeap); | 36 fBitmapHeap = SkNEW(SkBitmapHeap); |
| 39 fFlattenableHeap.setBitmapStorage(fBitmapHeap); | |
| 40 | 37 |
| 41 fFirstSavedLayerIndex = kNoSavedLayerIndex; | 38 fFirstSavedLayerIndex = kNoSavedLayerIndex; |
| 42 fInitialSaveCount = kNoInitialSave; | 39 fInitialSaveCount = kNoInitialSave; |
| 43 } | 40 } |
| 44 | 41 |
| 45 SkPictureRecord::~SkPictureRecord() { | 42 SkPictureRecord::~SkPictureRecord() { |
| 46 SkSafeUnref(fBitmapHeap); | 43 SkSafeUnref(fBitmapHeap); |
| 47 fFlattenableHeap.setBitmapStorage(NULL); | |
| 48 fPictureRefs.unrefAll(); | 44 fPictureRefs.unrefAll(); |
| 49 fTextBlobRefs.unrefAll(); | 45 fTextBlobRefs.unrefAll(); |
| 50 } | 46 } |
| 51 | 47 |
| 52 /////////////////////////////////////////////////////////////////////////////// | 48 /////////////////////////////////////////////////////////////////////////////// |
| 53 | 49 |
| 54 #ifdef SK_DEBUG | 50 #ifdef SK_DEBUG |
| 55 // Return the offset of the paint inside a given op's byte stream. A zero | 51 // Return the offset of the paint inside a given op's byte stream. A zero |
| 56 // return value means there is no paint (and you really shouldn't be calling | 52 // return value means there is no paint (and you really shouldn't be calling |
| 57 // this method) | 53 // this method) |
| (...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 918 return index; | 914 return index; |
| 919 } | 915 } |
| 920 | 916 |
| 921 void SkPictureRecord::addMatrix(const SkMatrix& matrix) { | 917 void SkPictureRecord::addMatrix(const SkMatrix& matrix) { |
| 922 fWriter.writeMatrix(matrix); | 918 fWriter.writeMatrix(matrix); |
| 923 } | 919 } |
| 924 | 920 |
| 925 void SkPictureRecord::addPaintPtr(const SkPaint* paint) { | 921 void SkPictureRecord::addPaintPtr(const SkPaint* paint) { |
| 926 fContentInfo.onAddPaintPtr(paint); | 922 fContentInfo.onAddPaintPtr(paint); |
| 927 | 923 |
| 928 if (paint) { | 924 if (paint) { |
|
robertphillips
2014/11/12 17:14:42
I think 0 is used as a bad paint marker.
robertphillips
2014/11/12 17:17:52
Nevermind - I think this will work.
| |
| 929 const SkFlatData* flat = fPaints.findAndReturnFlat(*paint); | 925 fPaints.push_back(*paint); |
| 930 SkASSERT(flat && flat->index() != 0); | 926 this->addInt(fPaints.count()); |
| 931 this->addInt(flat->index()); | |
| 932 } else { | 927 } else { |
| 933 this->addInt(0); | 928 this->addInt(0); |
| 934 } | 929 } |
| 935 } | 930 } |
| 936 | 931 |
| 937 int SkPictureRecord::addPathToHeap(const SkPath& path) { | 932 int SkPictureRecord::addPathToHeap(const SkPath& path) { |
| 938 if (NULL == fPathHeap) { | 933 if (NULL == fPathHeap) { |
| 939 fPathHeap.reset(SkNEW(SkPathHeap)); | 934 fPathHeap.reset(SkNEW(SkPathHeap)); |
| 940 } | 935 } |
| 941 #ifdef SK_DEDUP_PICTURE_PATHS | 936 #ifdef SK_DEDUP_PICTURE_PATHS |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1014 void SkPictureRecord::addTextBlob(const SkTextBlob *blob) { | 1009 void SkPictureRecord::addTextBlob(const SkTextBlob *blob) { |
| 1015 int index = fTextBlobRefs.count(); | 1010 int index = fTextBlobRefs.count(); |
| 1016 *fTextBlobRefs.append() = blob; | 1011 *fTextBlobRefs.append() = blob; |
| 1017 blob->ref(); | 1012 blob->ref(); |
| 1018 // follow the convention of recording a 1-based index | 1013 // follow the convention of recording a 1-based index |
| 1019 this->addInt(index + 1); | 1014 this->addInt(index + 1); |
| 1020 } | 1015 } |
| 1021 | 1016 |
| 1022 /////////////////////////////////////////////////////////////////////////////// | 1017 /////////////////////////////////////////////////////////////////////////////// |
| 1023 | 1018 |
| OLD | NEW |