<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>188060</bug_id>
          
          <creation_ts>2018-07-26 08:59:52 -0700</creation_ts>
          <short_desc>SVG text on a path with a gradient fill is very slow to render</short_desc>
          <delta_ts>2018-07-28 15:15:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1445432</commentid>
    <comment_count>0</comment_count>
      <attachid>345849</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-26 08:59:52 -0700</bug_when>
    <thetext>Created attachment 345849
Testcase (hangs!)

The attached file causes a webcontent hang.

Lots of CPU time under:

       2035 WebCore::RenderLineBoxList::paint(WebCore::RenderBoxModelObject*, WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;) const  (in WebCore) + 870  [0x108234cf6]
         2035 WebCore::SVGRootInlineBox::paint(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::LayoutUnit, WebCore::LayoutUnit)  (in WebCore) + 276  [0x1083a8bf4]
           1990 WebCore::SVGInlineFlowBox::paint(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::LayoutUnit, WebCore::LayoutUnit)  (in WebCore) + 100  [0x1095f29a4]
           ! 1989 WebCore::SVGInlineTextBox::paint(WebCore::PaintInfo&amp;, WebCore::LayoutPoint const&amp;, WebCore::LayoutUnit, WebCore::LayoutUnit)  (in WebCore) + 865  [0x1083a9021]
           ! : 1989 WebCore::SVGInlineTextBox::paintText(WebCore::GraphicsContext&amp;, WebCore::RenderStyle const&amp;, WebCore::RenderStyle const&amp;, WebCore::SVGTextFragment const&amp;, bool, bool)  (in WebCore) + 469  [0x1095f7295]
           ! :   1947 WebCore::SVGInlineTextBox::paintTextWithShadows(WebCore::GraphicsContext&amp;, WebCore::RenderStyle const&amp;, WebCore::TextRun&amp;, WebCore::SVGTextFragment const&amp;, unsigned int, unsigned int)  (in WebCore) + 481  [0x1095f78b1]
           ! :   | 1931 WebCore::RenderSVGResourceGradient::postApplyResource(WebCore::RenderElement&amp;, WebCore::GraphicsContext*&amp;, WTF::OptionSet&lt;WebCore::RenderSVGResourceMode&gt;, WebCore::Path const*, WebCore::RenderSVGShape const*)  (in WebCore) + 685  [0x1095e451d]
           ! :   | + 1931 WebCore::ImageBufferData::~ImageBufferData()  (in WebCore) + 99  [0x1093b06e3]
           ! :   | +   1931 WebCore::GraphicsContext::~GraphicsContext()  (in WebCore) + 18  [0x109367042]
           ! :   | +     1931 WebCore::GraphicsContext::platformDestroy()  (in WebCore) + 34  [0x1081dbee2]


and huge memory use (&gt; 1GB).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1445436</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-26 09:05:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/42625890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1445464</commentid>
    <comment_count>2</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-26 10:31:59 -0700</bug_when>
    <thetext>I did not see a hang when I opened the attached test case in either WK1 or WK2,

WebKit is just extremely slow. After few seconds, I could see the path text filed with gradient as expected and I could even select the text and interact with the Mini-Browser UI but with a large delay.

I did not see a huge memory allocation when opening this file. All I saw was allocation of 35MB.

When opening the attached test case in Chrome, the text shows a lot faster and the selection is drawn instantaneously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446019</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-28 15:13:04 -0700</bug_when>
    <thetext>For text on a path, we split the text into text fragments, each of which is one glyph. For each fragment (including whitespace?) we run through RenderStyle::paintTypesForPaintOrder(), each of which hits RenderSVGResourceGradient::postApplyResource() which does the gradient fill, and each gradient fill involves rendering to an image buffer and clipping. That&apos;s a lot of work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446020</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-07-28 15:14:52 -0700</bug_when>
    <thetext>Optimization thoughts:
* paint all the text for one path in one go, doing the gradient fill and clip once.
* avoid doing work for whitespace-only text fragments
* cache the gradient rendering
* optimize away &apos;paintOrder&apos; paths that will paint nothing</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>345849</attachid>
            <date>2018-07-26 08:59:52 -0700</date>
            <delta_ts>2018-07-26 08:59:52 -0700</delta_ts>
            <desc>Testcase (hangs!)</desc>
            <filename>Code_Waves.svg</filename>
            <type>image/svg+xml</type>
            <size>2583</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRw
Oi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIg0KICAgICB2aWV3Qm94PSIwIDAgNTAwIDM4MCI+DQog
IDxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9Im5vbmUiIC8+DQo8ZGVmcz4N
CiAgPHBhdGggaWQ9InAxIiAgZD0iTTEwLDMwICBxMjYsMTAgMTAwLDAgdDEwMCwwIHQxMDAsMCB0
MTAwLDAgdDEwMCwwIiAvPg0KICA8cGF0aCBpZD0icDIiICBkPSJNMTAsNjAgIHEzNCwxMCAxMDAs
MCB0MTAwLDAgdDEwMCwwIHQxMDAsMCB0MTAwLDAiIC8+DQogIDxwYXRoIGlkPSJwMyIgIGQ9Ik0x
MCw5MCAgcTQwLDEwIDEwMCwwIHQxMDAsMCB0MTAwLDAgdDEwMCwwIHQxMDAsMCIgLz4NCiAgPHBh
dGggaWQ9InA0IiAgZD0iTTEwLDEyMCBxNDAsMTQgMTAwLDAgdDEwMCwwIHQxMDAsMCB0MTAwLDAg
dDEwMCwwIiAvPg0KICA8cGF0aCBpZD0icDUiICBkPSJNMTAsMTUwIHEzNiwxNCAxMDAsMCB0MTAw
LDAgdDEwMCwwIHQxMDAsMCB0MTAwLDAiIC8+DQogIDxwYXRoIGlkPSJwNiIgIGQ9Ik0xMCwxODAg
cTI2LDE0IDEwMCwwIHQxMDAsMCB0MTAwLDAgdDEwMCwwIHQxMDAsMCIgLz4NCiAgPHBhdGggaWQ9
InA3IiAgZD0iTTEwLDIxMCBxMjYsMTAgMTAwLDAgdDEwMCwwIHQxMDAsMCB0MTAwLDAgdDEwMCww
IiAvPg0KICA8cGF0aCBpZD0icDgiICBkPSJNMTAsMjQwIHEzNCwxMCAxMDAsMCB0MTAwLDAgdDEw
MCwwIHQxMDAsMCB0MTAwLDAiIC8+DQogIDxwYXRoIGlkPSJwOSIgIGQ9Ik0xMCwyNzAgcTQwLDEw
IDEwMCwwIHQxMDAsMCB0MTAwLDAgdDEwMCwwIHQxMDAsMCIgLz4NCiAgPHBhdGggaWQ9InAxMCIg
ZD0iTTEwLDMwMCBxNDAsMTQgMTAwLDAgdDEwMCwwIHQxMDAsMCB0MTAwLDAgdDEwMCwwIiAvPg0K
ICA8cGF0aCBpZD0icDExIiBkPSJNMTAsMzMwIHEzNiwxNCAxMDAsMCB0MTAwLDAgdDEwMCwwIHQx
MDAsMCB0MTAwLDAiIC8+DQogIDxwYXRoIGlkPSJwMTIiIGQ9Ik0xMCwzNjAgcTI2LDE0IDEwMCww
IHQxMDAsMCB0MTAwLDAgdDEwMCwwIHQxMDAsMCIgLz4NCjwvZGVmcz4NCjxyYWRpYWxHcmFkaWVu
dCBpZD0iZyIgZ3JhZGllbnRUcmFuc2Zvcm09InNrZXdYKC03MCkiIHNwcmVhZE1ldGhvZD0icmVw
ZWF0Ij4NCiAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSJoc2woMjAxLCA0MCUsIDYwJSki
Lz4NCiAgPHN0b3Agb2Zmc2V0PSIwLjEiIHN0b3AtY29sb3I9ImhzbCgyMjQsIDk1JSwgMjMlKSIv
Pg0KICA8c3RvcCBvZmZzZXQ9IjAuNiIgc3RvcC1jb2xvcj0iaHNsKDI2MiwgMzglLCA0OSUpIi8+
DQogIDxzdG9wIG9mZnNldD0iMC44IiBzdG9wLWNvbG9yPSJoc2woMjI0LCA5NSUsIDIzJSkiLz4N
CiAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJoc2woMjAxLCA0MCUsIDYwJSkiLz4NCjwv
cmFkaWFsR3JhZGllbnQ+DQo8dGV4dCBzdHlsZT0iZm9udDogYm9sZCAyNHB4IG1vbm9zcGFjZTsg
ZmlsbDogdXJsKCNnKSBpbmRpZ287DQogICAgICAgICAgICAgdGV4dC1zaGFkb3c6IGhzbCgyMjQs
IDk1JSwgMjMlKSAxcHggMnB4IDJweCI+DQo8dGV4dFBhdGggeGxpbms6aHJlZj0iI3AxIj5zdGFy
dChfVHlwZSwgX0FyZ3MpIC0mZ3Q7PC90ZXh0UGF0aD4NCiAgPHRleHRQYXRoIHhsaW5rOmhyZWY9
IiNwMiIgc3RhcnRPZmZzZXQ9IjMwIj57b2ssIFN1cGVydmlzb3J9ID0gcm9ib3Rfc3VwOnN0YXJ0
X2xpbmsoKSw8L3RleHRQYXRoPg0KICA8dGV4dFBhdGggeGxpbms6aHJlZj0iI3AzIiBzdGFydE9m
ZnNldD0iMzAiPkxFRHMgPSBbMSwgMl0sPC90ZXh0UGF0aD4NCiAgPHRleHRQYXRoIHhsaW5rOmhy
ZWY9IiNwNCIgc3RhcnRPZmZzZXQ9IjMwIj5bZ3Jpc3BfbGVkOmZsYXNoKEwsIHJlZCwgNTAwKSB8
fCBMICZsdDstIExFRHNdLDwvdGV4dFBhdGg+DQogIDx0ZXh0UGF0aCB4bGluazpocmVmPSIjcDUi
IHN0YXJ0T2Zmc2V0PSIzMCI+dGltZXI6c2xlZXAoNTAwMCksPC90ZXh0UGF0aD4NCiAgPHRleHRQ
YXRoIHhsaW5rOmhyZWY9IiNwNiIgc3RhcnRPZmZzZXQ9IjMwIj5ncmlzcF9sZWQ6b2ZmKDIpLDwv
dGV4dFBhdGg+DQogIDx0ZXh0UGF0aCB4bGluazpocmVmPSIjcDciIHN0YXJ0T2Zmc2V0PSIzMCI+
UmFuZG9tID0gZnVuKCkgLSZndDs8L3RleHRQYXRoPg0KICAgIDx0ZXh0UGF0aCB4bGluazpocmVm
PSIjcDgiIHN0YXJ0T2Zmc2V0PSI2MCI+e3JhbmQ6dW5pZm9ybSgyKSAtIDEsIHJhbmQ6dW5pZm9y
bSgyKSAtMSwgcmFuZDp1bmlmb3JtKDIpIC0gMX08L3RleHRQYXRoPg0KICA8dGV4dFBhdGggeGxp
bms6aHJlZj0iI3A5IiBzdGFydE9mZnNldD0iMzAiPmVuZCw8L3RleHRQYXRoPg0KICA8dGV4dFBh
dGggeGxpbms6aHJlZj0iI3AxMCIgc3RhcnRPZmZzZXQ9IjMwIj5ncmlzcF9sZWQ6cGF0dGVybigx
LCBbezEwMCwgUmFuZG9tfV0pLDwvdGV4dFBhdGg+DQogIDx0ZXh0UGF0aCB4bGluazpocmVmPSIj
cDExIiBzdGFydE9mZnNldD0iMzAiPntvaywgU3VwZXJ2aXNvcn0uPC90ZXh0UGF0aD4NCjx0ZXh0
UGF0aCB4bGluazpocmVmPSIjcDEyIj5zdG9wKF9TdGF0ZSkgLSZndDsgb2suPC90ZXh0UGF0aD4N
CjwvdGV4dD4NCjwvc3ZnPg0K
</data>

          </attachment>
      

    </bug>

</bugzilla>