Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Unified Diff: src/core/SkGlyphCache.h

Issue 1216983003: Move the GlyphCache to use a hash table instead of doing its own ad-hoc (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkGlyph.h ('k') | src/core/SkGlyphCache.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkGlyphCache.h
diff --git a/src/core/SkGlyphCache.h b/src/core/SkGlyphCache.h
index f3a946c7d3e0470811074557a572cab18ebba62e..1d3ae57b2eaf2d83b71aaaf6c8fd4adfb0c3a955 100644
--- a/src/core/SkGlyphCache.h
+++ b/src/core/SkGlyphCache.h
@@ -12,6 +12,7 @@
#include "SkChunkAlloc.h"
#include "SkDescriptor.h"
#include "SkGlyph.h"
+#include "SkTHash.h"
#include "SkScalerContext.h"
#include "SkTemplates.h"
#include "SkTDArray.h"
@@ -20,6 +21,16 @@ class SkPaint;
class SkGlyphCache_Globals;
+class GlyphTrait {
mtklein 2015/06/30 16:20:47 Might want to call this SkGlyphHashTraits, or nest
herb_g 2015/07/06 16:32:19 Done.
+public:
+ static int32_t GetKey(const SkGlyph& glyph) {
reed1 2015/06/29 20:59:48 nit: do we really need signed -vs- unsigned 32 int
mtklein 2015/06/30 16:20:47 +1, particularly because fID is an uint32_t (and i
herb_g 2015/07/06 16:32:19 Done.
herb_g 2015/07/06 16:32:19 Done.
+ return glyph.fID;
+ }
+ static uint32_t Hash(int32_t glyphId) {
+ return SkChecksum::CheapMix(glyphId);
+ }
+};
+
// Enable this locally to add stats for hash-table hit rates. It also extends the dump() output
// to show those stats.
//#define SK_GLYPHCACHE_TRACK_HASH_STATS
@@ -183,7 +194,7 @@ private:
struct CharGlyphRec {
uint32_t fID; // unichar + subpixel
- uint16_t fGlyphIndex;
+ uint32_t fCombinedID;
mtklein 2015/06/30 16:20:47 Boy this is getting confusing. Can we name these
herb_g 2015/07/06 16:32:19 This is really a glyphID and subpixel positioning.
};
struct AuxProcRec {
@@ -206,12 +217,11 @@ private:
// 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);
+ SkGlyph* lookupMetrics(uint32_t id, MetricsType type);
static bool DetachProc(const SkGlyphCache*, void*) { return true; }
// 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;
@@ -227,13 +237,15 @@ private:
SkPaint::FontMetrics fFontMetrics;
// A quick lookup to avoid the binary search looking for glyphs in fGlyphArray.
- uint16_t fGlyphHash[kHashCount];
+ //uint16_t fGlyphHash[kHashCount];
// Contains the SkGlyphs that are used by fGlyphHash and fCharToGlyphHash. The ~0 element is
// reserved for a sentinel SkGlyph that reduces the logic to check for collisions in the hash
// arrays. The ~0 element has an fID of SkGlyph::kImpossibleID which never matches any
// combined id generated for a char or a glyph.
- SkTDArray<SkGlyph> fGlyphArray;
+ //SkTDArray<SkGlyph> fGlyphArray;
mtklein 2015/06/30 16:20:47 Let's kill off the dead code and update the commen
herb_g 2015/07/06 16:32:19 Done.
+ SkTHashTable<SkGlyph, int32_t, GlyphTrait> fGlyphMap;
+
SkChunkAlloc fGlyphAlloc;
// no reason to use the same kHashCount as fGlyphHash, but we do for now
« no previous file with comments | « src/core/SkGlyph.h ('k') | src/core/SkGlyphCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698