<?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>147446</bug_id>
          
          <creation_ts>2015-07-30 10:21:41 -0700</creation_ts>
          <short_desc>Minimize children vector capacity changes in PlatformCALayerRemote::recursiveBuildTransaction()</short_desc>
          <delta_ts>2015-07-30 11:37:11 -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>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></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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1113395</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-07-30 10:21:41 -0700</bug_when>
    <thetext>PlatformCALayerRemote::recursiveBuildTransaction() currently does:
1. Clear the children vector (which frees the underlying memory)
2. Append layer IDs to the vector one by one, causing the Vector capacity to grow

Since we know how many layer IDs we are going to add, we can minimize the number of Vector capacity changes by:
1. Resizing the children vector to the target size (which will grow or shrink the capacity as needed)
2. Update the layer IDs in the children vector, which won&apos;t cause any capacity change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113398</commentid>
    <comment_count>1</comment_count>
      <attachid>257839</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-07-30 10:23:59 -0700</bug_when>
    <thetext>Created attachment 257839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113404</commentid>
    <comment_count>2</comment_count>
      <attachid>257839</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-07-30 10:44:17 -0700</bug_when>
    <thetext>Comment on attachment 257839
Patch

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

Could we also reserveInitialCapacity()/uncheckedAppend()?

&gt; Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:162
&gt; +            for (size_t i = 0; i &lt; m_children.size(); ++i)

Why change this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113414</commentid>
    <comment_count>3</comment_count>
      <attachid>257839</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-07-30 11:10:45 -0700</bug_when>
    <thetext>Comment on attachment 257839
Patch

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

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:162
&gt;&gt; +            for (size_t i = 0; i &lt; m_children.size(); ++i)
&gt; 
&gt; Why change this?

reserveInitialCapacity() would not be OK here as the m_properties.children is not a newly created Vector here (may have elements already). I guess we could do something like:
m_properties.children.shrink(0); // clear items without freeing underlying capacity
m_properties.children.reserve(reserveCapacity); // Resize underlying capacity
for (const auto&amp; layer : m_children)
  m_properties.children.uncheckedAppend(layer-&gt;layerID());

That said, I still prefer my approach as I find it clearer than shrink() + reserveCapacity(). Also, the pattern I used is not unusual (see for e.g. copy*ToVector() in HashMap.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113437</commentid>
    <comment_count>4</comment_count>
      <attachid>257839</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-30 11:37:06 -0700</bug_when>
    <thetext>Comment on attachment 257839
Patch

Clearing flags on attachment: 257839

Committed r187594: &lt;http://trac.webkit.org/changeset/187594&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113438</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-30 11:37:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257839</attachid>
            <date>2015-07-30 10:23:59 -0700</date>
            <delta_ts>2015-07-30 11:37:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147446-20150730102358.patch</filename>
            <type>text/plain</type>
            <size>2231</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTUxNTUzOGYzOTI4NDFl
YjNiMzY2MDVjOGVlZjNhNDc5NDQ3ZjVjNS4uZjA2MWFhMzJlNDc0Mjc4YzAwMTE1NjE3MDNmNjE0
OTY3NTExMTQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTA3LTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTWluaW1pemUgY2hpbGRyZW4g
dmVjdG9yIGNhcGFjaXR5IGNoYW5nZXMgaW4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZWN1cnNp
dmVCdWlsZFRyYW5zYWN0aW9uKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzQ0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1pbmltaXplIGNoaWxkcmVuIHZlY3RvciBjYXBhY2l0eSBjaGFuZ2VzIGlu
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVjdXJzaXZlQnVpbGRUcmFuc2FjdGlvbigpCisgICAg
ICAgIGJ5IGxldmVyYWdpbmcgdGhlIGZhY3QgdGhhdCB3ZSBrbm93IGluIGFkdmFuY2UgaG93IG1h
bnkgbGF5ZXIgSURzIGFyZSBnb2luZyB0byBiZSBhZGRlZC4gV2UKKyAgICAgICAgbm93IHNldCB0
aGUgVmVjdG9yIHNpemUgZnJvbSB0aGUgc3RhcnQsIGluc3RlYWQgb2YgY2xlYXJpbmcgaXQgYW5k
IHRoZW4gZ3Jvd2luZyB0aGUgdmVjdG9yCisgICAgICAgIGNhcGFjaXR5IHdoZW4gYXBwZW5kaW5n
IHRoZSBsYXllciBJRHMgb25lIGJ5IG9uZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpyZWN1cnNpdmVCdWlsZFRyYW5zYWN0aW9uKToKKwogMjAxNS0wNy0y
OCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAg
IFtpT1NdIFJFR1JFU1NJT04ocjE2ODA3NSk6IEZ1bGxzY3JlZW4gd2ViIHZpZGVvIGRvZXNuJ3Qg
cGF1c2Ugb24gc2NyZWVuIGxvY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCA3
NmQzNTdhMmM5NDIyZjgzMTVhZjBiOWI0ZGMyOTEyNzM4MjBhZGJkLi45ZTFhM2EzM2I3ZWYxNjU0
ZjQ4ZGUxODkzNWY1MTYyYzI2NWY2NjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3Bw
CkBAIC0xNTgsOSArMTU4LDkgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnJlY3Vyc2l2
ZUJ1aWxkVHJhbnNhY3Rpb24oUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY28KIAogICAgIGlmICht
X3Byb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgIT0gUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246Ok5vQ2hhbmdlKSB7CiAgICAgICAgIGlmIChtX3Byb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRp
ZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKSB7Ci0gICAg
ICAgICAgICBtX3Byb3BlcnRpZXMuY2hpbGRyZW4uY2xlYXIoKTsKLSAgICAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgbGF5ZXIgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgICAgIG1fcHJvcGVy
dGllcy5jaGlsZHJlbi5hcHBlbmQobGF5ZXItPmxheWVySUQoKSk7CisgICAgICAgICAgICBtX3By
b3BlcnRpZXMuY2hpbGRyZW4ucmVzaXplKG1fY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBtX3Byb3BlcnRpZXMuY2hpbGRyZW5baV0gPSBtX2NoaWxkcmVuW2ldLT5sYXllcklE
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0
b20oKSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>