<?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>100413</bug_id>
          
          <creation_ts>2012-10-25 14:11:19 -0700</creation_ts>
          <short_desc>[cg] RenderBlock::selectionGaps() is extremely slow when there are many floats</short_desc>
          <delta_ts>2012-11-16 18:30:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://code.cafemix.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2/%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%8C%E7%B7%A8%E9%9B%86%E3%82%82%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%81%AAjavascript%E3%83%87%E3%83%A2/</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>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>nathan.whetsell</cc>
    
    <cc>noam</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>751194</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-25 14:11:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/12544626&gt;

To reproduce: navigate to the URL and select one of the category names in red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751204</commentid>
    <comment_count>1</comment_count>
      <attachid>170730</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-25 14:20:36 -0700</bug_when>
    <thetext>Created attachment 170730
Add GraphicsContext::clipOut(Vector&lt;IntRect&gt;&amp;) and deploy it in RenderBlock::selectionGaps()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751211</commentid>
    <comment_count>2</comment_count>
      <attachid>170730</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-25 14:30:03 -0700</bug_when>
    <thetext>Comment on attachment 170730
Add GraphicsContext::clipOut(Vector&lt;IntRect&gt;&amp;) and deploy it in RenderBlock::selectionGaps()

View in context: https://bugs.webkit.org/attachment.cgi?id=170730&amp;action=review

I’m OK with this, but I suspect there may be two other variations that work equally well or perhaps even better.

&gt; Source/WebCore/ChangeLog:10
&gt; +        RenderBlock::selectionGaps() calls GraphicsContext::clipOut(const IntRect&amp;) for each float.
&gt; +        With Core Graphics, A function that takes a vector of rectangles and clips them all out at
&gt; +        once is faster than multiple calls to the function that clips out a single rectangle.

Is the issue here the performance of repeatedly calling the CGContextGetClipBoundingBox function?

If so, could we fix this performance issue another way by simply using a wide open rectangle instead of calling CGContextGetClipBoundingBox?

&gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:1080
&gt; +        CGContextBeginPath(context);
&gt; +        CGContextAddRects(context, cgRects, 2);
&gt; +        CGContextEOClip(context);

Can the calls to CGContextBeginPath and CGContextEOClip be moved outside the loop? I don’t entirely understand the semantics here, but if all the rectangles are exclusive or&apos;ed with each other, it seems that it could all be done with a single path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751223</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-25 14:46:56 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 170730 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170730&amp;action=review
&gt; 
&gt; I’m OK with this, but I suspect there may be two other variations that work equally well or perhaps even better.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        RenderBlock::selectionGaps() calls GraphicsContext::clipOut(const IntRect&amp;) for each float.
&gt; &gt; +        With Core Graphics, A function that takes a vector of rectangles and clips them all out at
&gt; &gt; +        once is faster than multiple calls to the function that clips out a single rectangle.
&gt; 
&gt; Is the issue here the performance of repeatedly calling the CGContextGetClipBoundingBox function?

That’s the most expensive part. There’s also some function call overhead, but I didn’t profile this so I don’t know if it’s significant.

&gt; 
&gt; If so, could we fix this performance issue another way by simply using a wide open rectangle instead of calling CGContextGetClipBoundingBox?

I am going to try that.

&gt; &gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:1080
&gt; &gt; +        CGContextBeginPath(context);
&gt; &gt; +        CGContextAddRects(context, cgRects, 2);
&gt; &gt; +        CGContextEOClip(context);
&gt; 
&gt; Can the calls to CGContextBeginPath and CGContextEOClip be moved outside the loop? I don’t entirely understand the semantics here, but if all the rectangles are exclusive or&apos;ed with each other, it seems that it could all be done with a single path.

We’d need to know that all rects in the input vector are pairwise disjoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751260</commentid>
    <comment_count>4</comment_count>
      <attachid>170741</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-25 15:12:54 -0700</bug_when>
    <thetext>Created attachment 170741
Remove an unnecessary call to CGContextGetClipBoundingBox from GraphicsContext::clipOut()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751354</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-25 17:05:38 -0700</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/r132545&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769832</commentid>
    <comment_count>6</comment_count>
    <who name="Nate Whetsell">nathan.whetsell</who>
    <bug_when>2012-11-16 18:30:23 -0800</bug_when>
    <thetext>*** Bug 39380 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170730</attachid>
            <date>2012-10-25 14:20:36 -0700</date>
            <delta_ts>2012-10-25 15:12:54 -0700</delta_ts>
            <desc>Add GraphicsContext::clipOut(Vector&lt;IntRect&gt;&amp;) and deploy it in RenderBlock::selectionGaps()</desc>
            <filename>12544626_r1.diff</filename>
            <type>text/plain</type>
            <size>10257</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjUzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTEwLTI1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTQ0
NjI2PiBbY2ddIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKCkgaXMgZXh0cmVtZWx5IHNsb3cg
d2hlbiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKCkgY2FsbHMgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmKSBmb3IgZWFjaCBmbG9hdC4KKyAg
ICAgICAgV2l0aCBDb3JlIEdyYXBoaWNzLCBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2ZWN0b3Ig
b2YgcmVjdGFuZ2xlcyBhbmQgY2xpcHMgdGhlbSBhbGwgb3V0IGF0CisgICAgICAgIG9uY2UgaXMg
ZmFzdGVyIHRoYW4gbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgY2xpcHMgb3V0
IGEgc2luZ2xlIHJlY3RhbmdsZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0KTogQWRkZWQgY2xpcE91dChj
b25zdCBWZWN0b3I8SW50UmVjdD4mKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXQpOiBBZGRlZC4gVGhpcyBpbXBsZW1lbnRhdGlvbiBqdXN0IGNhbGxzIHRo
ZQorICAgICAgICBzaW5nbGUtcmVjdGFuZ2xlIHZlcnNpb24gb2YgY2xpcE91dCgpIGZvciBlYWNo
IGVsZW1lbnQgaW4gdGhlIHZlY3Rvciwgc28gaXQgaXMgbm90IGFueSBmYXN0ZXIuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KTogQWRkZWQuIFRoaXMgaW1wbGVtZW50
YXRpb24gaXMgZmFzdGVyIHRoYW4gY2FsbGluZyB0aGUKKyAgICAgICAgc2luZ2xlLXJlY3Rhbmds
ZSB2ZXJzaW9uIG9mIGNsaXBPdXQoKSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSB2ZWN0b3IsIGJl
Y2F1c2UgaXQgZG9lc27igJl0IGdldAorICAgICAgICB0aGUgY2xpcCBib3VuZHMgZWFjaCB0aW1l
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVu
VkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KTogQWRk
ZWQuIFRoaXMgaW1wbGVtZW50YXRpb24ganVzdCBjYWxscyB0aGUKKyAgICAgICAgc2luZ2xlLXJl
Y3RhbmdsZSB2ZXJzaW9uIG9mIGNsaXBPdXQoKSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSB2ZWN0
b3IsIHNvIGl0IGlzIG5vdCBhbnkgZmFzdGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dCk6IEFkZGVkLiBUaGlzIGltcGxlbWVudGF0aW9uIGp1c3QgY2FsbHMgdGhl
CisgICAgICAgIHNpbmdsZS1yZWN0YW5nbGUgdmVyc2lvbiBvZiBjbGlwT3V0KCkgZm9yIGVhY2gg
ZWxlbWVudCBpbiB0aGUgdmVjdG9yLCBzbyBpdCBpcyBub3QgYW55IGZhc3Rlci4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KTogQWRkZWQuIFRoaXMgaW1wbGVt
ZW50YXRpb24ganVzdCBjYWxscyB0aGUKKyAgICAgICAgc2luZ2xlLXJlY3RhbmdsZSB2ZXJzaW9u
IG9mIGNsaXBPdXQoKSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSB2ZWN0b3IsIHNvIGl0IGlzIG5v
dCBhbnkgZmFzdGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dCk6IEFkZGVkLiBUaGlzIGltcGxlbWVudGF0aW9uIGp1c3QgY2FsbHMgdGhlCisgICAgICAg
IHNpbmdsZS1yZWN0YW5nbGUgdmVyc2lvbiBvZiBjbGlwT3V0KCkgZm9yIGVhY2ggZWxlbWVudCBp
biB0aGUgdmVjdG9yLCBzbyBpdCBpcyBub3QgYW55IGZhc3Rlci4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOiBBZGRlZC4gVGhpcyBpbXBsZW1lbnRhdGlvbiBqdXN0
IGNhbGxzIHRoZQorICAgICAgICBzaW5nbGUtcmVjdGFuZ2xlIHZlcnNpb24gb2YgY2xpcE91dCgp
IGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHZlY3Rvciwgc28gaXQgaXMgbm90IGFueSBmYXN0ZXIu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKTogQ2hhbmdlZCB0byB1c2UgdGhlIHZlcnNpb24g
b2YgY2xpcE91dCgpIHRoYXQgdGFrZXMKKyAgICAgICAgYSB2ZWN0b3Igb2YgcmVjdGFuZ2xlIGlu
c3RlYWQgb2YgY2FsbGluZyB0aGUgc2luZ2xlLXJlY3RhbmdsZSB2ZXJzaW9uIGZvciBlYWNoIGZs
b2F0LgorCiAyMDEyLTEwLTI1ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMyMjY5LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgJKHJldmlzaW9uIDEzMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNiArMzM2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBS
b3VuZGVkUmVjdCYpOwogICAgICAgICB2b2lkIGFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0
IEludFJlY3QmLCBpbnQgdGhpY2tuZXNzKTsKICAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IElu
dFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwog
ICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYpOwogICAg
ICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7CiAgICAgICAgIHZvaWQg
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJv
b2wgYW50aWFsaWFzID0gdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CShyZXZpc2lvbiAxMzI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODgsNiAr
MTA4OCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSCiAgICAg
Y2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2ZWRGaWxsUnVsZSk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZWN0cy5zaXplKCk7IGkgPCBzaXplOyArK2kpCisg
ICAgICAgIGNsaXBPdXQocmVjdHNbaV0pOworfQorCiBzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQg
Z2V0UGhhc2UoY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGUpCiB7
CiAgICAgRmxvYXRQb2ludCBwaGFzZSA9IGRlc3QubG9jYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAJKHJldmlzaW9uIDEzMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2Myw2
ICsxMDYzLDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFIKICAg
ICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBDR1JlY3QgY2dSZWN0c1syXTsK
KyAgICBjZ1JlY3RzWzBdID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSByZWN0cy5zaXplKCk7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgY2dSZWN0c1sxXSA9IHJlY3RzW2ldOworICAgICAgICBDR0NvbnRleHRC
ZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dEFkZFJlY3RzKGNvbnRleHQsIGNn
UmVjdHMsIDIpOworICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CisgICAgfQorfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52
Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCShyZXZpc2lvbiAxMzI1MDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYgKzQzNCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dChjb25zdCBJbnRSCiAgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVy
T3BlblZHOjpTdWJ0cmFjdENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcmVjdHMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBjbGlwT3V0KHJlY3RzW2ldKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCShyZXZpc2lvbiAxMzI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MzIsNiArMTMzMiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRS
CiAgICAgfQogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHJlY3RzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcmVjdHMu
c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBjbGlwT3V0KHJlY3RzW2ldKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJl
Y3QmIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHRoaWNrbmVzcykKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNp
b24gMTMyNTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDYgKzM0NiwxMiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSCiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLT5jbGlwUmVjdChyZWN0LCBTa1JlZ2lvbjo6a0RpZmZlcmVuY2VfT3Ap
OwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBWZWN0b3I8SW50UmVj
dD4mIHJlY3RzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcmVjdHMuc2l6ZSgp
OyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBjbGlwT3V0KHJlY3RzW2ldKTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkocmV2aXNp
b24gMTMyNTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3Jh
cGhpY3NDb250ZXh0V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODgsNiArOTg4LDEyIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFIKICAgICBFeGNsdWRlQ2xp
cFJlY3QobV9kYXRhLT5tX2RjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgp
LCB0clJlY3QubWF4WSgpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29u
c3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6
ZSA9IHJlY3RzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgY2xpcE91dChyZWN0c1tp
XSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDEz
MjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDYgKzM5OCwxMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJlY3RzLnNpemUoKTsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgY2xpcE91dChyZWN0c1tpXSk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMzI1MDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQ3LDYgKzMz
NDcsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNl
dC5lbmQoKTsKKyAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBmbG9hdEJveGVzOworICAgICAg
ICAgICAgZmxvYXRCb3hlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZsb2F0aW5nT2JqZWN0U2V0
LnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgICAgICBMYXlvdXRS
ZWN0IGZsb2F0Qm94KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZs
b2F0SW5jbHVkaW5nTWFyZ2luKHIpLApAQCAtMzM1NCw4ICszMzU2LDkgQEAgR2FwUmVjdHMgUmVu
ZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgci0+bV9yZW5kZXJlci0+d2lkdGgoKSwgci0+bV9yZW5kZXJlci0+aGVpZ2h0KCkp
OwogICAgICAgICAgICAgICAgIHJvb3RCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsb2F0Qm94
KTsKICAgICAgICAgICAgICAgICBmbG9hdEJveC5tb3ZlKHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRp
b24ueCgpLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLnkoKSk7Ci0gICAgICAgICAgICAgICAg
cGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KHBpeGVsU25hcHBlZEludFJlY3QoZmxvYXRCb3gp
KTsKKyAgICAgICAgICAgICAgICBmbG9hdEJveGVzLnVuY2hlY2tlZEFwcGVuZChwaXhlbFNuYXBw
ZWRJbnRSZWN0KGZsb2F0Qm94KSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwYWludElu
Zm8tPmNvbnRleHQtPmNsaXBPdXQoZmxvYXRCb3hlcyk7CiAgICAgICAgIH0KICAgICB9CiAK
</data>
<flag name="review"
          id="184419"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170741</attachid>
            <date>2012-10-25 15:12:54 -0700</date>
            <delta_ts>2012-10-25 16:57:51 -0700</delta_ts>
            <desc>Remove an unnecessary call to CGContextGetClipBoundingBox from GraphicsContext::clipOut()</desc>
            <filename>12544626_r2.diff</filename>
            <type>text/plain</type>
            <size>1683</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjUzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTEwLTI1ICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNTQ0
NjI2PiBbY2ddIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKCkgaXMgZXh0cmVtZWx5IHNsb3cg
d2hlbiB0aGVyZSBhcmUgbWFueSBmbG9hdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKCkgY2FsbHMgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmKSBmb3IgZWFjaCBmbG9hdC4KKyAg
ICAgICAgU3BlZCB1cCB0aGUgQ29yZSBHcmFwaGljcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1
bmN0aW9uIGNvbnNpZGVyYWJseSBieSByZW1vdmluZyBhbgorICAgICAgICB1bm5lY2Vzc2FyeSBj
YWxsIHRvIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6IENoYW5nZWQgdG8gdXNlIENHUmVjdEluZmluaXRlIHJh
dGhlciB0aGFuIHRoZSBib3VuZGluZworICAgICAgICBib3ggb2YgdGhlIGN1cnJlbnQgY2xpcC4K
KwogMjAxMi0xMC0yNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IE1vdmUgZGVmYXVsdCBET00gVGltZXIgdmFsdWVzIGludG8gU2V0dGluZ3MKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHJldmlzaW9uIDEzMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1
Nyw3ICsxMDU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50Ugog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVj
dCByZWN0c1syXSA9IHsgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4
dCgpKSwgcmVjdCB9OworICAgIENHUmVjdCByZWN0c1syXSA9IHsgQ0dSZWN0SW5maW5pdGUsIHJl
Y3QgfTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENH
Q29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7CiAgICAgQ0dDb250
ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsK
</data>
<flag name="review"
          id="184434"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>