Laying out a TextRun using an SVG font is O(n^2)
[WebKit-https.git] / Source / WebCore / rendering / svg / SVGTextRunRenderingContext.cpp
index e928f1b6a8d857737fe47ed607bd5dd6776f5904..4218af495364415079db83a2eaf6c89b0e13d72e 100644 (file)
@@ -290,7 +290,7 @@ void SVGTextRunRenderingContext::drawSVGGlyphs(GraphicsContext* context, const S
     }
 }
 
     }
 }
 
-GlyphData SVGTextRunRenderingContext::glyphDataForCharacter(const Font& font, WidthIterator& iterator, UChar32 character, bool mirror, int currentCharacter, unsigned& advanceLength)
+GlyphData SVGTextRunRenderingContext::glyphDataForCharacter(const Font& font, WidthIterator& iterator, UChar32 character, bool mirror, int currentCharacter, unsigned& advanceLength, String& normalizedSpacesStringCache)
 {
     const SimpleFontData* primaryFont = font.primaryFont();
     ASSERT(primaryFont);
 {
     const SimpleFontData* primaryFont = font.primaryFont();
     ASSERT(primaryFont);
@@ -305,7 +305,7 @@ GlyphData SVGTextRunRenderingContext::glyphDataForCharacter(const Font& font, Wi
         return glyphData;
     }
 
         return glyphData;
     }
 
-    // Save data fromhe font fallback list because we may modify it later. Do this before the
+    // Save data from the font fallback list because we may modify it later. Do this before the
     // potential change to glyphData.fontData below.
     FontGlyphs* glyph = font.glyphs();
     ASSERT(glyph);
     // potential change to glyphData.fontData below.
     FontGlyphs* glyph = font.glyphs();
     ASSERT(glyph);
@@ -337,7 +337,7 @@ GlyphData SVGTextRunRenderingContext::glyphDataForCharacter(const Font& font, Wi
         // The returned glyph by glyphDataAndPageForCharacter() is a glyph stored in the SVG Font glyph table.
         // This doesn't necessarily mean the glyph is suitable for rendering/measuring in this context, its
         // arabic-form/orientation/... may not match, we have to apply SVG Glyph selection to discover that.
         // The returned glyph by glyphDataAndPageForCharacter() is a glyph stored in the SVG Font glyph table.
         // This doesn't necessarily mean the glyph is suitable for rendering/measuring in this context, its
         // arabic-form/orientation/... may not match, we have to apply SVG Glyph selection to discover that.
-        if (svgFontData->applySVGGlyphSelection(iterator, glyphData, mirror, currentCharacter, advanceLength))
+        if (svgFontData->applySVGGlyphSelection(iterator, glyphData, mirror, currentCharacter, advanceLength, normalizedSpacesStringCache))
             return glyphData;
     }
 
             return glyphData;
     }