diff options
author | 2012-05-30 16:54:13 +0000 | |
---|---|---|
committer | 2012-05-30 16:54:13 +0000 | |
commit | d2700eec7eb2e26beb206b88a0f0b6f3c5f49118 (patch) | |
tree | c43ed22ce3a91677ca29d04b733bbcc7847304ac /src/core/SkPictureRecord.cpp | |
parent | dde718c558b118e2a918d14046770a8c37d75040 (diff) |
Refactor dictionaries for use by entities other than just SkPicture
Review URL: https://codereview.appspot.com/6101043
git-svn-id: http://skia.googlecode.com/svn/trunk@4077 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkPictureRecord.cpp')
-rw-r--r-- | src/core/SkPictureRecord.cpp | 96 |
1 files changed, 11 insertions, 85 deletions
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp index fdeec3fd27..422001bcea 100644 --- a/src/core/SkPictureRecord.cpp +++ b/src/core/SkPictureRecord.cpp @@ -12,8 +12,13 @@ #define HEAP_BLOCK_SIZE 4096 SkPictureRecord::SkPictureRecord(uint32_t flags) : - fHeap(HEAP_BLOCK_SIZE), fWriter(MIN_WRITER_SIZE), fRecordFlags(flags) { - fBitmapIndex = fMatrixIndex = fPaintIndex = fRegionIndex = 1; + fHeap(HEAP_BLOCK_SIZE), + fBitmaps(&fHeap), + fMatrices(&fHeap), + fPaints(&fHeap), + fRegions(&fHeap), + fWriter(MIN_WRITER_SIZE), + fRecordFlags(flags) { #ifdef SK_DEBUG_SIZE fPointBytes = fRectBytes = fTextBytes = 0; fPointWrites = fRectWrites = fTextWrites = 0; @@ -505,7 +510,7 @@ void SkPictureRecord::reset() { } void SkPictureRecord::addBitmap(const SkBitmap& bitmap) { - addInt(find(fBitmaps, bitmap)); + addInt(fBitmaps.find(&bitmap, &fRCSet)); } void SkPictureRecord::addMatrix(const SkMatrix& matrix) { @@ -513,7 +518,7 @@ void SkPictureRecord::addMatrix(const SkMatrix& matrix) { } void SkPictureRecord::addMatrixPtr(const SkMatrix* matrix) { - addInt(find(fMatrices, matrix)); + addInt(fMatrices.find(matrix)); } void SkPictureRecord::addPaint(const SkPaint& paint) { @@ -521,7 +526,7 @@ void SkPictureRecord::addPaint(const SkPaint& paint) { } void SkPictureRecord::addPaintPtr(const SkPaint* paint) { - addInt(find(fPaints, paint)); + addInt(fPaints.find(paint, &fRCSet, &fTFSet)); } void SkPictureRecord::addPath(const SkPath& path) { @@ -589,7 +594,7 @@ void SkPictureRecord::addIRectPtr(const SkIRect* rect) { } void SkPictureRecord::addRegion(const SkRegion& region) { - addInt(find(fRegions, region)); + addInt(fRegions.find(®ion)); } void SkPictureRecord::addText(const void* text, size_t byteLength) { @@ -606,85 +611,6 @@ void SkPictureRecord::addText(const void* text, size_t byteLength) { /////////////////////////////////////////////////////////////////////////////// -int SkPictureRecord::find(SkTDArray<const SkFlatBitmap* >& bitmaps, const SkBitmap& bitmap) { - SkFlatBitmap* flat = SkFlatBitmap::Flatten(&fHeap, bitmap, fBitmapIndex, - &fRCSet); - int index = SkTSearch<SkFlatData>((const SkFlatData**) bitmaps.begin(), - bitmaps.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); - if (index >= 0) { - (void)fHeap.unalloc(flat); - return bitmaps[index]->index(); - } - index = ~index; - *bitmaps.insert(index) = flat; - return fBitmapIndex++; -} - -int SkPictureRecord::find(SkTDArray<const SkFlatMatrix* >& matrices, const SkMatrix* matrix) { - if (matrix == NULL) - return 0; - SkFlatMatrix* flat = SkFlatMatrix::Flatten(&fHeap, *matrix, fMatrixIndex); - int index = SkTSearch<SkFlatData>((const SkFlatData**) matrices.begin(), - matrices.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); - if (index >= 0) { - (void)fHeap.unalloc(flat); - return matrices[index]->index(); - } - index = ~index; - *matrices.insert(index) = flat; - return fMatrixIndex++; -} - -int SkPictureRecord::find(SkTDArray<const SkFlatPaint* >& paints, const SkPaint* paint) { - if (paint == NULL) { - return 0; - } - - SkFlatPaint* flat = SkFlatPaint::Flatten(&fHeap, *paint, fPaintIndex, - &fRCSet, &fTFSet); - int index = SkTSearch<SkFlatData>((const SkFlatData**) paints.begin(), - paints.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); - if (index >= 0) { - (void)fHeap.unalloc(flat); - return paints[index]->index(); - } - - index = ~index; - *paints.insert(index) = flat; - return fPaintIndex++; -} - -int SkPictureRecord::find(SkTDArray<const SkFlatRegion* >& regions, const SkRegion& region) { - SkFlatRegion* flat = SkFlatRegion::Flatten(&fHeap, region, fRegionIndex); - int index = SkTSearch<SkFlatData>((const SkFlatData**) regions.begin(), - regions.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); - if (index >= 0) { - (void)fHeap.unalloc(flat); - return regions[index]->index(); - } - index = ~index; - *regions.insert(index) = flat; - return fRegionIndex++; -} - -#ifdef SK_DEBUG_DUMP -void SkPictureRecord::dumpMatrices() { - int count = fMatrices.count(); - SkMatrix defaultMatrix; - defaultMatrix.reset(); - for (int index = 0; index < count; index++) { - const SkFlatMatrix* flatMatrix = fMatrices[index]; - flatMatrix->dump(); - } -} - -void SkPictureRecord::dumpPaints() { - int count = fPaints.count(); - for (int index = 0; index < count; index++) - fPaints[index]->dump(); -} -#endif - #ifdef SK_DEBUG_SIZE size_t SkPictureRecord::size() const { size_t result = 0; |