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

Unified Diff: src/gpu/GrTextStrike.cpp

Issue 640413004: Revert of Fix color emoji. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrTextStrike.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrTextStrike.cpp
diff --git a/src/gpu/GrTextStrike.cpp b/src/gpu/GrTextStrike.cpp
index 81be3418f7ca1d8c71596bdbfb0afb55f16b602e..8ae10cc8ddafc937230b61be62408e830914012c 100644
--- a/src/gpu/GrTextStrike.cpp
+++ b/src/gpu/GrTextStrike.cpp
@@ -80,47 +80,7 @@
}
GrTextStrike* GrFontCache::generateStrike(GrFontScaler* scaler) {
- GrTextStrike* strike = SkNEW_ARGS(GrTextStrike, (this, scaler->getKey()));
- fCache.add(strike);
-
- if (fHead) {
- fHead->fPrev = strike;
- } else {
- SkASSERT(NULL == fTail);
- fTail = strike;
- }
- strike->fPrev = NULL;
- strike->fNext = fHead;
- fHead = strike;
-
- return strike;
-}
-
-void GrFontCache::freeAll() {
- SkTDynamicHash<GrTextStrike, GrFontDescKey>::Iter iter(&fCache);
- while (!iter.done()) {
- SkDELETE(&(*iter));
- ++iter;
- }
- fCache.rewind();
- for (int i = 0; i < kAtlasCount; ++i) {
- delete fAtlases[i];
- fAtlases[i] = NULL;
- }
- fHead = NULL;
- fTail = NULL;
-}
-
-void GrFontCache::purgeStrike(GrTextStrike* strike) {
- fCache.remove(*(strike->fFontScalerKey));
- this->detachStrikeFromList(strike);
- delete strike;
-}
-
-
-GrPlot* GrFontCache::addToAtlas(GrMaskFormat format, GrAtlas::ClientPlotUsage* usage,
- int width, int height, const void* image,
- SkIPoint16* loc) {
+ GrMaskFormat format = scaler->getMaskFormat();
GrPixelConfig config = mask_format_to_pixel_config(format);
int atlasIndex = mask_format_to_atlas_index(format);
if (NULL == fAtlases[atlasIndex]) {
@@ -132,15 +92,48 @@
GR_NUM_PLOTS_Y,
true));
}
- return fAtlases[atlasIndex]->addToAtlas(usage, width, height, image, loc);
-}
-
-
-bool GrFontCache::freeUnusedPlot(GrTextStrike* preserveStrike, const GrGlyph* glyph) {
+ GrTextStrike* strike = SkNEW_ARGS(GrTextStrike,
+ (this, scaler->getKey(), format, fAtlases[atlasIndex]));
+ fCache.add(strike);
+
+ if (fHead) {
+ fHead->fPrev = strike;
+ } else {
+ SkASSERT(NULL == fTail);
+ fTail = strike;
+ }
+ strike->fPrev = NULL;
+ strike->fNext = fHead;
+ fHead = strike;
+
+ return strike;
+}
+
+void GrFontCache::freeAll() {
+ SkTDynamicHash<GrTextStrike, GrFontDescKey>::Iter iter(&fCache);
+ while (!iter.done()) {
+ SkDELETE(&(*iter));
+ ++iter;
+ }
+ fCache.rewind();
+ for (int i = 0; i < kAtlasCount; ++i) {
+ delete fAtlases[i];
+ fAtlases[i] = NULL;
+ }
+ fHead = NULL;
+ fTail = NULL;
+}
+
+void GrFontCache::purgeStrike(GrTextStrike* strike) {
+ fCache.remove(*(strike->fFontScalerKey));
+ this->detachStrikeFromList(strike);
+ delete strike;
+}
+
+bool GrFontCache::freeUnusedPlot(GrTextStrike* preserveStrike) {
SkASSERT(preserveStrike);
- int index = mask_format_to_atlas_index(glyph->fMaskFormat);
- GrAtlas* atlas = fAtlases[index];
+ GrAtlas* atlas = preserveStrike->fAtlas;
GrPlot* plot = atlas->getUnusedPlot();
if (NULL == plot) {
return false;
@@ -148,7 +141,13 @@
plot->resetRects();
GrTextStrike* strike = fHead;
+ GrMaskFormat maskFormat = preserveStrike->fMaskFormat;
while (strike) {
+ if (maskFormat != strike->fMaskFormat) {
+ strike = strike->fNext;
+ continue;
+ }
+
GrTextStrike* strikeToPurge = strike;
strike = strikeToPurge->fNext;
strikeToPurge->removePlot(plot);
@@ -229,11 +228,16 @@
atlas and a position within that texture.
*/
-GrTextStrike::GrTextStrike(GrFontCache* cache, const GrFontDescKey* key) : fPool(64) {
+GrTextStrike::GrTextStrike(GrFontCache* cache, const GrFontDescKey* key,
+ GrMaskFormat format,
+ GrAtlas* atlas) : fPool(64) {
fFontScalerKey = key;
fFontScalerKey->ref();
fFontCache = cache; // no need to ref, it won't go away before we do
+ fAtlas = atlas; // no need to ref, it won't go away before we do
+
+ fMaskFormat = format;
#ifdef SK_DEBUG
// GrPrintf(" GrTextStrike %p %d\n", this, gCounter);
@@ -267,10 +271,9 @@
return NULL;
}
}
- GrMaskFormat format = scaler->getPackedGlyphMaskFormat(packed);
-
+
GrGlyph* glyph = fPool.alloc();
- glyph->init(packed, bounds, format);
+ glyph->init(packed, bounds);
fCache.add(glyph);
return glyph;
}
@@ -314,7 +317,7 @@
SkAutoUnref ar(SkSafeRef(scaler));
- int bytesPerPixel = GrMaskFormatBytesPerPixel(glyph->fMaskFormat);
+ int bytesPerPixel = GrMaskFormatBytesPerPixel(fMaskFormat);
size_t size = glyph->fBounds.area() * bytesPerPixel;
GrAutoMalloc<1024> storage(size);
@@ -334,9 +337,9 @@
}
}
- GrPlot* plot = fFontCache->addToAtlas(glyph->fMaskFormat, &fPlotUsage,
- glyph->width(), glyph->height(),
- storage.get(), &glyph->fAtlasLocation);
+ GrPlot* plot = fAtlas->addToAtlas(&fPlotUsage, glyph->width(),
+ glyph->height(), storage.get(),
+ &glyph->fAtlasLocation);
if (NULL == plot) {
return false;
« no previous file with comments | « src/gpu/GrTextStrike.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698