| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 #ifndef GrBatchFontCache_DEFINED | 8 #ifndef GrBatchFontCache_DEFINED |
| 9 #define GrBatchFontCache_DEFINED | 9 #define GrBatchFontCache_DEFINED |
| 10 | 10 |
| 11 #include "GrBatchAtlas.h" | 11 #include "GrBatchAtlas.h" |
| 12 #include "GrFontScaler.h" | 12 #include "GrFontScaler.h" |
| 13 #include "GrGlyph.h" | 13 #include "GrGlyph.h" |
| 14 #include "SkGlyph.h" |
| 14 #include "SkTDynamicHash.h" | 15 #include "SkTDynamicHash.h" |
| 15 #include "SkVarAlloc.h" | 16 #include "SkVarAlloc.h" |
| 16 | 17 |
| 17 class GrBatchFontCache; | 18 class GrBatchFontCache; |
| 18 class GrBatchTarget; | 19 class GrBatchTarget; |
| 19 class GrGpu; | 20 class GrGpu; |
| 20 | 21 |
| 21 /** | 22 /** |
| 22 * The GrBatchTextStrike manages a pool of CPU backing memory for GrGlyphs. Th
is backing memory | 23 * The GrBatchTextStrike manages a pool of CPU backing memory for GrGlyphs. Th
is backing memory |
| 23 * is indexed by a PackedID and GrFontScaler. The GrFontScaler is what actuall
y creates the mask. | 24 * is indexed by a PackedID and GrFontScaler. The GrFontScaler is what actuall
y creates the mask. |
| 24 */ | 25 */ |
| 25 class GrBatchTextStrike : public SkNVRefCnt<GrBatchTextStrike> { | 26 class GrBatchTextStrike : public SkNVRefCnt<GrBatchTextStrike> { |
| 26 public: | 27 public: |
| 27 GrBatchTextStrike(GrBatchFontCache*, const GrFontDescKey* fontScalerKey); | 28 GrBatchTextStrike(GrBatchFontCache*, const GrFontDescKey* fontScalerKey); |
| 28 ~GrBatchTextStrike(); | 29 ~GrBatchTextStrike(); |
| 29 | 30 |
| 30 const GrFontDescKey* getFontScalerKey() const { return fFontScalerKey; } | 31 const GrFontDescKey* getFontScalerKey() const { return fFontScalerKey; } |
| 31 GrBatchFontCache* getBatchFontCache() const { return fBatchFontCache; } | 32 GrBatchFontCache* getBatchFontCache() const { return fBatchFontCache; } |
| 32 | 33 |
| 33 inline GrGlyph* getGlyph(GrGlyph::PackedID packed, GrFontScaler* scaler) { | 34 inline GrGlyph* getGlyph(const SkGlyph& skGlyph, GrGlyph::PackedID packed, |
| 35 GrFontScaler* scaler) { |
| 34 GrGlyph* glyph = fCache.find(packed); | 36 GrGlyph* glyph = fCache.find(packed); |
| 35 if (NULL == glyph) { | 37 if (NULL == glyph) { |
| 36 glyph = this->generateGlyph(packed, scaler); | 38 glyph = this->generateGlyph(skGlyph, packed, scaler); |
| 37 } | 39 } |
| 38 return glyph; | 40 return glyph; |
| 39 } | 41 } |
| 40 | 42 |
| 41 // returns true if glyph successfully added to texture atlas, false otherwis
e | 43 // returns true if glyph successfully added to texture atlas, false otherwis
e |
| 42 bool addGlyphToAtlas(GrBatchTarget*, GrGlyph*, GrFontScaler*); | 44 bool addGlyphToAtlas(GrBatchTarget*, GrGlyph*, GrFontScaler*, const SkGlyph&
); |
| 43 | 45 |
| 44 // testing | 46 // testing |
| 45 int countGlyphs() const { return fCache.count(); } | 47 int countGlyphs() const { return fCache.count(); } |
| 46 | 48 |
| 47 // remove any references to this plot | 49 // remove any references to this plot |
| 48 void removeID(GrBatchAtlas::AtlasID); | 50 void removeID(GrBatchAtlas::AtlasID); |
| 49 | 51 |
| 50 // If a TextStrike is abandoned by the cache, then the caller must get a new
strike | 52 // If a TextStrike is abandoned by the cache, then the caller must get a new
strike |
| 51 bool isAbandoned() const { return fIsAbandoned; } | 53 bool isAbandoned() const { return fIsAbandoned; } |
| 52 | 54 |
| 53 static const GrFontDescKey& GetKey(const GrBatchTextStrike& ts) { | 55 static const GrFontDescKey& GetKey(const GrBatchTextStrike& ts) { |
| 54 return *(ts.fFontScalerKey); | 56 return *(ts.fFontScalerKey); |
| 55 } | 57 } |
| 56 static uint32_t Hash(const GrFontDescKey& key) { | 58 static uint32_t Hash(const GrFontDescKey& key) { |
| 57 return key.getHash(); | 59 return key.getHash(); |
| 58 } | 60 } |
| 59 | 61 |
| 60 private: | 62 private: |
| 61 SkTDynamicHash<GrGlyph, GrGlyph::PackedID> fCache; | 63 SkTDynamicHash<GrGlyph, GrGlyph::PackedID> fCache; |
| 62 SkAutoTUnref<const GrFontDescKey> fFontScalerKey; | 64 SkAutoTUnref<const GrFontDescKey> fFontScalerKey; |
| 63 SkVarAlloc fPool; | 65 SkVarAlloc fPool; |
| 64 | 66 |
| 65 GrBatchFontCache* fBatchFontCache; | 67 GrBatchFontCache* fBatchFontCache; |
| 66 int fAtlasedGlyphs; | 68 int fAtlasedGlyphs; |
| 67 bool fIsAbandoned; | 69 bool fIsAbandoned; |
| 68 | 70 |
| 69 GrGlyph* generateGlyph(GrGlyph::PackedID packed, GrFontScaler* scaler); | 71 GrGlyph* generateGlyph(const SkGlyph&, GrGlyph::PackedID, GrFontScaler*); |
| 70 | 72 |
| 71 friend class GrBatchFontCache; | 73 friend class GrBatchFontCache; |
| 72 }; | 74 }; |
| 73 | 75 |
| 74 /* | 76 /* |
| 75 * GrBatchFontCache manages strikes which are indexed by a GrFontScaler. These
strikes can then be | 77 * GrBatchFontCache manages strikes which are indexed by a GrFontScaler. These
strikes can then be |
| 76 * used to individual Glyph Masks. The GrBatchFontCache also manages GrBatchAtl
ases, though this is | 78 * used to individual Glyph Masks. The GrBatchFontCache also manages GrBatchAtl
ases, though this is |
| 77 * more or less transparent to the client(aside from atlasGeneration, described
below). | 79 * more or less transparent to the client(aside from atlasGeneration, described
below). |
| 78 * Note - we used to initialize the backing atlas for the GrBatchFontCache at in
itialization time. | 80 * Note - we used to initialize the backing atlas for the GrBatchFontCache at in
itialization time. |
| 79 * However, this caused a regression, even when the GrBatchFontCache was unused.
We now initialize | 81 * However, this caused a regression, even when the GrBatchFontCache was unused.
We now initialize |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 | 191 |
| 190 static void HandleEviction(GrBatchAtlas::AtlasID, void*); | 192 static void HandleEviction(GrBatchAtlas::AtlasID, void*); |
| 191 | 193 |
| 192 GrContext* fContext; | 194 GrContext* fContext; |
| 193 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey> fCache; | 195 SkTDynamicHash<GrBatchTextStrike, GrFontDescKey> fCache; |
| 194 GrBatchAtlas* fAtlases[kMaskFormatCount]; | 196 GrBatchAtlas* fAtlases[kMaskFormatCount]; |
| 195 GrBatchTextStrike* fPreserveStrike; | 197 GrBatchTextStrike* fPreserveStrike; |
| 196 }; | 198 }; |
| 197 | 199 |
| 198 #endif | 200 #endif |
| OLD | NEW |