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

Side by Side Diff: src/core/SkGlyphCache.cpp

Issue 1383403003: Revert of Stop using SkScalerContext::getAdvance() in SkGlyphCache. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 2 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/core/SkGlyphCache.h ('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 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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 #include "SkGlyphCache.h" 8 #include "SkGlyphCache.h"
9 #include "SkGlyphCache_Globals.h" 9 #include "SkGlyphCache_Globals.h"
10 #include "SkGraphics.h" 10 #include "SkGraphics.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } 112 }
113 113
114 int SkGlyphCache::countCachedGlyphs() const { 114 int SkGlyphCache::countCachedGlyphs() const {
115 return fGlyphMap.count(); 115 return fGlyphMap.count();
116 } 116 }
117 117
118 /////////////////////////////////////////////////////////////////////////////// 118 ///////////////////////////////////////////////////////////////////////////////
119 119
120 const SkGlyph& SkGlyphCache::getUnicharAdvance(SkUnichar charCode) { 120 const SkGlyph& SkGlyphCache::getUnicharAdvance(SkUnichar charCode) {
121 VALIDATE(); 121 VALIDATE();
122 return *this->lookupByChar(charCode); 122 return *this->lookupByChar(charCode, kJustAdvance_MetricsType);
123 } 123 }
124 124
125 const SkGlyph& SkGlyphCache::getGlyphIDAdvance(uint16_t glyphID) { 125 const SkGlyph& SkGlyphCache::getGlyphIDAdvance(uint16_t glyphID) {
126 VALIDATE(); 126 VALIDATE();
127 PackedGlyphID packedGlyphID = SkGlyph::MakeID(glyphID); 127 PackedGlyphID packedGlyphID = SkGlyph::MakeID(glyphID);
128 return *this->lookupByPackedGlyphID(packedGlyphID); 128 return *this->lookupByPackedGlyphID(packedGlyphID, kJustAdvance_MetricsType) ;
129 } 129 }
130 130
131 /////////////////////////////////////////////////////////////////////////////// 131 ///////////////////////////////////////////////////////////////////////////////
132 132
133 const SkGlyph& SkGlyphCache::getUnicharMetrics(SkUnichar charCode) { 133 const SkGlyph& SkGlyphCache::getUnicharMetrics(SkUnichar charCode) {
134 VALIDATE(); 134 VALIDATE();
135 return *this->lookupByChar(charCode); 135 return *this->lookupByChar(charCode, kFull_MetricsType);
136 } 136 }
137 137
138 const SkGlyph& SkGlyphCache::getUnicharMetrics(SkUnichar charCode, SkFixed x, Sk Fixed y) { 138 const SkGlyph& SkGlyphCache::getUnicharMetrics(SkUnichar charCode, SkFixed x, Sk Fixed y) {
139 VALIDATE(); 139 VALIDATE();
140 return *this->lookupByChar(charCode, x, y); 140 return *this->lookupByChar(charCode, kFull_MetricsType, x, y);
141 } 141 }
142 142
143 const SkGlyph& SkGlyphCache::getGlyphIDMetrics(uint16_t glyphID) { 143 const SkGlyph& SkGlyphCache::getGlyphIDMetrics(uint16_t glyphID) {
144 VALIDATE(); 144 VALIDATE();
145 PackedGlyphID packedGlyphID = SkGlyph::MakeID(glyphID); 145 PackedGlyphID packedGlyphID = SkGlyph::MakeID(glyphID);
146 return *this->lookupByPackedGlyphID(packedGlyphID); 146 return *this->lookupByPackedGlyphID(packedGlyphID, kFull_MetricsType);
147 } 147 }
148 148
149 const SkGlyph& SkGlyphCache::getGlyphIDMetrics(uint16_t glyphID, SkFixed x, SkFi xed y) { 149 const SkGlyph& SkGlyphCache::getGlyphIDMetrics(uint16_t glyphID, SkFixed x, SkFi xed y) {
150 VALIDATE(); 150 VALIDATE();
151 PackedGlyphID packedGlyphID = SkGlyph::MakeID(glyphID, x, y); 151 PackedGlyphID packedGlyphID = SkGlyph::MakeID(glyphID, x, y);
152 return *this->lookupByPackedGlyphID(packedGlyphID); 152 return *this->lookupByPackedGlyphID(packedGlyphID, kFull_MetricsType);
153 } 153 }
154 154
155 SkGlyph* SkGlyphCache::lookupByChar(SkUnichar charCode, SkFixed x, SkFixed y) { 155 SkGlyph* SkGlyphCache::lookupByChar(SkUnichar charCode, MetricsType type, SkFixe d x, SkFixed y) {
156 PackedUnicharID id = SkGlyph::MakeID(charCode, x, y); 156 PackedUnicharID id = SkGlyph::MakeID(charCode, x, y);
157 CharGlyphRec* rec = this->getCharGlyphRec(id); 157 CharGlyphRec* rec = this->getCharGlyphRec(id);
158 if (rec->fPackedUnicharID != id) { 158 if (rec->fPackedUnicharID != id) {
159 // this ID is based on the UniChar 159 // this ID is based on the UniChar
160 rec->fPackedUnicharID = id; 160 rec->fPackedUnicharID = id;
161 // this ID is based on the glyph index 161 // this ID is based on the glyph index
162 PackedGlyphID combinedID = SkGlyph::MakeID(fScalerContext->charToGlyphID (charCode), x, y); 162 PackedGlyphID combinedID = SkGlyph::MakeID(fScalerContext->charToGlyphID (charCode), x, y);
163 rec->fPackedGlyphID = combinedID; 163 rec->fPackedGlyphID = combinedID;
164 return this->lookupByPackedGlyphID(combinedID); 164 return this->lookupByPackedGlyphID(combinedID, type);
165 } else { 165 } else {
166 return this->lookupByPackedGlyphID(rec->fPackedGlyphID); 166 return this->lookupByPackedGlyphID(rec->fPackedGlyphID, type);
167 } 167 }
168 } 168 }
169 169
170 SkGlyph* SkGlyphCache::lookupByPackedGlyphID(PackedGlyphID packedGlyphID) { 170 SkGlyph* SkGlyphCache::lookupByPackedGlyphID(PackedGlyphID packedGlyphID, Metric sType type) {
171 SkGlyph* glyph = fGlyphMap.find(packedGlyphID); 171 SkGlyph* glyph = fGlyphMap.find(packedGlyphID);
172
172 if (nullptr == glyph) { 173 if (nullptr == glyph) {
173 glyph = this->allocateNewGlyph(packedGlyphID); 174 glyph = this->allocateNewGlyph(packedGlyphID, type);
175 } else {
176 if (type == kFull_MetricsType && glyph->isJustAdvance()) {
177 fScalerContext->getMetrics(glyph);
178 }
174 } 179 }
175 return glyph; 180 return glyph;
176 } 181 }
177 182
178 SkGlyph* SkGlyphCache::allocateNewGlyph(PackedGlyphID packedGlyphID) { 183 SkGlyph* SkGlyphCache::allocateNewGlyph(PackedGlyphID packedGlyphID, MetricsType mtype) {
179 fMemoryUsed += sizeof(SkGlyph); 184 fMemoryUsed += sizeof(SkGlyph);
180 185
181 SkGlyph* glyphPtr; 186 SkGlyph* glyphPtr;
182 { 187 {
183 SkGlyph glyph; 188 SkGlyph glyph;
184 glyph.initGlyphFromCombinedID(packedGlyphID); 189 glyph.initGlyphFromCombinedID(packedGlyphID);
185 glyphPtr = fGlyphMap.set(glyph); 190 glyphPtr = fGlyphMap.set(glyph);
186 } 191 }
187 fScalerContext->getMetrics(glyphPtr); 192
193 if (kJustAdvance_MetricsType == mtype) {
194 fScalerContext->getAdvance(glyphPtr);
195 } else {
196 SkASSERT(kFull_MetricsType == mtype);
197 fScalerContext->getMetrics(glyphPtr);
198 }
188 199
189 SkASSERT(glyphPtr->fID != SkGlyph::kImpossibleID); 200 SkASSERT(glyphPtr->fID != SkGlyph::kImpossibleID);
190 return glyphPtr; 201 return glyphPtr;
191 } 202 }
192 203
193 const void* SkGlyphCache::findImage(const SkGlyph& glyph) { 204 const void* SkGlyphCache::findImage(const SkGlyph& glyph) {
194 if (glyph.fWidth > 0 && glyph.fWidth < kMaxGlyphWidth) { 205 if (glyph.fWidth > 0 && glyph.fWidth < kMaxGlyphWidth) {
195 if (nullptr == glyph.fImage) { 206 if (nullptr == glyph.fImage) {
196 size_t size = glyph.computeImageSize(); 207 size_t size = glyph.computeImageSize();
197 const_cast<SkGlyph&>(glyph).fImage = fGlyphAlloc.alloc(size, 208 const_cast<SkGlyph&>(glyph).fImage = fGlyphAlloc.alloc(size,
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 } 649 }
639 650
640 void SkGraphics::PurgeFontCache() { 651 void SkGraphics::PurgeFontCache() {
641 get_globals().purgeAll(); 652 get_globals().purgeAll();
642 SkTypefaceCache::PurgeAll(); 653 SkTypefaceCache::PurgeAll();
643 } 654 }
644 655
645 // TODO(herb): clean up TLS apis. 656 // TODO(herb): clean up TLS apis.
646 size_t SkGraphics::GetTLSFontCacheLimit() { return 0; } 657 size_t SkGraphics::GetTLSFontCacheLimit() { return 0; }
647 void SkGraphics::SetTLSFontCacheLimit(size_t bytes) { } 658 void SkGraphics::SetTLSFontCacheLimit(size_t bytes) { }
OLDNEW
« no previous file with comments | « src/core/SkGlyphCache.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698