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

Side by Side Diff: src/gpu/GrTextStrike_impl.h

Issue 390103002: Replace use of GrTHashTable in GrFontCache with SkTDynamicHash. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove deleteAll(); use iterator instead. Created 6 years, 5 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 unified diff | Download patch
« no previous file with comments | « src/gpu/GrTextStrike.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 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 8
9 9
10 10
11 #ifndef GrTextStrike_impl_DEFINED 11 #ifndef GrTextStrike_impl_DEFINED
12 #define GrTextStrike_impl_DEFINED 12 #define GrTextStrike_impl_DEFINED
13 13
14 class GrFontCache::Key {
15 public:
16 explicit Key(const GrFontDescKey* fontScalarKey) {
17 fFontScalerKey = fontScalarKey;
18 }
19
20 intptr_t getHash() const { return fFontScalerKey->getHash(); }
21
22 static bool LessThan(const GrTextStrike& strike, const Key& key) {
23 return *strike.getFontScalerKey() < *key.fFontScalerKey;
24 }
25 static bool Equals(const GrTextStrike& strike, const Key& key) {
26 return *strike.getFontScalerKey() == *key.fFontScalerKey;
27 }
28
29 private:
30 const GrFontDescKey* fFontScalerKey;
31 };
32
33 void GrFontCache::detachStrikeFromList(GrTextStrike* strike) { 14 void GrFontCache::detachStrikeFromList(GrTextStrike* strike) {
34 if (strike->fPrev) { 15 if (strike->fPrev) {
35 SkASSERT(fHead != strike); 16 SkASSERT(fHead != strike);
36 strike->fPrev->fNext = strike->fNext; 17 strike->fPrev->fNext = strike->fNext;
37 } else { 18 } else {
38 SkASSERT(fHead == strike); 19 SkASSERT(fHead == strike);
39 fHead = strike->fNext; 20 fHead = strike->fNext;
40 } 21 }
41 22
42 if (strike->fNext) { 23 if (strike->fNext) {
43 SkASSERT(fTail != strike); 24 SkASSERT(fTail != strike);
44 strike->fNext->fPrev = strike->fPrev; 25 strike->fNext->fPrev = strike->fPrev;
45 } else { 26 } else {
46 SkASSERT(fTail == strike); 27 SkASSERT(fTail == strike);
47 fTail = strike->fPrev; 28 fTail = strike->fPrev;
48 } 29 }
49 } 30 }
50 31
51 GrTextStrike* GrFontCache::getStrike(GrFontScaler* scaler, bool useDistanceField ) { 32 GrTextStrike* GrFontCache::getStrike(GrFontScaler* scaler, bool useDistanceField ) {
52 this->validate(); 33 this->validate();
53 34
54 const Key key(scaler->getKey()); 35 GrTextStrike* strike = fCache.find(*(scaler->getKey()));
55 GrTextStrike* strike = fCache.find(key);
56 if (NULL == strike) { 36 if (NULL == strike) {
57 strike = this->generateStrike(scaler, key); 37 strike = this->generateStrike(scaler);
58 } else if (strike->fPrev) { 38 } else if (strike->fPrev) {
59 // Need to put the strike at the head of its dllist, since that is how 39 // Need to put the strike at the head of its dllist, since that is how
60 // we age the strikes for purging (we purge from the back of the list) 40 // we age the strikes for purging (we purge from the back of the list)
61 this->detachStrikeFromList(strike); 41 this->detachStrikeFromList(strike);
62 // attach at the head 42 // attach at the head
63 fHead->fPrev = strike; 43 fHead->fPrev = strike;
64 strike->fNext = fHead; 44 strike->fNext = fHead;
65 strike->fPrev = NULL; 45 strike->fPrev = NULL;
66 fHead = strike; 46 fHead = strike;
67 } 47 }
68 strike->fUseDistanceField = useDistanceField; 48 strike->fUseDistanceField = useDistanceField;
69 this->validate(); 49 this->validate();
70 return strike; 50 return strike;
71 } 51 }
72 52
73 /////////////////////////////////////////////////////////////////////////////// 53 ///////////////////////////////////////////////////////////////////////////////
74 54
75 /**
76 * This Key just wraps a glyphID, and matches the protocol need for
77 * GrTHashTable
78 */
79 class GrTextStrike::Key {
80 public:
81 Key(GrGlyph::PackedID id) : fPackedID(id) {}
82
83 uint32_t getHash() const { return fPackedID; }
84
85 static bool LessThan(const GrGlyph& glyph, const Key& key) {
86 return glyph.fPackedID < key.fPackedID;
87 }
88 static bool Equals(const GrGlyph& glyph, const Key& key) {
89 return glyph.fPackedID == key.fPackedID;
90 }
91
92 private:
93 GrGlyph::PackedID fPackedID;
94 };
95
96 GrGlyph* GrTextStrike::getGlyph(GrGlyph::PackedID packed, 55 GrGlyph* GrTextStrike::getGlyph(GrGlyph::PackedID packed,
97 GrFontScaler* scaler) { 56 GrFontScaler* scaler) {
98 GrGlyph* glyph = fCache.find(packed); 57 GrGlyph* glyph = fCache.find(packed);
99 if (NULL == glyph) { 58 if (NULL == glyph) {
100 glyph = this->generateGlyph(packed, scaler); 59 glyph = this->generateGlyph(packed, scaler);
101 } 60 }
102 return glyph; 61 return glyph;
103 } 62 }
104 63
105 #endif 64 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrTextStrike.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698