diff options
Diffstat (limited to 'src/core/SkGlyphCache.cpp')
-rwxr-xr-x | src/core/SkGlyphCache.cpp | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/core/SkGlyphCache.cpp b/src/core/SkGlyphCache.cpp index bf63ab26ea..1cbfcd8e6e 100755 --- a/src/core/SkGlyphCache.cpp +++ b/src/core/SkGlyphCache.cpp @@ -86,7 +86,9 @@ SkGlyphCache::SkGlyphCache(SkTypeface* typeface, const SkDescriptor* desc, SkSca // init to 0 so that all of the pointers will be null memset(fGlyphHash, 0, sizeof(fGlyphHash)); - + // init with 0xFF so that the charCode field will be -1, which is invalid + memset(fCharToGlyphHash, 0xFF, sizeof(fCharToGlyphHash)); + fMemoryUsed = sizeof(*this); fGlyphArray.setReserve(kMinGlyphCount); @@ -114,8 +116,8 @@ SkGlyphCache::~SkGlyphCache() { } } - SkDebugf("glyphPtrArray,%zu, Alloc,%zu, imageUsed,%zu, glyphUsed,%zu, glyphHashAlloc,%zu, glyphHashUsed,%zu, unicharHashAlloc,%zu, unicharHashUsed,%zu\n", - ptrMem, glyphAlloc, imageUsed, glyphUsed, sizeof(fGlyphHash), glyphHashUsed, sizeof(CharGlyphRec) * kHashCount, uniHashUsed); + printf("glyphPtrArray,%zu, Alloc,%zu, imageUsed,%zu, glyphUsed,%zu, glyphHashAlloc,%zu, glyphHashUsed,%zu, unicharHashAlloc,%zu, unicharHashUsed,%zu\n", + ptrMem, glyphAlloc, imageUsed, glyphUsed, sizeof(fGlyphHash), glyphHashUsed, sizeof(fCharToGlyphHash), uniHashUsed); } #endif @@ -133,16 +135,6 @@ SkGlyphCache::~SkGlyphCache() { this->invokeAndRemoveAuxProcs(); } -SkGlyphCache::CharGlyphRec* SkGlyphCache::getCharGlyphRec(uint32_t id) { - if (NULL == fCharToGlyphHash) { - fCharToGlyphHash.reset(new CharGlyphRec[kHashCount]); - // init with 0xFF so that the charCode field will be -1, which is invalid - memset(fCharToGlyphHash, 0xFF, sizeof(CharGlyphRec) * kHashCount); - } - - return &fCharToGlyphHash[ID2HashIndex(id)]; -} - /////////////////////////////////////////////////////////////////////////////// #ifdef SK_DEBUG @@ -154,7 +146,7 @@ SkGlyphCache::CharGlyphRec* SkGlyphCache::getCharGlyphRec(uint32_t id) { uint16_t SkGlyphCache::unicharToGlyph(SkUnichar charCode) { VALIDATE(); uint32_t id = SkGlyph::MakeID(charCode); - const CharGlyphRec& rec = *this->getCharGlyphRec(id); + const CharGlyphRec& rec = fCharToGlyphHash[ID2HashIndex(id)]; if (rec.fID == id) { return rec.fGlyph->getGlyphID(); @@ -176,7 +168,7 @@ unsigned SkGlyphCache::getGlyphCount() { const SkGlyph& SkGlyphCache::getUnicharAdvance(SkUnichar charCode) { VALIDATE(); uint32_t id = SkGlyph::MakeID(charCode); - CharGlyphRec* rec = this->getCharGlyphRec(id); + CharGlyphRec* rec = &fCharToGlyphHash[ID2HashIndex(id)]; if (rec->fID != id) { // this ID is based on the UniChar @@ -206,7 +198,7 @@ const SkGlyph& SkGlyphCache::getGlyphIDAdvance(uint16_t glyphID) { const SkGlyph& SkGlyphCache::getUnicharMetrics(SkUnichar charCode) { VALIDATE(); uint32_t id = SkGlyph::MakeID(charCode); - CharGlyphRec* rec = this->getCharGlyphRec(id); + CharGlyphRec* rec = &fCharToGlyphHash[ID2HashIndex(id)]; if (rec->fID != id) { RecordHashCollisionIf(rec->fGlyph != NULL); @@ -229,7 +221,7 @@ const SkGlyph& SkGlyphCache::getUnicharMetrics(SkUnichar charCode, SkFixed x, SkFixed y) { VALIDATE(); uint32_t id = SkGlyph::MakeID(charCode, x, y); - CharGlyphRec* rec = this->getCharGlyphRec(id); + CharGlyphRec* rec = &fCharToGlyphHash[ID2HashIndex(id)]; if (rec->fID != id) { RecordHashCollisionIf(rec->fGlyph != NULL); |