<?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>87832</bug_id>
          
          <creation_ts>2012-05-30 01:09:27 -0700</creation_ts>
          <short_desc>[Performance] Optimize querySelector() by caching a CSSParser object on Document</short_desc>
          <delta_ts>2012-05-30 01:32:46 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>87625</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>darin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>636998</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-05-30 01:09:27 -0700</bug_when>
    <thetext>Currently one of the bottlenecks of Node::querySelector() and Node::querySelectorAll() is to create a CSSParser object every time.

PassRefPtr&lt;Element&gt; Node::querySelector(const String&amp; selectors, ExceptionCode&amp; ec)
{
    CSSParser parser(document());  // This is a bottleneck!
    CSSSelectorList querySelectorList;
    parser.parseSelector(selectors, querySelectorList);
    ...;
}

We can avoid creating a CSSParser object by caching the CSSParser object on Document.

I&apos;ll upload a couple of proposed patches for performance comparison. After that I&apos;ll post some comments on the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637005</commentid>
    <comment_count>1</comment_count>
      <attachid>144745</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-05-30 01:17:06 -0700</bug_when>
    <thetext>Created attachment 144745
Patch [A]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637007</commentid>
    <comment_count>2</comment_count>
      <attachid>144747</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-05-30 01:19:58 -0700</bug_when>
    <thetext>Created attachment 144747
Patch [B]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637015</commentid>
    <comment_count>3</comment_count>
      <attachid>144751</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-05-30 01:28:19 -0700</bug_when>
    <thetext>Created attachment 144751
Patch [C]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637017</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-30 01:29:37 -0700</bug_when>
    <thetext>CSSParser has so far not been reusable. There might be state left from the previous runs that affect the results of the next runs.

I think you should try caching SelectorQueries first. That would avoid the need to spin up the parser repeatedly in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637019</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-05-30 01:32:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; CSSParser has so far not been reusable. There might be state left from the previous runs that affect the results of the next runs.
&gt; 
&gt; I think you should try caching SelectorQueries first. That would avoid the need to spin up the parser repeatedly in the first place.

Sounds reasonable. Caching SelectorQueries would solve the CSSParser construction problem.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144745</attachid>
            <date>2012-05-30 01:17:06 -0700</date>
            <delta_ts>2012-05-30 01:19:53 -0700</delta_ts>
            <desc>Patch [A]</desc>
            <filename>bug-87832-20120530171705.patch</filename>
            <type>text/plain</type>
            <size>3204</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJhZjIwYTBhN2YxZGEz
ZmMwM2UzN2U4Yjc0Y2RhNzNhMWI4OWYyNi4uMDI4YTRhYWI2NjI5MjFkNTEyNDRhMTE1M2YwYzBh
NDMxZWE3NzQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTMwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGVyZm9ybWFuY2Vd
IE9wdGltaXplIHF1ZXJ5U2VsZWN0b3IoKSBieSBjYWNoaW5nIGEgQ1NTUGFyc2VyIG9iamVjdCBv
biBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FjaGVk
Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cXVlcnlTZWxlY3Rvcik6CisKIDIw
MTItMDUtMjkgIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5jb20+CiAKICAgICAgICAgW0ZpbGVBUEld
IFRoZSByZXN1bHQgYXR0cmlidXRlIG9mIEZpbGVSZWFkZXIgc2h1b2xkIHVzZSBudWxsIHRvIHJl
cGxhY2UgZW1wdHkgc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5NDQ3OGE4NzNm
YjVhOTliMjRkNDc2ODEzNTlmMDQ0NGUwYjMxZTAwLi4xMGVlYzFmNjQwMmMyZDIwNTc3YTVmODc4
MGYzNjljYTA3NDY1MzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTczMSw2ICs3MzEs
MTMgQEAgdm9pZCBEb2N1bWVudDo6aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCiAgICAgbV9lbGVt
ZW50c0J5QWNjZXNzS2V5LmNsZWFyKCk7CiB9CiAKK0NTU1BhcnNlciogRG9jdW1lbnQ6OmNhY2hl
ZENTU1BhcnNlcigpCit7CisgICAgaWYgKCFtX2Nzc1BhcnNlcikKKyAgICAgICAgbV9jc3NQYXJz
ZXIgPSBhZG9wdFB0cihuZXcgQ1NTUGFyc2VyKHRoaXMpKTsKKyAgICByZXR1cm4gbV9jc3NQYXJz
ZXIuZ2V0KCk7Cit9CisKIE1lZGlhUXVlcnlNYXRjaGVyKiBEb2N1bWVudDo6bWVkaWFRdWVyeU1h
dGNoZXIoKQogewogICAgIGlmICghbV9tZWRpYVF1ZXJ5TWF0Y2hlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKaW5kZXggNDNjNWY1Nzc0Y2U3MGY0ZDU1NzFmMGU3MWEwMGVhODBlODM2ODEzYS4uOGE2ZTAw
YTFiYWFjODM3NDQzZjcwMGNiODVlNzFjZjczNDkzNjNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
QEAgLTYwLDYgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQVhPYmplY3RDYWNo
ZTsKIGNsYXNzIEF0dHI7CiBjbGFzcyBDREFUQVNlY3Rpb247CitjbGFzcyBDU1NQYXJzZXI7CiBj
bGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENh
Y2hlZENTU1N0eWxlU2hlZXQ7CkBAIC0yNjksNiArMjcwLDggQEAgcHVibGljOgogICAgIEVsZW1l
bnQqIGdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSk7CiAgICAgdm9pZCBp
bnZhbGlkYXRlQWNjZXNzS2V5TWFwKCk7CiAKKyAgICBDU1NQYXJzZXIqIGNhY2hlZENTU1BhcnNl
cigpOworCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBEb2N1bWVudAogCiAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CkBAIC0xMzg3LDYgKzEz
OTAsNyBAQCBwcml2YXRlOgogICAgIFRpbWVyPERvY3VtZW50PiBtX3VwZGF0ZUZvY3VzQXBwZWFy
YW5jZVRpbWVyOwogCiAgICAgRWxlbWVudCogbV9jc3NUYXJnZXQ7CisgICAgT3duUHRyPENTU1Bh
cnNlcj4gbV9jc3NQYXJzZXI7CiAKICAgICAvLyBGSVhNRTogTWVyZ2UgdGhlc2UgMiB2YXJpYWJs
ZXMgaW50byBhbiBlbnVtLiBBbHNvLCBGcmFtZUxvYWRlcjo6bV9kaWRDYWxsSW1wbGljaXRDbG9z
ZQogICAgIC8vIGlzIGFsbW9zdCBhIGR1cGxpY2F0aW9uIG9mIHRoaXMgZGF0YSwgc28gdGhhdCBz
aG91bGQgcHJvYmFibHkgZ2V0IG1lcmdlZCBpbiB0b28uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNzk0
NTBjNWI1MGU0MTAwZWYzZTM3ZmE1MjVjZDE4NzE4ODMyZWJkMS4uMjQwODA5NjEwMDc4YjUzYTg4
NTVhY2YyZDFmM2RlYzgwOGMwMjE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTY3OCw5ICsxNjc4
LDkgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJgogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KCkp
OworCiAgICAgQ1NTU2VsZWN0b3JMaXN0IHF1ZXJ5U2VsZWN0b3JMaXN0OwotICAgIHBhcnNlci5w
YXJzZVNlbGVjdG9yKHNlbGVjdG9ycywgcXVlcnlTZWxlY3Rvckxpc3QpOworICAgIGRvY3VtZW50
KCktPmNhY2hlZENTU1BhcnNlcigpLT5wYXJzZVNlbGVjdG9yKHNlbGVjdG9ycywgcXVlcnlTZWxl
Y3Rvckxpc3QpOwogCiAgICAgaWYgKCFxdWVyeVNlbGVjdG9yTGlzdC5maXJzdCgpIHx8IHF1ZXJ5
U2VsZWN0b3JMaXN0Lmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSB7CiAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144747</attachid>
            <date>2012-05-30 01:19:58 -0700</date>
            <delta_ts>2012-05-30 01:28:14 -0700</delta_ts>
            <desc>Patch [B]</desc>
            <filename>bug-87832-20120530171957.patch</filename>
            <type>text/plain</type>
            <size>4517</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJhZjIwYTBhN2YxZGEz
ZmMwM2UzN2U4Yjc0Y2RhNzNhMWI4OWYyNi4uMDI4YTRhYWI2NjI5MjFkNTEyNDRhMTE1M2YwYzBh
NDMxZWE3NzQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTMwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGVyZm9ybWFuY2Vd
IE9wdGltaXplIHF1ZXJ5U2VsZWN0b3IoKSBieSBjYWNoaW5nIGEgQ1NTUGFyc2VyIG9iamVjdCBv
biBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FjaGVk
Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cXVlcnlTZWxlY3Rvcik6CisKIDIw
MTItMDUtMjkgIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5jb20+CiAKICAgICAgICAgW0ZpbGVBUEld
IFRoZSByZXN1bHQgYXR0cmlidXRlIG9mIEZpbGVSZWFkZXIgc2h1b2xkIHVzZSBudWxsIHRvIHJl
cGxhY2UgZW1wdHkgc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGNmMTcwMDgy
MmY3MGI5OWJhYmNkNDIzOGM5NWZmNGU2NGY1MWY5YzUuLjY1ZDZhODkzOWRhNTNiZGM3ZTZiMTY5
NjcwNTJhNTM5NGViNzg0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMjA4LDYg
KzEyMDgsMTEgQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBDU1NQYXJzZXI6OmNyZWF0
ZVN0eWxlUHJvcGVydHlTZXQoKQogICAgIHJldHVybiBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGVJ
bW11dGFibGUocmVzdWx0cywgbV9jb250ZXh0Lm1vZGUpOwogfQogCitib29sIENTU1BhcnNlcjo6
aXNDU1NQYXJzZXJDb250ZXh0Q2hhbmdlZChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjdXJyZW50
Q29udGV4dCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ICE9IGN1cnJlbnRDb250ZXh0OworfQor
CiB2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCkKIHsK
ICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BJZCwgdmFsdWUs
IGltcG9ydGFudCwgbV9jdXJyZW50U2hvcnRoYW5kLCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGlt
cGxpY2l0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggMDcwM2QzMzRjNDgxMzE0NzY2MDcy
YTU1YWQ4YmM0OGM3NDI1N2FkYy4uYzQ5ZWRmOGIyNWQwNGM2NGM5ZDA2NDBmZTNiZWJjZTNlNzRh
Mjg2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjg0LDYgKzI4NCw4IEBAIHB1YmxpYzoK
IAogICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlU3R5bGVQcm9wZXJ0eVNl
dCgpOwogCisgICAgYm9vbCBpc0NTU1BhcnNlckNvbnRleHRDaGFuZ2VkKGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGN1cnJlbnRDb250ZXh0KTsKKwogICAgIENTU1BhcnNlckNvbnRleHQgbV9jb250
ZXh0OwogCiAgICAgYm9vbCBtX2ltcG9ydGFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDk0NDc4YTg3M2ZiNWE5OWIyNGQ0NzY4MTM1OWYwNDQ0ZTBiMzFlMDAuLjU0YmM5NzkyYTUxMTVm
YmJiMTdiZTU1NjE2MzFiMzQ3YjY2OGE4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
NzMxLDYgKzczMSwxMyBAQCB2b2lkIERvY3VtZW50OjppbnZhbGlkYXRlQWNjZXNzS2V5TWFwKCkK
ICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuY2xlYXIoKTsKIH0KIAorQ1NTUGFyc2VyKiBEb2N1
bWVudDo6Y2FjaGVkQ1NTUGFyc2VyKCkKK3sKKyAgICBpZiAoIW1fY3NzUGFyc2VyIHx8IG1fY3Nz
UGFyc2VyLT5pc0NTU1BhcnNlckNvbnRleHRDaGFuZ2VkKHRoaXMpKQorICAgICAgICBtX2Nzc1Bh
cnNlciA9IGFkb3B0UHRyKG5ldyBDU1NQYXJzZXIodGhpcykpOworICAgIHJldHVybiBtX2Nzc1Bh
cnNlci5nZXQoKTsKK30KKwogTWVkaWFRdWVyeU1hdGNoZXIqIERvY3VtZW50OjptZWRpYVF1ZXJ5
TWF0Y2hlcigpCiB7CiAgICAgaWYgKCFtX21lZGlhUXVlcnlNYXRjaGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCA0M2M1ZjU3NzRjZTcwZjRkNTU3MWYwZTcxYTAwZWE4MGU4MzY4MTNhLi44YTZl
MDBhMWJhYWM4Mzc0NDNmNzAwY2I4NWU3MWNmNzM0OTM2M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aApAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBWE9iamVjdENh
Y2hlOwogY2xhc3MgQXR0cjsKIGNsYXNzIENEQVRBU2VjdGlvbjsKK2NsYXNzIENTU1BhcnNlcjsK
IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3Mg
Q2FjaGVkQ1NTU3R5bGVTaGVldDsKQEAgLTI2OSw2ICsyNzAsOCBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5KTsKICAgICB2b2lk
IGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKIAorICAgIENTU1BhcnNlciogY2FjaGVkQ1NTUGFy
c2VyKCk7CisKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIERvY3VtZW50CiAK
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsKQEAgLTEzODcsNiAr
MTM5MCw3IEBAIHByaXZhdGU6CiAgICAgVGltZXI8RG9jdW1lbnQ+IG1fdXBkYXRlRm9jdXNBcHBl
YXJhbmNlVGltZXI7CiAKICAgICBFbGVtZW50KiBtX2Nzc1RhcmdldDsKKyAgICBPd25QdHI8Q1NT
UGFyc2VyPiBtX2Nzc1BhcnNlcjsKIAogICAgIC8vIEZJWE1FOiBNZXJnZSB0aGVzZSAyIHZhcmlh
YmxlcyBpbnRvIGFuIGVudW0uIEFsc28sIEZyYW1lTG9hZGVyOjptX2RpZENhbGxJbXBsaWNpdENs
b3NlCiAgICAgLy8gaXMgYWxtb3N0IGEgZHVwbGljYXRpb24gb2YgdGhpcyBkYXRhLCBzbyB0aGF0
IHNob3VsZCBwcm9iYWJseSBnZXQgbWVyZ2VkIGluIHRvby4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA3
OTQ1MGM1YjUwZTQxMDBlZjNlMzdmYTUyNWNkMTg3MTg4MzJlYmQxLi4yNDA4MDk2MTAwNzhiNTNh
ODg1NWFjZjJkMWYzZGVjODA4YzAyMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xNjc4LDkgKzE2
NzgsOSBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIENTU1BhcnNlciBwYXJzZXIoZG9jdW1lbnQo
KSk7CisKICAgICBDU1NTZWxlY3Rvckxpc3QgcXVlcnlTZWxlY3Rvckxpc3Q7Ci0gICAgcGFyc2Vy
LnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JzLCBxdWVyeVNlbGVjdG9yTGlzdCk7CisgICAgZG9jdW1l
bnQoKS0+Y2FjaGVkQ1NTUGFyc2VyKCktPnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JzLCBxdWVyeVNl
bGVjdG9yTGlzdCk7CiAKICAgICBpZiAoIXF1ZXJ5U2VsZWN0b3JMaXN0LmZpcnN0KCkgfHwgcXVl
cnlTZWxlY3Rvckxpc3QuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpIHsKICAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144751</attachid>
            <date>2012-05-30 01:28:19 -0700</date>
            <delta_ts>2012-05-30 01:28:19 -0700</delta_ts>
            <desc>Patch [C]</desc>
            <filename>bug-87832-20120530172818.patch</filename>
            <type>text/plain</type>
            <size>5184</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJhZjIwYTBhN2YxZGEz
ZmMwM2UzN2U4Yjc0Y2RhNzNhMWI4OWYyNi4uMDI4YTRhYWI2NjI5MjFkNTEyNDRhMTE1M2YwYzBh
NDMxZWE3NzQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA1LTMwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbUGVyZm9ybWFuY2Vd
IE9wdGltaXplIHF1ZXJ5U2VsZWN0b3IoKSBieSBjYWNoaW5nIGEgQ1NTUGFyc2VyIG9iamVjdCBv
biBEb2N1bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2FjaGVk
Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cXVlcnlTZWxlY3Rvcik6CisKIDIw
MTItMDUtMjkgIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5jb20+CiAKICAgICAgICAgW0ZpbGVBUEld
IFRoZSByZXN1bHQgYXR0cmlidXRlIG9mIEZpbGVSZWFkZXIgc2h1b2xkIHVzZSBudWxsIHRvIHJl
cGxhY2UgZW1wdHkgc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGNmMTcwMDgy
MmY3MGI5OWJhYmNkNDIzOGM5NWZmNGU2NGY1MWY5YzUuLjE5MWQwMTlmYWQ4OTYxYWY3ZGQzMDNk
Y2M5MzlmODJjMGZhYjk2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMjA4LDYg
KzEyMDgsMTcgQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBDU1NQYXJzZXI6OmNyZWF0
ZVN0eWxlUHJvcGVydHlTZXQoKQogICAgIHJldHVybiBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGVJ
bW11dGFibGUocmVzdWx0cywgbV9jb250ZXh0Lm1vZGUpOwogfQogCitib29sIENTU1BhcnNlcjo6
aXNDU1NQYXJzZXJDb250ZXh0Q2hhbmdlZChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0
dXJuICEobV9jb250ZXh0Lm1vZGUgPT0gKGRvY3VtZW50LT5pblF1aXJrc01vZGUoKSA/IENTU1F1
aXJrc01vZGUgOiBDU1NTdHJpY3RNb2RlKQorICAgICAgICAgICAgICYmIG1fY29udGV4dC5pc0hU
TUxEb2N1bWVudCA9PSAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgICAgICAg
JiYgbV9jb250ZXh0LmlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCA9PSAoZG9jdW1lbnQtPnNldHRp
bmdzKCkgPyBkb2N1bWVudC0+c2V0dGluZ3MoKS0+aXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKCkg
OiBmYWxzZSkKKyAgICAgICAgICAgICAmJiBtX2NvbnRleHQuaXNDU1NSZWdpb25zRW5hYmxlZCA9
PSAoZG9jdW1lbnQtPmNzc1JlZ2lvbnNFbmFibGVkKCkpCisgICAgICAgICAgICAgJiYgbV9jb250
ZXh0LmlzQ1NTR3JpZExheW91dEVuYWJsZWQgPT0gKGRvY3VtZW50LT5jc3NHcmlkTGF5b3V0RW5h
YmxlZCgpKQorICAgICAgICAgICAgICYmIG1fY29udGV4dC5uZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyA9PSAoZG9jdW1lbnQtPnNldHRpbmdzKCkgPyBkb2N1bWVudC0+c2V0dGluZ3MoKS0+bmVlZHNT
aXRlU3BlY2lmaWNRdWlya3MoKSA6IGZhbHNlKQorICAgICAgICAgICAgICYmIG1fY29udGV4dC5l
bmZvcmNlc0NTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGUgPT0gKCFkb2N1bWVudC0+c2V0dGluZ3Mo
KSB8fCBkb2N1bWVudC0+c2V0dGluZ3MoKS0+ZW5mb3JjZUNTU01JTUVUeXBlSW5Ob1F1aXJrc01v
ZGUoKSkpOworfQorCiB2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBp
bXBsaWNpdCkKIHsKICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHBy
b3BJZCwgdmFsdWUsIGltcG9ydGFudCwgbV9jdXJyZW50U2hvcnRoYW5kLCBtX2ltcGxpY2l0U2hv
cnRoYW5kIHx8IGltcGxpY2l0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggMDcwM2QzMzRj
NDgxMzE0NzY2MDcyYTU1YWQ4YmM0OGM3NDI1N2FkYy4uOWQ2YzhkY2JkN2UxNmI2ZjA4Mjg2NTQ4
OTk5ZTJmY2E0NzI5NDE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjg0LDYgKzI4NCw4
IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlU3R5
bGVQcm9wZXJ0eVNldCgpOwogCisgICAgYm9vbCBpc0NTU1BhcnNlckNvbnRleHRDaGFuZ2VkKERv
Y3VtZW50Kik7CisKICAgICBDU1NQYXJzZXJDb250ZXh0IG1fY29udGV4dDsKIAogICAgIGJvb2wg
bV9pbXBvcnRhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5NDQ3OGE4NzNmYjVhOTli
MjRkNDc2ODEzNTlmMDQ0NGUwYjMxZTAwLi41NGJjOTc5MmE1MTE1ZmJiYjE3YmU1NTYxNjMxYjM0
N2I2NjhhODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTczMSw2ICs3MzEsMTMgQEAg
dm9pZCBEb2N1bWVudDo6aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCiAgICAgbV9lbGVtZW50c0J5
QWNjZXNzS2V5LmNsZWFyKCk7CiB9CiAKK0NTU1BhcnNlciogRG9jdW1lbnQ6OmNhY2hlZENTU1Bh
cnNlcigpCit7CisgICAgaWYgKCFtX2Nzc1BhcnNlciB8fCBtX2Nzc1BhcnNlci0+aXNDU1NQYXJz
ZXJDb250ZXh0Q2hhbmdlZCh0aGlzKSkKKyAgICAgICAgbV9jc3NQYXJzZXIgPSBhZG9wdFB0cihu
ZXcgQ1NTUGFyc2VyKHRoaXMpKTsKKyAgICByZXR1cm4gbV9jc3NQYXJzZXIuZ2V0KCk7Cit9CisK
IE1lZGlhUXVlcnlNYXRjaGVyKiBEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIoKQogewogICAg
IGlmICghbV9tZWRpYVF1ZXJ5TWF0Y2hlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNDNjNWY1
Nzc0Y2U3MGY0ZDU1NzFmMGU3MWEwMGVhODBlODM2ODEzYS4uOGE2ZTAwYTFiYWFjODM3NDQzZjcw
MGNiODVlNzFjZjczNDkzNjNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTYwLDYgKzYwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQVhPYmplY3RDYWNoZTsKIGNsYXNzIEF0dHI7
CiBjbGFzcyBDREFUQVNlY3Rpb247CitjbGFzcyBDU1NQYXJzZXI7CiBjbGFzcyBDU1NTdHlsZURl
Y2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hl
ZXQ7CkBAIC0yNjksNiArMjcwLDggQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRC
eUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNz
S2V5TWFwKCk7CiAKKyAgICBDU1NQYXJzZXIqIGNhY2hlZENTU1BhcnNlcigpOworCiAgICAgLy8g
RE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBEb2N1bWVudAogCiAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CkBAIC0xMzg3LDYgKzEzOTAsNyBAQCBwcml2YXRl
OgogICAgIFRpbWVyPERvY3VtZW50PiBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyOwogCiAg
ICAgRWxlbWVudCogbV9jc3NUYXJnZXQ7CisgICAgT3duUHRyPENTU1BhcnNlcj4gbV9jc3NQYXJz
ZXI7CiAKICAgICAvLyBGSVhNRTogTWVyZ2UgdGhlc2UgMiB2YXJpYWJsZXMgaW50byBhbiBlbnVt
LiBBbHNvLCBGcmFtZUxvYWRlcjo6bV9kaWRDYWxsSW1wbGljaXRDbG9zZQogICAgIC8vIGlzIGFs
bW9zdCBhIGR1cGxpY2F0aW9uIG9mIHRoaXMgZGF0YSwgc28gdGhhdCBzaG91bGQgcHJvYmFibHkg
Z2V0IG1lcmdlZCBpbiB0b28uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNzk0NTBjNWI1MGU0MTAwZWYz
ZTM3ZmE1MjVjZDE4NzE4ODMyZWJkMS4uMjQwODA5NjEwMDc4YjUzYTg4NTVhY2YyZDFmM2RlYzgw
OGMwMjE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTY3OCw5ICsxNjc4LDkgQEAgUGFzc1JlZlB0
cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBF
eGNlcHRpb25Db2RlJgogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KCkpOworCiAgICAgQ1NTU2Vs
ZWN0b3JMaXN0IHF1ZXJ5U2VsZWN0b3JMaXN0OwotICAgIHBhcnNlci5wYXJzZVNlbGVjdG9yKHNl
bGVjdG9ycywgcXVlcnlTZWxlY3Rvckxpc3QpOworICAgIGRvY3VtZW50KCktPmNhY2hlZENTU1Bh
cnNlcigpLT5wYXJzZVNlbGVjdG9yKHNlbGVjdG9ycywgcXVlcnlTZWxlY3Rvckxpc3QpOwogCiAg
ICAgaWYgKCFxdWVyeVNlbGVjdG9yTGlzdC5maXJzdCgpIHx8IHF1ZXJ5U2VsZWN0b3JMaXN0Lmhh
c1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>