Revert of Fix color emoji. (patchset #11 id:320001 of https://codereview.chromium.org/636183005/)
Reason for revert:
Crashing the Windows bots.
Original issue's description:
> Fix color emoji.
>
> Removes the GrMaskFormat and single atlas in GrTextStrike.
> Replaces it by storing the GrMaskFormat in each GrGlyph, and
> doing a lookup for the correct atlas based on that.
>
> Disables color glyph rendering in GrDistanceFieldTextContext
> for now.
>
> BUG=skia:2887
>
> Committed: https://skia.googlesource.com/skia/+/bc92163ddfe957ad6ffbb02ac40e0ba75ff82216
TBR=robertphillips@google.com,bungeman@google.com,reed@google.com,bsalomon@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:2887
Review URL: https://codereview.chromium.org/640413004
diff --git a/src/gpu/GrTextStrike.cpp b/src/gpu/GrTextStrike.cpp
index 81be341..8ae10cc 100644
--- a/src/gpu/GrTextStrike.cpp
+++ b/src/gpu/GrTextStrike.cpp
@@ -80,7 +80,20 @@
}
GrTextStrike* GrFontCache::generateStrike(GrFontScaler* scaler) {
- GrTextStrike* strike = SkNEW_ARGS(GrTextStrike, (this, scaler->getKey()));
+ GrMaskFormat format = scaler->getMaskFormat();
+ GrPixelConfig config = mask_format_to_pixel_config(format);
+ int atlasIndex = mask_format_to_atlas_index(format);
+ if (NULL == fAtlases[atlasIndex]) {
+ SkISize textureSize = SkISize::Make(GR_ATLAS_TEXTURE_WIDTH,
+ GR_ATLAS_TEXTURE_HEIGHT);
+ fAtlases[atlasIndex] = SkNEW_ARGS(GrAtlas, (fGpu, config, kNone_GrTextureFlags,
+ textureSize,
+ GR_NUM_PLOTS_X,
+ GR_NUM_PLOTS_Y,
+ true));
+ }
+ GrTextStrike* strike = SkNEW_ARGS(GrTextStrike,
+ (this, scaler->getKey(), format, fAtlases[atlasIndex]));
fCache.add(strike);
if (fHead) {
@@ -117,30 +130,10 @@
delete strike;
}
-
-GrPlot* GrFontCache::addToAtlas(GrMaskFormat format, GrAtlas::ClientPlotUsage* usage,
- int width, int height, const void* image,
- SkIPoint16* loc) {
- GrPixelConfig config = mask_format_to_pixel_config(format);
- int atlasIndex = mask_format_to_atlas_index(format);
- if (NULL == fAtlases[atlasIndex]) {
- SkISize textureSize = SkISize::Make(GR_ATLAS_TEXTURE_WIDTH,
- GR_ATLAS_TEXTURE_HEIGHT);
- fAtlases[atlasIndex] = SkNEW_ARGS(GrAtlas, (fGpu, config, kNone_GrTextureFlags,
- textureSize,
- GR_NUM_PLOTS_X,
- GR_NUM_PLOTS_Y,
- true));
- }
- return fAtlases[atlasIndex]->addToAtlas(usage, width, height, image, loc);
-}
-
-
-bool GrFontCache::freeUnusedPlot(GrTextStrike* preserveStrike, const GrGlyph* glyph) {
+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;