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 "SkTSearch.h" | 9 #include "SkTSearch.h" |
10 #include "SkPixelRef.h" | 10 #include "SkPixelRef.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 static const uint32_t kSaveSize = 2 * kUInt32Size; | 27 static const uint32_t kSaveSize = 2 * kUInt32Size; |
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 | 30 |
31 SkPictureRecord::SkPictureRecord(const SkISize& dimensions, uint32_t flags) | 31 SkPictureRecord::SkPictureRecord(const SkISize& dimensions, uint32_t flags) |
32 : INHERITED(dimensions.width(), dimensions.height()) | 32 : INHERITED(dimensions.width(), dimensions.height()) |
33 , fBoundingHierarchy(NULL) | 33 , fBoundingHierarchy(NULL) |
34 , fStateTree(NULL) | 34 , fStateTree(NULL) |
35 , fFlattenableHeap(HEAP_BLOCK_SIZE) | 35 , fFlattenableHeap(HEAP_BLOCK_SIZE) |
36 , fPaints(&fFlattenableHeap) | 36 , fPaints(&fFlattenableHeap) |
37 , fRecordFlags(flags) { | 37 , fRecordFlags(flags) |
| 38 , fOptsEnabled(true) { |
38 #ifdef SK_DEBUG_SIZE | 39 #ifdef SK_DEBUG_SIZE |
39 fPointBytes = fRectBytes = fTextBytes = 0; | 40 fPointBytes = fRectBytes = fTextBytes = 0; |
40 fPointWrites = fRectWrites = fTextWrites = 0; | 41 fPointWrites = fRectWrites = fTextWrites = 0; |
41 #endif | 42 #endif |
42 | 43 |
43 fBitmapHeap = SkNEW(SkBitmapHeap); | 44 fBitmapHeap = SkNEW(SkBitmapHeap); |
44 fFlattenableHeap.setBitmapStorage(fBitmapHeap); | 45 fFlattenableHeap.setBitmapStorage(fBitmapHeap); |
45 fPathHeap = NULL; // lazy allocate | 46 fPathHeap = NULL; // lazy allocate |
46 #ifndef SK_COLLAPSE_MATRIX_CLIP_STATE | 47 #ifndef SK_COLLAPSE_MATRIX_CLIP_STATE |
47 fFirstSavedLayerIndex = kNoSavedLayerIndex; | 48 fFirstSavedLayerIndex = kNoSavedLayerIndex; |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 // check for underflow | 621 // check for underflow |
621 if (fRestoreOffsetStack.count() == 0) { | 622 if (fRestoreOffsetStack.count() == 0) { |
622 return; | 623 return; |
623 } | 624 } |
624 | 625 |
625 if (fRestoreOffsetStack.count() == fFirstSavedLayerIndex) { | 626 if (fRestoreOffsetStack.count() == fFirstSavedLayerIndex) { |
626 fFirstSavedLayerIndex = kNoSavedLayerIndex; | 627 fFirstSavedLayerIndex = kNoSavedLayerIndex; |
627 } | 628 } |
628 | 629 |
629 size_t opt = 0; | 630 size_t opt = 0; |
630 if (!(fRecordFlags & SkPicture::kDisableRecordOptimizations_RecordingFlag))
{ | 631 if (fOptsEnabled) { |
631 for (opt = 0; opt < SK_ARRAY_COUNT(gPictureRecordOpts); ++opt) { | 632 for (opt = 0; opt < SK_ARRAY_COUNT(gPictureRecordOpts); ++opt) { |
632 if (0 != (gPictureRecordOpts[opt].fFlags & kSkipIfBBoxHierarchy_Flag
) | 633 if (0 != (gPictureRecordOpts[opt].fFlags & kSkipIfBBoxHierarchy_Flag
) |
633 && NULL != fBoundingHierarchy) { | 634 && NULL != fBoundingHierarchy) { |
634 continue; | 635 continue; |
635 } | 636 } |
636 if ((*gPictureRecordOpts[opt].fProc)(&fWriter, fRestoreOffsetStack.t
op(), &fPaints)) { | 637 if ((*gPictureRecordOpts[opt].fProc)(&fWriter, fRestoreOffsetStack.t
op(), &fPaints)) { |
637 // Some optimization fired so don't add the RESTORE | 638 // Some optimization fired so don't add the RESTORE |
638 apply_optimization_to_bbh(gPictureRecordOpts[opt].fType, | 639 apply_optimization_to_bbh(gPictureRecordOpts[opt].fType, |
639 fStateTree, fBoundingHierarchy); | 640 fStateTree, fBoundingHierarchy); |
640 break; | 641 break; |
641 } | 642 } |
642 } | 643 } |
643 } | 644 } |
644 | 645 |
645 if ((fRecordFlags & SkPicture::kDisableRecordOptimizations_RecordingFlag) || | 646 if (!fOptsEnabled || SK_ARRAY_COUNT(gPictureRecordOpts) == opt) { |
646 SK_ARRAY_COUNT(gPictureRecordOpts) == opt) { | |
647 // No optimization fired so add the RESTORE | 647 // No optimization fired so add the RESTORE |
648 this->recordRestore(); | 648 this->recordRestore(); |
649 } | 649 } |
650 | 650 |
651 fRestoreOffsetStack.pop(); | 651 fRestoreOffsetStack.pop(); |
652 #endif | 652 #endif |
653 | 653 |
654 return this->INHERITED::restore(); | 654 return this->INHERITED::restore(); |
655 } | 655 } |
656 | 656 |
(...skipping 1197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1854 void SkPictureRecord::validateRegions() const { | 1854 void SkPictureRecord::validateRegions() const { |
1855 int count = fRegions.count(); | 1855 int count = fRegions.count(); |
1856 SkASSERT((unsigned) count < 0x1000); | 1856 SkASSERT((unsigned) count < 0x1000); |
1857 for (int index = 0; index < count; index++) { | 1857 for (int index = 0; index < count; index++) { |
1858 const SkFlatData* region = fRegions[index]; | 1858 const SkFlatData* region = fRegions[index]; |
1859 SkASSERT(region); | 1859 SkASSERT(region); |
1860 // region->validate(); | 1860 // region->validate(); |
1861 } | 1861 } |
1862 } | 1862 } |
1863 #endif | 1863 #endif |
OLD | NEW |