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 #ifndef SkPictureFlat_DEFINED | 8 #ifndef SkPictureFlat_DEFINED |
9 #define SkPictureFlat_DEFINED | 9 #define SkPictureFlat_DEFINED |
10 | 10 |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 SkWriteBuffer fScratch; | 563 SkWriteBuffer fScratch; |
564 bool fReady; | 564 bool fReady; |
565 | 565 |
566 // For index -> SkFlatData. 0-based, while all indices in the API are 1-bas
ed. Careful! | 566 // For index -> SkFlatData. 0-based, while all indices in the API are 1-bas
ed. Careful! |
567 SkTDArray<const SkFlatData*> fIndexedData; | 567 SkTDArray<const SkFlatData*> fIndexedData; |
568 | 568 |
569 // For SkFlatData -> cached SkFlatData, which has index(). | 569 // For SkFlatData -> cached SkFlatData, which has index(). |
570 SkTDynamicHash<SkFlatData, SkFlatData, SkFlatData::HashTraits> fHash; | 570 SkTDynamicHash<SkFlatData, SkFlatData, SkFlatData::HashTraits> fHash; |
571 }; | 571 }; |
572 | 572 |
573 struct SkPaintFlatteningTraits { | |
574 static void Flatten(SkWriteBuffer& buffer, const SkPaint& paint) { paint.fla
tten(buffer); } | |
575 static void Unflatten(SkReadBuffer& buffer, SkPaint* paint) { paint->unflatt
en(buffer); } | |
576 }; | |
577 | |
578 typedef SkFlatDictionary<SkPaint, SkPaintFlatteningTraits> SkPaintDictionary; | |
579 | |
580 class SkChunkFlatController : public SkFlatController { | |
581 public: | |
582 SkChunkFlatController(size_t minSize) | |
583 : fHeap(minSize) | |
584 , fTypefaceSet(SkNEW(SkRefCntSet)) | |
585 , fLastAllocated(NULL) { | |
586 this->setTypefaceSet(fTypefaceSet); | |
587 this->setTypefacePlayback(&fTypefacePlayback); | |
588 } | |
589 | |
590 virtual void* allocThrow(size_t bytes) SK_OVERRIDE { | |
591 fLastAllocated = fHeap.allocThrow(bytes); | |
592 return fLastAllocated; | |
593 } | |
594 | |
595 virtual void unalloc(void* ptr) SK_OVERRIDE { | |
596 // fHeap can only free a pointer if it was the last one allocated. Othe
rwise, we'll just | |
597 // have to wait until fHeap is destroyed. | |
598 if (ptr == fLastAllocated) (void)fHeap.unalloc(ptr); | |
599 } | |
600 | |
601 void setupPlaybacks() const { | |
602 fTypefacePlayback.reset(fTypefaceSet.get()); | |
603 } | |
604 | |
605 void setBitmapStorage(SkBitmapHeap* heap) { | |
606 this->setBitmapHeap(heap); | |
607 } | |
608 | |
609 private: | |
610 SkChunkAlloc fHeap; | |
611 SkAutoTUnref<SkRefCntSet> fTypefaceSet; | |
612 void* fLastAllocated; | |
613 mutable SkTypefacePlayback fTypefacePlayback; | |
614 }; | |
615 | |
616 #endif | 573 #endif |
OLD | NEW |