<?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>100790</bug_id>
          
          <creation_ts>2012-10-30 14:45:05 -0700</creation_ts>
          <short_desc>Improve performance of MaskPtr</short_desc>
          <delta_ts>2012-10-30 18:10:36 -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>Platform</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>97494</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Evans">cevans</reporter>
          <assigned_to name="Chris Evans">cevans</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>inferno</cc>
    
    <cc>jschuh</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>754675</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 14:45:05 -0700</bug_when>
    <thetext>Eric noted that MaskPtr could be faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754680</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 14:52:58 -0700</bug_when>
    <thetext>The problem is that, at least with gcc, the mask value is being calculated every time. This is a series of serialized operations on the same register, which is not ideal.

Conceptually, we can do it in one instruction -- it&apos;s just an xor.

We don&apos;t simply put the value in a static, as referencing statics in an ASLR world is expensive on 32-bit and even uses a weird / noncompact instuction on 64-bit (rip-relative). Instead we just store the mask as a member of RenderArena, which causes very compact instruction usage.

Whilst looking at the assembly of RenderArena::allocate(), I also noted another problem on the hot path: a serialized register extension due to mismatch of int vs. size_t in the code. This is also easy to take care of in the same CL, so I will do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754682</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 14:55:01 -0700</bug_when>
    <thetext>OMG.  run-perf-tests --profile finds its first victim! :)

Thanks for the follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754689</commentid>
    <comment_count>3</comment_count>
      <attachid>171525</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 15:05:28 -0700</bug_when>
    <thetext>Created attachment 171525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754692</commentid>
    <comment_count>4</comment_count>
      <attachid>171525</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 15:07:21 -0700</bug_when>
    <thetext>Comment on attachment 171525
Patch

Since this is a perf patch, seems we should run one of the tests which this showed up in and see if there is a change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754696</commentid>
    <comment_count>5</comment_count>
      <attachid>171525</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-10-30 15:08:46 -0700</bug_when>
    <thetext>Comment on attachment 171525
Patch

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

&gt; Source/WebCore/rendering/RenderArena.cpp:120
&gt; +    if (LIKELY(size &lt; gMaxRecycledSize)) {

Did you actually find these LIKELY macros to make a measurable improvement? It&apos;s unclear from your ChangeLog description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754701</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 15:14:23 -0700</bug_when>
    <thetext>@ojan: for gcc at least, the branch structure isn&apos;t changed by the new LIKELY()s. Since Eric has identified this function as very performance hot, though, I thought there&apos;s no harm in being explicit about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754703</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-10-30 15:16:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; @ojan: for gcc at least, the branch structure isn&apos;t changed by the new LIKELY()s. Since Eric has identified this function as very performance hot, though, I thought there&apos;s no harm in being explicit about it.

As a rule, we (i.e. WebKit) only put LIKELY/UNLIKELY in cases where we&apos;ve seen measurable improvement. In practice, it almost never matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754705</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 15:17:44 -0700</bug_when>
    <thetext>Ok, I&apos;ll remove them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754707</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 15:19:24 -0700</bug_when>
    <thetext>To test, I might do something like this:

git stash (save your patch)
Tools/Scripts/build-webkit --chromium (or however you do a build for your checkout)
Tools/Scripts/run-perf-tests Parser/tiny-innerHTML.html (since that&apos;s one of the ones which showed MaskPtr as hot)
git stash apply
Tools/Scripts/run-perf-tests Parser/tiny-innerHTML.html

update the bug/ChangeLog with your results.  I would expect you will see a small progression, or no change at all.

There are many other tests in PerformanceTests you could run.  You can look at my comment on bug 97494 for other tests which showed MaskPtr as hot.

The profiles in bug 97494 came from an experimental --profile flag which I&apos;m adding to run-perf-tests as part of bug 99517.  If you want you can apply the patch from there, but given that it&apos;s only ever been tested on my machine, it&apos;s highly likely it won&apos;t work for you out of the box (Also requires apt-get install google-perftools or prodaccess to the shared pprof binary).

In any case, just run a couple run-perf-tests tests, and comment about the change or lack there of.  Just showing that you did some minor perf testing, is all I really care about.  The bots will catch if we did anything horribly wrong. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754712</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 15:20:19 -0700</bug_when>
    <thetext>Your instinct to fix the assembler is good, but I think we generally lean on the profile/benchmark data first (which is I think what Ojan is trying to say)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754713</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 15:20:51 -0700</bug_when>
    <thetext>I forgot to list a second build step in my steps I gave you above, but I&apos;m sure you&apos;ll figure it out. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754766</commentid>
    <comment_count>12</comment_count>
      <attachid>171543</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 16:16:48 -0700</bug_when>
    <thetext>Created attachment 171543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754769</commentid>
    <comment_count>13</comment_count>
      <attachid>171543</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-30 16:18:04 -0700</bug_when>
    <thetext>Comment on attachment 171543
Patch

Thanks.  This sort of ChangeLog information is really useful!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754784</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2012-10-30 16:41:30 -0700</bug_when>
    <thetext>Well, Eric and I are vaguely embarrassed because we now think that MaskPtr in the profiles in fact refers to tcmalloc&apos;s MaskPtr in the anonymous namespace. If this were the RenderArena MaskPtr, we&apos;d expect to have seen WebCore::MaskPtr.

Still, if MaskPtr is hot in tcmalloc, there&apos;s probably another benchmark we&apos;ve fixed that would have been hot in RenderArena.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754844</commentid>
    <comment_count>15</comment_count>
      <attachid>171543</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-30 18:10:32 -0700</bug_when>
    <thetext>Comment on attachment 171543
Patch

Clearing flags on attachment: 171543

Committed r132970: &lt;http://trac.webkit.org/changeset/132970&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754845</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-30 18:10:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171525</attachid>
            <date>2012-10-30 15:05:28 -0700</date>
            <delta_ts>2012-10-30 16:16:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk_100790.diff</filename>
            <type>text/plain</type>
            <size>4888</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5oCShyZXZpc2lvbiAxMzI4
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXJlbmEuaAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNiArNjAsOCBAQAogICAgIC8vIFVuZGVybHlpbmcgYXJlbmEgcG9vbAogICAg
IEFyZW5hUG9vbCBtX3Bvb2w7CiAKKyAgICAvLyBUaGUgbWFzayB1c2VkIHRvIHNlY3VyZSB0aGUg
cmVjeWNsZWQgZnJlZWxpc3QgcG9pbnRlcnMuCisgICAgdWludHB0cl90IG1fbWFzazsKICAgICAv
LyBUaGUgcmVjeWNsZXIgYXJyYXkgaXMgc3BhcnNlIHdpdGggdGhlIGluZGljZXMgYmVpbmcgbXVs
dGlwbGVzIG9mIDQsCiAgICAgLy8gaS5lLiwgMCwgNCwgOCwgMTIsIDE2LCAyMCwgLi4uCiAgICAg
dm9pZCogbV9yZWN5Y2xlcnNbZ01heFJlY3ljbGVkU2l6ZSA+PiAyXTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkocmV2aXNpb24gMTMyODA0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTggKzQzLDggQEAKICNkZWZpbmUgUk9VTkRVUCh4LCB5KSAoKCgoeCkrKCh5KS0xKSkvKHkp
KSooeSkpCiAKICNpZmRlZiBOREVCVUcKLS8vIE1hc2sgZnJlZWxpc3QgcG9pbnRlcnMgdG8gZGV0
ZWN0IGNvcnJ1cHRpb24gYW5kIHByZXZlbnQgZnJlZWxpc3Qgc3ByYXlpbmcuCi0vLyBXZSB1c2Ug
YW4gYXJiaXRyYXkgZnVuY3Rpb24gYW5kIHJlbHkgb24gQVNMUiB0byByYW5kb21pemUgaXQuCi0v
LyBUaGUgZmlyc3QgdmFsdWUgaW4gUmVuZGVyT2JqZWN0IChvciBhbnkgY2xhc3MpIGlzIGEgdnRh
YmxlIHBvaW50ZXIsIHdoaWNoIGFsd2F5cwotLy8gb3ZlcmxhcHMgd2l0aCB0aGUgbmV4dCBwb2lu
dGVyLiBUaGlzIGNoYW5nZSBndWFyYW50ZWVzIHRoYXQgdGhlIG1hc2tlZCB2dGFibGUvbmV4dAot
Ly8gcG9pbnRlciB3aWxsIG5ldmVyIHBvaW50IHRvIHZhbGlkIG1lbW9yeS4gU28sIHdlIHNob3Vs
ZCBpbW1lZGlhdGVseSBjcmFzaCBvbiB0aGUKLS8vIGZpcnN0IGludmFsaWQgdnRhYmxlIGFjY2Vz
cyBmb3IgYSBzdGFsZSBSZW5kZXJPYmplY3QgcG9pbnRlci4KLS8vIFNlZSBodHRwOi8vZG93bmxv
YWQuY3Jvd2RzdHJpa2UuY29tL3BhcGVycy9oZXMtZXhwbG9pdGluZy1hLWNvYWxtaW5lLnBkZi4K
LXN0YXRpYyB2b2lkKiBNYXNrUHRyKHZvaWQqIHApCitzdGF0aWMgdm9pZCogTWFza1B0cih2b2lk
KiBwLCB1aW50cHRyX3QgbWFzaykKIHsKLSAgICAvLyBUaGUgYm90dG9tIGJpdHMgYXJlIHByZWRp
Y3RhYmxlIGJlY2F1c2UgdGhlIGJpbmFyeSBpcyBsb2FkZWQgb24gYSBib3VuZGFyeS4KLSAgICAv
LyBUaGlzIGp1c3Qgc2hpZnRzIG1vc3Qgb2YgdGhvc2UgcHJlZGljdGFibGUgYml0cyBvdXQuCi0g
ICAgY29uc3QgdWludHB0cl90IG1hc2sgPSB+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihX
VEY6OmZhc3RNYWxsb2MpID4+IDEzKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApIF4gbWFzayk7CiB9CiAjZW5kaWYKQEAg
LTg1LDYgKzc1LDE5IEBACiAKICAgICAvLyBaZXJvIG91dCB0aGUgcmVjeWNsZXJzIGFycmF5CiAg
ICAgbWVtc2V0KG1fcmVjeWNsZXJzLCAwLCBzaXplb2YobV9yZWN5Y2xlcnMpKTsKKworICAgIC8v
IE1hc2sgZnJlZWxpc3QgcG9pbnRlcnMgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gYW5kIHN0b3AgZnJl
ZWxpc3Qgc3ByYXlpbmcuCisgICAgLy8gV2UgdXNlIGFuIGFyYml0cmF5IGZ1bmN0aW9uIGFuZCBy
ZWx5IG9uIEFTTFIgdG8gcmFuZG9taXplIGl0LgorICAgIC8vIFRoZSBmaXJzdCB2YWx1ZSBpbiBS
ZW5kZXJPYmplY3QgKG9yIGFueSBjbGFzcykgaXMgYSB2dGFibGUgcG9pbnRlciwgd2hpY2gKKyAg
ICAvLyBhbHdheXMgb3ZlcmxhcHMgd2l0aCB0aGUgbmV4dCBwb2ludGVyLiBUaGlzIGNoYW5nZSBn
dWFyYW50ZWVzIHRoYXQgdGhlCisgICAgLy8gbWFza2VkIHZ0YWJsZS9uZXh0IHBvaW50ZXIgd2ls
bCBuZXZlciBwb2ludCB0byB2YWxpZCBtZW1vcnkuIFNvLCB3ZQorICAgIC8vIHNob3VsZCBpbW1l
ZGlhdGVseSBjcmFzaCBvbiB0aGUgZmlyc3QgaW52YWxpZCB2dGFibGUgYWNjZXNzIGZvciBhIHN0
YWxlCisgICAgLy8gUmVuZGVyT2JqZWN0IHBvaW50ZXIuCisgICAgLy8gU2VlIGh0dHA6Ly9kb3du
bG9hZC5jcm93ZHN0cmlrZS5jb20vcGFwZXJzL2hlcy1leHBsb2l0aW5nLWEtY29hbG1pbmUucGRm
LgorCisgICAgLy8gVGhlIGJvdHRvbSBiaXRzIGFyZSBwcmVkaWN0YWJsZSBiZWNhdXNlIHRoZSBi
aW5hcnkgaXMgbG9hZGVkIG9uIGEKKyAgICAvLyBib3VuZGFyeS4gVGhpcyBqdXN0IHNoaWZ0cyBt
b3N0IG9mIHRob3NlIHByZWRpY3RhYmxlIGJpdHMgb3V0LgorICAgIG1fbWFzayA9IH4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KFdURjo6ZmFzdE1hbGxvYykgPj4gMTMpOwogfQogCiBSZW5k
ZXJBcmVuYTo6flJlbmRlckFyZW5hKCkKQEAgLTExNCwxMyArMTE3LDEzIEBACiAgICAgc2l6ZSA9
IFJPVU5EVVAoc2l6ZSwgc2l6ZW9mKHZvaWQqKSk7CiAKICAgICAvLyBDaGVjayByZWN5Y2xlcnMg
Zmlyc3QKLSAgICBpZiAoc2l6ZSA8IGdNYXhSZWN5Y2xlZFNpemUpIHsKLSAgICAgICAgY29uc3Qg
aW50IGluZGV4ID0gc2l6ZSA+PiAyOworICAgIGlmIChMSUtFTFkoc2l6ZSA8IGdNYXhSZWN5Y2xl
ZFNpemUpKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBpbmRleCA9IHNpemUgPj4gMjsKIAogICAg
ICAgICByZXN1bHQgPSBtX3JlY3ljbGVyc1tpbmRleF07Ci0gICAgICAgIGlmIChyZXN1bHQpIHsK
KyAgICAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpIHsKICAgICAgICAgICAgIC8vIE5lZWQgdG8g
bW92ZSB0byB0aGUgbmV4dCBvYmplY3QKLSAgICAgICAgICAgIHZvaWQqIG5leHQgPSBNYXNrUHRy
KCooKHZvaWQqKilyZXN1bHQpKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHQgPSBNYXNrUHRyKCoo
KHZvaWQqKilyZXN1bHQpLCBtX21hc2spOwogICAgICAgICAgICAgbV9yZWN5Y2xlcnNbaW5kZXhd
ID0gbmV4dDsKICAgICAgICAgfQogICAgIH0KQEAgLTE1NiwxMSArMTU5LDExIEBACiAgICAgc2l6
ZSA9IFJPVU5EVVAoc2l6ZSwgc2l6ZW9mKHZvaWQqKSk7CiAKICAgICAvLyBTZWUgaWYgaXQncyBh
IHNpemUgdGhhdCB3ZSByZWN5Y2xlCi0gICAgaWYgKHNpemUgPCBnTWF4UmVjeWNsZWRTaXplKSB7
Ci0gICAgICAgIGNvbnN0IGludCBpbmRleCA9IHNpemUgPj4gMjsKKyAgICBpZiAoTElLRUxZKHNp
emUgPCBnTWF4UmVjeWNsZWRTaXplKSkgeworICAgICAgICBjb25zdCBzaXplX3QgaW5kZXggPSBz
aXplID4+IDI7CiAgICAgICAgIHZvaWQqIGN1cnJlbnRUb3AgPSBtX3JlY3ljbGVyc1tpbmRleF07
CiAgICAgICAgIG1fcmVjeWNsZXJzW2luZGV4XSA9IHB0cjsKLSAgICAgICAgKigodm9pZCoqKXB0
cikgPSBNYXNrUHRyKGN1cnJlbnRUb3ApOworICAgICAgICAqKCh2b2lkKiopcHRyKSA9IE1hc2tQ
dHIoY3VycmVudFRvcCwgbV9tYXNrKTsKICAgICB9CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEzMjk0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEwLTMwICBDaHJpcyBFdmFucyAgPGNldmFuc0Bn
b29nbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgTWFza1B0ci4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDc5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbGN1bGF0ZSB0
aGUgbWFzayBvbmNlLCBhbmQgc3RvcmUgaXQgYXMgYSBmYXN0LWFjY2VzcyBtZW1iZXIgdmFyaWFi
bGUuCisgICAgICAgIEFsc28gYXZvaWQgdW5uZWNjZXNzYXJ5IGludGVnZXIgd2lkdGggZXhwYW5z
aW9uIGluIGluZGV4IGNhbGN1bGF0aW9uLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckFy
ZW5hLmNwcDoKKyAgICAgICAgKE1hc2tQdHIpOiBVc2UgYSBwYXNzZWQtaW4gbWFzayBmb3IgdGhl
IG1hc2sgb3BlcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQXJlbmE6OlJlbmRlckFy
ZW5hKTogQ2FsY3VsYXRlIHRoZSBtYXNrIGFuZCBzdG9yZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckFyZW5hOjphbGxvY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcmVuYTo6
ZnJlZSk6IFVzZSBzdG9yZWQgbWFzaywgYXZvaWQgdW5uZWNjZXNzYXJ5IGNhc3RzLCBhbmQgdXNl
IExJS0VMWSgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJBcmVuYS5oOgorICAgICAgICAo
UmVuZGVyQXJlbmEpOiBTdG9yZSB0aGUgZnJlZWxpc3QgbWFzayBhcyBhIG1lbWJlciB2YXJpYWJs
ZS4KKwogMjAxMi0xMC0zMCAgVmluY2VudCBTY2hlaWIgIDxzY2hlaWJAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzI5MjcuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171543</attachid>
            <date>2012-10-30 16:16:48 -0700</date>
            <delta_ts>2012-10-30 18:10:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk_100790_3.diff</filename>
            <type>text/plain</type>
            <size>5132</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5oCShyZXZpc2lvbiAxMzI4
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXJlbmEuaAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNiArNjAsOCBAQAogICAgIC8vIFVuZGVybHlpbmcgYXJlbmEgcG9vbAogICAg
IEFyZW5hUG9vbCBtX3Bvb2w7CiAKKyAgICAvLyBUaGUgbWFzayB1c2VkIHRvIHNlY3VyZSB0aGUg
cmVjeWNsZWQgZnJlZWxpc3QgcG9pbnRlcnMuCisgICAgdWludHB0cl90IG1fbWFzazsKICAgICAv
LyBUaGUgcmVjeWNsZXIgYXJyYXkgaXMgc3BhcnNlIHdpdGggdGhlIGluZGljZXMgYmVpbmcgbXVs
dGlwbGVzIG9mIDQsCiAgICAgLy8gaS5lLiwgMCwgNCwgOCwgMTIsIDE2LCAyMCwgLi4uCiAgICAg
dm9pZCogbV9yZWN5Y2xlcnNbZ01heFJlY3ljbGVkU2l6ZSA+PiAyXTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkocmV2aXNpb24gMTMyODA0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTggKzQzLDggQEAKICNkZWZpbmUgUk9VTkRVUCh4LCB5KSAoKCgoeCkrKCh5KS0xKSkvKHkp
KSooeSkpCiAKICNpZmRlZiBOREVCVUcKLS8vIE1hc2sgZnJlZWxpc3QgcG9pbnRlcnMgdG8gZGV0
ZWN0IGNvcnJ1cHRpb24gYW5kIHByZXZlbnQgZnJlZWxpc3Qgc3ByYXlpbmcuCi0vLyBXZSB1c2Ug
YW4gYXJiaXRyYXkgZnVuY3Rpb24gYW5kIHJlbHkgb24gQVNMUiB0byByYW5kb21pemUgaXQuCi0v
LyBUaGUgZmlyc3QgdmFsdWUgaW4gUmVuZGVyT2JqZWN0IChvciBhbnkgY2xhc3MpIGlzIGEgdnRh
YmxlIHBvaW50ZXIsIHdoaWNoIGFsd2F5cwotLy8gb3ZlcmxhcHMgd2l0aCB0aGUgbmV4dCBwb2lu
dGVyLiBUaGlzIGNoYW5nZSBndWFyYW50ZWVzIHRoYXQgdGhlIG1hc2tlZCB2dGFibGUvbmV4dAot
Ly8gcG9pbnRlciB3aWxsIG5ldmVyIHBvaW50IHRvIHZhbGlkIG1lbW9yeS4gU28sIHdlIHNob3Vs
ZCBpbW1lZGlhdGVseSBjcmFzaCBvbiB0aGUKLS8vIGZpcnN0IGludmFsaWQgdnRhYmxlIGFjY2Vz
cyBmb3IgYSBzdGFsZSBSZW5kZXJPYmplY3QgcG9pbnRlci4KLS8vIFNlZSBodHRwOi8vZG93bmxv
YWQuY3Jvd2RzdHJpa2UuY29tL3BhcGVycy9oZXMtZXhwbG9pdGluZy1hLWNvYWxtaW5lLnBkZi4K
LXN0YXRpYyB2b2lkKiBNYXNrUHRyKHZvaWQqIHApCitzdGF0aWMgdm9pZCogTWFza1B0cih2b2lk
KiBwLCB1aW50cHRyX3QgbWFzaykKIHsKLSAgICAvLyBUaGUgYm90dG9tIGJpdHMgYXJlIHByZWRp
Y3RhYmxlIGJlY2F1c2UgdGhlIGJpbmFyeSBpcyBsb2FkZWQgb24gYSBib3VuZGFyeS4KLSAgICAv
LyBUaGlzIGp1c3Qgc2hpZnRzIG1vc3Qgb2YgdGhvc2UgcHJlZGljdGFibGUgYml0cyBvdXQuCi0g
ICAgY29uc3QgdWludHB0cl90IG1hc2sgPSB+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihX
VEY6OmZhc3RNYWxsb2MpID4+IDEzKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApIF4gbWFzayk7CiB9CiAjZW5kaWYKQEAg
LTg1LDYgKzc1LDE5IEBACiAKICAgICAvLyBaZXJvIG91dCB0aGUgcmVjeWNsZXJzIGFycmF5CiAg
ICAgbWVtc2V0KG1fcmVjeWNsZXJzLCAwLCBzaXplb2YobV9yZWN5Y2xlcnMpKTsKKworICAgIC8v
IE1hc2sgZnJlZWxpc3QgcG9pbnRlcnMgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gYW5kIHN0b3AgZnJl
ZWxpc3Qgc3ByYXlpbmcuCisgICAgLy8gV2UgdXNlIGFuIGFyYml0cmF5IGZ1bmN0aW9uIGFuZCBy
ZWx5IG9uIEFTTFIgdG8gcmFuZG9taXplIGl0LgorICAgIC8vIFRoZSBmaXJzdCB2YWx1ZSBpbiBS
ZW5kZXJPYmplY3QgKG9yIGFueSBjbGFzcykgaXMgYSB2dGFibGUgcG9pbnRlciwgd2hpY2gKKyAg
ICAvLyBhbHdheXMgb3ZlcmxhcHMgd2l0aCB0aGUgbmV4dCBwb2ludGVyLiBUaGlzIGNoYW5nZSBn
dWFyYW50ZWVzIHRoYXQgdGhlCisgICAgLy8gbWFza2VkIHZ0YWJsZS9uZXh0IHBvaW50ZXIgd2ls
bCBuZXZlciBwb2ludCB0byB2YWxpZCBtZW1vcnkuIFNvLCB3ZQorICAgIC8vIHNob3VsZCBpbW1l
ZGlhdGVseSBjcmFzaCBvbiB0aGUgZmlyc3QgaW52YWxpZCB2dGFibGUgYWNjZXNzIGZvciBhIHN0
YWxlCisgICAgLy8gUmVuZGVyT2JqZWN0IHBvaW50ZXIuCisgICAgLy8gU2VlIGh0dHA6Ly9kb3du
bG9hZC5jcm93ZHN0cmlrZS5jb20vcGFwZXJzL2hlcy1leHBsb2l0aW5nLWEtY29hbG1pbmUucGRm
LgorCisgICAgLy8gVGhlIGJvdHRvbSBiaXRzIGFyZSBwcmVkaWN0YWJsZSBiZWNhdXNlIHRoZSBi
aW5hcnkgaXMgbG9hZGVkIG9uIGEKKyAgICAvLyBib3VuZGFyeS4gVGhpcyBqdXN0IHNoaWZ0cyBt
b3N0IG9mIHRob3NlIHByZWRpY3RhYmxlIGJpdHMgb3V0LgorICAgIG1fbWFzayA9IH4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KFdURjo6ZmFzdE1hbGxvYykgPj4gMTMpOwogfQogCiBSZW5k
ZXJBcmVuYTo6flJlbmRlckFyZW5hKCkKQEAgLTExNSwxMiArMTE4LDEyIEBACiAKICAgICAvLyBD
aGVjayByZWN5Y2xlcnMgZmlyc3QKICAgICBpZiAoc2l6ZSA8IGdNYXhSZWN5Y2xlZFNpemUpIHsK
LSAgICAgICAgY29uc3QgaW50IGluZGV4ID0gc2l6ZSA+PiAyOworICAgICAgICBjb25zdCBzaXpl
X3QgaW5kZXggPSBzaXplID4+IDI7CiAKICAgICAgICAgcmVzdWx0ID0gbV9yZWN5Y2xlcnNbaW5k
ZXhdOwogICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAvLyBOZWVkIHRvIG1vdmUg
dG8gdGhlIG5leHQgb2JqZWN0Ci0gICAgICAgICAgICB2b2lkKiBuZXh0ID0gTWFza1B0cigqKCh2
b2lkKiopcmVzdWx0KSk7CisgICAgICAgICAgICB2b2lkKiBuZXh0ID0gTWFza1B0cigqKCh2b2lk
KiopcmVzdWx0KSwgbV9tYXNrKTsKICAgICAgICAgICAgIG1fcmVjeWNsZXJzW2luZGV4XSA9IG5l
eHQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTcsMTAgKzE2MCwxMCBAQAogCiAgICAgLy8gU2Vl
IGlmIGl0J3MgYSBzaXplIHRoYXQgd2UgcmVjeWNsZQogICAgIGlmIChzaXplIDwgZ01heFJlY3lj
bGVkU2l6ZSkgewotICAgICAgICBjb25zdCBpbnQgaW5kZXggPSBzaXplID4+IDI7CisgICAgICAg
IGNvbnN0IHNpemVfdCBpbmRleCA9IHNpemUgPj4gMjsKICAgICAgICAgdm9pZCogY3VycmVudFRv
cCA9IG1fcmVjeWNsZXJzW2luZGV4XTsKICAgICAgICAgbV9yZWN5Y2xlcnNbaW5kZXhdID0gcHRy
OwotICAgICAgICAqKCh2b2lkKiopcHRyKSA9IE1hc2tQdHIoY3VycmVudFRvcCk7CisgICAgICAg
ICooKHZvaWQqKilwdHIpID0gTWFza1B0cihjdXJyZW50VG9wLCBtX21hc2spOwogICAgIH0KICNl
bmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyOTQ3KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTItMTAtMzAg
IENocmlzIEV2YW5zICA8Y2V2YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBwZXJm
b3JtYW5jZSBvZiBNYXNrUHRyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAwNzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2FsY3VsYXRlIHRoZSBtYXNrIG9uY2UsIGFuZCBzdG9yZSBpdCBhcyBhIGZh
c3QtYWNjZXNzIG1lbWJlciB2YXJpYWJsZS4KKyAgICAgICAgQWxzbyBhdm9pZCB1bm5lY2Nlc3Nh
cnkgaW50ZWdlciB3aWR0aCBleHBhbnNpb24gaW4gaW5kZXggY2FsY3VsYXRpb24uCisgICAgICAg
IFBhcnNlci90aW55LWlubmVySFRNTC5odG1sIGhhcyBhIGhpZ2ggc3RkZGV2LgorICAgICAgICBC
ZXN0IHJlc3VsdCBJJ3ZlIHNlZW4gcHJlLXBhdGNoIGlzIDUuNzAgcnVucy9zLgorICAgICAgICBC
ZXN0IHJlc3VsdCBJJ3ZlIHNlZW4gcG9zdC1wYXRjaCBpcyA1LjcyIHJ1bnMvcywgYnV0IHRoaXMg
aXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuCisgICAgICAgIE1hc2tQdHIgaXMgc3Rp
bGwgc2hvd2luZyBhcyB+MiUgaW4gdGhlIHByb2ZpbGUsIHNvIHdlJ3JlIG5vdCBzdXJlIHdlIHRy
dXN0IHRoZSBwcm9maWxlIHN5bWJvbGl6YXRpb24gYXQgdGhpcyB0aW1lLgorICAgICAgICBNYXNr
UHRyIGlzIG5vdyByZWR1Y2VkIHRvIGEgc2luZ2xlIGlubGluZSBpbnN0cnVjdGlvbiAod2FzOiA0
KSBzbyB0aGlzIHNlZW1zIGxpa2UgYSBzdHJpY3QgaW1wcm92ZW1lbnQgd29ydGggbGFuZGluZy4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJBcmVuYS5jcHA6CisgICAgICAgIChNYXNrUHRy
KTogVXNlIGEgcGFzc2VkLWluIG1hc2sgZm9yIHRoZSBtYXNrIG9wZXJhdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckFyZW5hOjpSZW5kZXJBcmVuYSk6IENhbGN1bGF0ZSB0aGUgbWFzayBh
bmQgc3RvcmUgaXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcmVuYTo6YWxsb2NhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQXJlbmE6OmZyZWUpOiBVc2Ugc3RvcmVkIG1hc2sgYW5k
IGF2b2lkIHVubmVjY2Vzc2FyeSBjYXN0cy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXJl
bmEuaDoKKyAgICAgICAgKFJlbmRlckFyZW5hKTogU3RvcmUgdGhlIGZyZWVsaXN0IG1hc2sgYXMg
YSBtZW1iZXIgdmFyaWFibGUuCisKIDIwMTItMTAtMzAgIFZpbmNlbnQgU2NoZWliICA8c2NoZWli
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMyOTI3
Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>