specialize addGlyphToAtlas padding to bilerp case

Change-Id: Id3695ea65b292e39c40a17d039ec4b9347cd0feb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307296
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Herb Derby <herb@google.com>
diff --git a/src/gpu/text/GrAtlasManager.cpp b/src/gpu/text/GrAtlasManager.cpp
index 03f7c4e..3ca75f1 100644
--- a/src/gpu/text/GrAtlasManager.cpp
+++ b/src/gpu/text/GrAtlasManager.cpp
@@ -139,10 +139,10 @@
 // TODO we can handle some of these cases if we really want to, but the long term solution is to
 // get the actual glyph image itself when we get the glyph metrics.
 GrDrawOpAtlas::ErrorCode GrAtlasManager::addGlyphToAtlas(const SkGlyph& skGlyph,
-                                                         int padding,
                                                          GrGlyph* grGlyph,
                                                          GrResourceProvider* resourceProvider,
-                                                         GrDeferredUploadTarget* uploadTarget) {
+                                                         GrDeferredUploadTarget* uploadTarget,
+                                                         bool bilerpPadding) {
     if (skGlyph.image() == nullptr) {
         return GrDrawOpAtlas::ErrorCode::kError;
     }
@@ -152,12 +152,8 @@
     GrMaskFormat expectedMaskFormat = this->resolveMaskFormat(glyphFormat);
     int bytesPerPixel = GrMaskFormatBytesPerPixel(expectedMaskFormat);
 
-    if (padding > 0) {
-        SkASSERT(skGlyph.maskFormat() != SkMask::kSDF_Format);
-    }
-
-    SkASSERT(padding == 0 || padding == 1);
     // Add 1 pixel padding around grGlyph if needed.
+    int padding = bilerpPadding ? 1 : 0;
     const int width = skGlyph.width() + 2*padding;
     const int height = skGlyph.height() + 2*padding;
     int rowBytes = width * bytesPerPixel;
diff --git a/src/gpu/text/GrAtlasManager.h b/src/gpu/text/GrAtlasManager.h
index 52bada5..19c79f6 100644
--- a/src/gpu/text/GrAtlasManager.h
+++ b/src/gpu/text/GrAtlasManager.h
@@ -46,11 +46,13 @@
 
     bool hasGlyph(GrMaskFormat, GrGlyph*);
 
+    // If bilerpPadding == true then addGlyphToAtlas adds a 1 pixel border to the glyph before
+    // inserting it into the atlas.
     GrDrawOpAtlas::ErrorCode addGlyphToAtlas(const SkGlyph& skGlyph,
-                                             int padding,
                                              GrGlyph* grGlyph,
                                              GrResourceProvider* resourceProvider,
-                                             GrDeferredUploadTarget* uploadTarget);
+                                             GrDeferredUploadTarget* uploadTarget,
+                                             bool bilerpPadding = false);
 
     // To ensure the GrDrawOpAtlas does not evict the Glyph Mask from its texture backing store,
     // the client must pass in the current op token along with the GrGlyph.
diff --git a/src/gpu/text/GrTextBlob.cpp b/src/gpu/text/GrTextBlob.cpp
index 4768b7c..6cb646a 100644
--- a/src/gpu/text/GrTextBlob.cpp
+++ b/src/gpu/text/GrTextBlob.cpp
@@ -144,8 +144,8 @@
 
 std::tuple<bool, int> GrGlyphVector::regenerateAtlas(int begin, int end,
                                                      GrMaskFormat maskFormat,
-                                                     int padding,
-                                                     GrMeshDrawOp::Target* target) {
+                                                     GrMeshDrawOp::Target* target,
+                                                     bool bilerpPadding) {
     GrAtlasManager* atlasManager = target->atlasManager();
     GrDeferredUploadTarget* uploadTarget = target->deferredUploadTarget();
 
@@ -178,8 +178,8 @@
             if (!atlasManager->hasGlyph(maskFormat, grGlyph)) {
                 const SkGlyph& skGlyph = *metricsAndImages.glyph(grGlyph->fPackedID);
                 auto code = atlasManager->addGlyphToAtlas(
-                        skGlyph, padding, grGlyph,
-                        target->resourceProvider(), uploadTarget);
+                        skGlyph, grGlyph, target->resourceProvider(),
+                        uploadTarget, bilerpPadding);
                 if (code != GrDrawOpAtlas::ErrorCode::kSucceeded) {
                     success = code != GrDrawOpAtlas::ErrorCode::kError;
                     break;
@@ -363,7 +363,7 @@
 
 std::tuple<bool, int>
 GrDirectMaskSubRun::regenerateAtlas(int begin, int end, GrMeshDrawOp::Target* target) const {
-    return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, 0, target);
+    return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, target);
 }
 
 template <typename Rect>
@@ -567,7 +567,7 @@
 
 std::tuple<bool, int> GrTransformedMaskSubRun::regenerateAtlas(int begin, int end,
                                                                GrMeshDrawOp::Target* target) const {
-    return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, 1, target);
+    return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, target, true);
 }
 
 template<typename Quad, typename VertexData>
@@ -626,7 +626,6 @@
     }
 }
 
-
 void GrTransformedMaskSubRun::fillVertexData(void* vertexDst,
                                              int offset, int count,
                                              GrColor color,
@@ -840,7 +839,7 @@
 std::tuple<bool, int> GrSDFTSubRun::regenerateAtlas(
         int begin, int end, GrMeshDrawOp::Target *target) const {
 
-    return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, 0, target);
+    return fGlyphs.regenerateAtlas(begin, end, fMaskFormat, target);
 }
 
 size_t GrSDFTSubRun::vertexStride() const {
diff --git a/src/gpu/text/GrTextBlob.h b/src/gpu/text/GrTextBlob.h
index 4f2a966..4e6a3a5 100644
--- a/src/gpu/text/GrTextBlob.h
+++ b/src/gpu/text/GrTextBlob.h
@@ -291,7 +291,10 @@
 
     SkScalar strikeToSourceRatio() const { return fStrikeSpec.strikeToSourceRatio(); }
     std::tuple<bool, int> regenerateAtlas(
-            int begin, int end, GrMaskFormat maskFormat, int padding, GrMeshDrawOp::Target *target);
+            int begin, int end,
+            GrMaskFormat maskFormat,
+            GrMeshDrawOp::Target *target,
+            bool bilerpPadding = false);
 
     static size_t GlyphVectorSize(size_t count) {
         return sizeof(Variant) * count;