| Index: src/core/SkGlyphCache.h
|
| diff --git a/src/core/SkGlyphCache.h b/src/core/SkGlyphCache.h
|
| index b335d29d2d8a8acf2005213bd11bf7f27a82a4ca..200655bb417890731dc0c01ae8aeb290faa15d5c 100644
|
| --- a/src/core/SkGlyphCache.h
|
| +++ b/src/core/SkGlyphCache.h
|
| @@ -187,32 +187,48 @@ private:
|
| kFull_MetricsType
|
| };
|
|
|
| - SkGlyph* lookupMetrics(uint32_t id, MetricsType);
|
| + // Return the SkGlyph* associated with MakeID. The id parameter is the combined glyph/x/y
|
| + // id generated by MakeID. If it is just a glyph id then x and y are assuemd to be zero.
|
| + SkGlyph* lookupByCombinedID(uint32_t id, MetricsType type);
|
| +
|
| + // Return a SkGlyph* associated with unicode id and position x and y.
|
| + SkGlyph* lookupByChar(SkUnichar id, MetricsType type, SkFixed x = 0, SkFixed y = 0);
|
| +
|
| + // Return the index of id in the fGlyphArray. If it does
|
| + // not exist, create a new one using MetricsType.
|
| + uint16_t lookupMetrics(uint32_t id, MetricsType type);
|
| static bool DetachProc(const SkGlyphCache*, void*) { return true; }
|
|
|
| - SkGlyphCache* fNext, *fPrev;
|
| - SkDescriptor* fDesc;
|
| - SkScalerContext* fScalerContext;
|
| + SkGlyphCache* fNext, *fPrev;
|
| + SkDescriptor* fDesc;
|
| + SkScalerContext* fScalerContext;
|
| SkPaint::FontMetrics fFontMetrics;
|
|
|
| enum {
|
| - kHashBits = 8,
|
| - kHashCount = 1 << kHashBits,
|
| - kHashMask = kHashCount - 1
|
| + kHashBits = 8,
|
| + kHashCount = 1 << kHashBits,
|
| + kHashMask = kHashCount - 1,
|
| + kSentinelGlyphIndex = 0,
|
| + kSentinelGlyphID = ~0
|
| };
|
| - SkGlyph* fGlyphHash[kHashCount];
|
| - SkTDArray<SkGlyph*> fGlyphArray;
|
| - SkChunkAlloc fGlyphAlloc;
|
| +
|
| + // A quick lookup to avoid the binary search looking for glyphs in fGlyphArray.
|
| + uint16_t fGlyphHash[kHashCount];
|
| + SkTDArray<SkGlyph> fGlyphArray;
|
| + SkChunkAlloc fGlyphAlloc;
|
|
|
| struct CharGlyphRec {
|
| uint32_t fID; // unichar + subpixel
|
| - SkGlyph* fGlyph;
|
| + uint16_t fGlyphIndex;
|
| };
|
| +
|
| // no reason to use the same kHashCount as fGlyphHash, but we do for now
|
| // Dynamically allocated when chars are encountered.
|
| SkAutoTArray<CharGlyphRec> fCharToGlyphHash;
|
| -
|
| +
|
| + // The id arg is a combined id generated by MakeID.
|
| CharGlyphRec* getCharGlyphRec(uint32_t id);
|
| + void adjustCaches(int insertion_index);
|
|
|
| static inline unsigned ID2HashIndex(uint32_t h) {
|
| return SkChecksum::CheapMix(h) & kHashMask;
|
| @@ -221,7 +237,6 @@ private:
|
| // used to track (approx) how much ram is tied-up in this cache
|
| size_t fMemoryUsed;
|
|
|
| -
|
| #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS
|
| int fHashHitCount;
|
| int fHashMissCount;
|
|
|