<?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>103571</bug_id>
          
          <creation_ts>2012-11-28 16:08:25 -0800</creation_ts>
          <short_desc>some checkReplaceChild() can be skipped if there are no event listener fired.</short_desc>
          <delta_ts>2017-07-18 08:29:18 -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>DOM</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>haraken</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778453</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-28 16:08:25 -0800</bug_when>
    <thetext>Suggested at Bug 103372.

ContainerNode::replaceChild() calls multiple checkReplaceChild() for preventing manifold tree.
But we can skip the one other than the first if we know there is no event listener fired since the last checkReplaceChild() call.
That omission will improve replaceChild() performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778882</commentid>
    <comment_count>1</comment_count>
      <attachid>176693</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-29 03:08:56 -0800</bug_when>
    <thetext>Created attachment 176693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778885</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-29 03:11:21 -0800</bug_when>
    <thetext>I tried, but didn&apos;t go faster and went even slower. It looks our fast path does fast enough.
I&apos;d close this bug unless there are something I overlooked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779606</commentid>
    <comment_count>3</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-29 17:06:25 -0800</bug_when>
    <thetext>What did you use to measure performance here? The main performance bottleneck in checkAcceptChild I think is the contains call, which is O(n) in the depth of the tree. I would expect a test case with a deep tree to show improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779625</commentid>
    <comment_count>4</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-29 17:16:18 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; What did you use to measure performance here? The main performance bottleneck in checkAcceptChild I think is the contains call, which is O(n) in the depth of the tree. I would expect a test case with a deep tree to show improvement.

Ah, that&apos;s right. What I used is dom-modify. We need some better benchmark here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779632</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-29 17:18:39 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; We need some better benchmark

We&apos;re always saying this:D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780749</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-12-01 10:33:37 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; We need some better benchmark
&gt; 
&gt; We&apos;re always saying this:D

lol. It&apos;s always true!

I don&apos;t think that the benchmarks we have generally don&apos;t test deep DOM trees, so we don&apos;t get good performance testing of things that are O(n) in DOM depth.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176693</attachid>
            <date>2012-11-29 03:08:56 -0800</date>
            <delta_ts>2012-11-29 03:08:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103571-20121129200630.patch</filename>
            <type>text/plain</type>
            <size>2939</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKaW5kZXggZjNjNmFiZDM4YTc3NTg2ODkyYTJmMTVkOWQzY2Y2ZDFmMGI0MTFjYS4uNDY1ZjI5
ODQ0ODY3MTU3OWQ1ZDcwMjdjMzAwZTVlYWViMmQyM2VjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcApAQCAtMzQyLDYgKzM0Miw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVw
bGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBFdmVudExpc3RlbmVyV2F0Y2gg
d2F0Y2g7CisKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgbXV0YXRpb24odGhpcyk7CiAjZW5kaWYKQEAgLTM1OCw3ICszNjAsNyBAQCBi
b29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxk
LCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIERv
ZXMgdGhpcyBvbmUgbW9yZSB0aW1lIGJlY2F1c2UgcmVtb3ZlQ2hpbGQoKSBmaXJlcyBhIE11dGF0
aW9uRXZlbnQuCi0gICAgaWYgKCFjaGVja1JlcGxhY2VDaGlsZCh0aGlzLCBuZXdDaGlsZC5nZXQo
KSwgb2xkQ2hpbGQsIGVjKSkKKyAgICBpZiAod2F0Y2guaXNMaXN0ZW5lckZpcmVkKCkgJiYgIWNo
ZWNrUmVwbGFjZUNoaWxkKHRoaXMsIG5ld0NoaWxkLmdldCgpLCBvbGRDaGlsZCwgZWMpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlVmVjdG9yIHRhcmdldHM7CkBAIC0zNjcsNyAr
MzY5LDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2Rl
PiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gRG9lcyB0aGlzIHlldCBhbm90aGVyIGNoZWNrIGJlY2F1c2UgY29sbGVjdENoaWxk
cmVuQW5kUmVtb3ZlRnJvbU9sZFBhcmVudCgpIGZpcmVzIGEgTXV0YXRpb25FdmVudC4KLSAgICBp
ZiAoIWNoZWNrUmVwbGFjZUNoaWxkKHRoaXMsIG5ld0NoaWxkLmdldCgpLCBvbGRDaGlsZCwgZWMp
KQorICAgIGlmICh3YXRjaC5pc0xpc3RlbmVyRmlyZWQoKSAmJiAhY2hlY2tSZXBsYWNlQ2hpbGQo
dGhpcywgbmV3Q2hpbGQuZ2V0KCksIG9sZENoaWxkLCBlYykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9j
dW1lbnQoKSwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAppbmRleCAyMTRmOWEz
ZTYwZjA0NTc1NDk3NjkzZTA3ZDljY2RkODgxZmVhYTRlLi45MjgwOGVjMDc2YTFkNDI4Nzc0MzBk
MzY0ZWM5YzhmZjIzMDFlYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTIx
MSw2ICsyMTEsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQq
IGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlzdAogICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tpZSk7CiAgICAgfQogICAgIGQtPmZp
cmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7CisgICAgRXZlbnRMaXN0ZW5lcldhdGNo
Ojpub3RpZnlMaXN0ZW5lckZpcmVkKCk7CiB9CiAKIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3Im
IEV2ZW50VGFyZ2V0OjpnZXRFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkKQEAgLTI0NSw0ICsyNDYsNiBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVu
dExpc3RlbmVycygpCiAgICAgfQogfQogCitzaXplX3QgRXZlbnRMaXN0ZW5lcldhdGNoOjpzX2Zp
cmVDb3VudCA9IDA7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmgKaW5kZXggZDRhNjMzMGM5ODZiZjZjYTBlODdhMjYzZDk3ZWU0MjM3M2ZlZjE2My4uNTA1
YThhMDk0YWYzZmFmYzNmZjEwNzliNmI4OTRmOTAyMWIwODlmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgKQEAgLTIwOSw2ICsyMDksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICByZXR1cm4gZC0+ZXZlbnRMaXN0ZW5lck1hcC5jb250YWlucyhldmVudFR5cGUpOwogICAgIH0K
IAorY2xhc3MgRXZlbnRMaXN0ZW5lcldhdGNoIHsKK3B1YmxpYzoKKyAgICBFdmVudExpc3RlbmVy
V2F0Y2goKQorICAgICAgICA6IG1fbGFzdENvdW50KHNfZmlyZUNvdW50KQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGlzTGlzdGVuZXJGaXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENvdW50
ICE9IHNfZmlyZUNvdW50OyB9CisgICAgc3RhdGljIHZvaWQgbm90aWZ5TGlzdGVuZXJGaXJlZCgp
IHsgc19maXJlQ291bnQrKzsgfQorCitwcml2YXRlOgorICAgIHNpemVfdCBtX2xhc3RDb3VudDsK
KyAgICBzdGF0aWMgc2l6ZV90IHNfZmlyZUNvdW50OworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRXZlbnRUYXJnZXRfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>