<?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>90844</bug_id>
          
          <creation_ts>2012-07-09 18:35:59 -0700</creation_ts>
          <short_desc>Avoid creating temporary variables when accessing the size or location in a IntRect or FloatRect object</short_desc>
          <delta_ts>2012-07-24 10:49:14 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>665388</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:35:59 -0700</bug_when>
    <thetext>Avoid creating temporary variables when accessing the size or location in a IntRect or FloatRect object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665391</commentid>
    <comment_count>1</comment_count>
      <attachid>151379</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 18:38:26 -0700</bug_when>
    <thetext>Created attachment 151379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665726</commentid>
    <comment_count>2</comment_count>
      <attachid>151379</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-07-10 06:43:42 -0700</bug_when>
    <thetext>Comment on attachment 151379
Patch

Does this patch measurably improve performance? These functions are inline, so I don&apos;t expect this change to be an improvement. On the other hand, adding an extra deference might theoretically complicate the code enough to confuse optimizer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665757</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-10 07:40:39 -0700</bug_when>
    <thetext>I expect it would be difficult to measure, but these prevent other methods from also returning references, methods who themselves may not be inline. For example, this isn&apos;t possible and you must return an IntSize instead because of these methods.

const IntSize&amp; Bar::sizeOfSomething(Foo&amp; foo) {
  return foo.rect().size();
}

Typically things that return non-basic types always return a const reference when possible. I have a hard time believing a const reference would produce worse code than a temporary variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665760</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-07-10 07:56:20 -0700</bug_when>
    <thetext>&gt; I have a hard time believing a const reference would produce worse code than a temporary variable.

Remember that a reference is the same as a pointer, so unless an optimizer can eliminate such syntactic improvements, you get dereferencing of a pointer with all associated performance issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665849</commentid>
    <comment_count>5</comment_count>
      <attachid>151379</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-10 10:12:38 -0700</bug_when>
    <thetext>Comment on attachment 151379
Patch

Are you sure that return value optimization is not in play here? What does the assembly look like before and after on different compilers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665885</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-07-10 11:03:51 -0700</bug_when>
    <thetext>You could study the disassembly to see what&apos;s actually happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666069</commentid>
    <comment_count>7</comment_count>
      <attachid>151379</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-10 14:35:54 -0700</bug_when>
    <thetext>Comment on attachment 151379
Patch

OK.  LayoutRect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666102</commentid>
    <comment_count>8</comment_count>
      <attachid>151379</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-10 15:24:19 -0700</bug_when>
    <thetext>Comment on attachment 151379
Patch

Yes, w/o performance numbers it&apos;s impossible to do performance changes. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677020</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-24 10:49:14 -0700</bug_when>
    <thetext>Additional reading suggests this change would be a bad one. http://www.macieira.org/blog/2012/02/the-value-of-passing-by-value/

Going to close this, thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151379</attachid>
            <date>2012-07-09 18:38:26 -0700</date>
            <delta_ts>2012-07-10 15:24:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90844-20120709213825.patch</filename>
            <type>text/plain</type>
            <size>2838</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA0MDI4ZDc3MGQ2OTIy
M2JiZGMyNWNmMDJkNWQ0OGFhMTYxMDUyNy4uYzZmYTExNzZiYTc2YjE4YWMzOGFmMjEzYWY3NWRh
ZjI4ZTJhYThmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEF2b2lkIGNyZWF0aW5n
IHRlbXBvcmFyeSB2YXJpYWJsZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIHNpemUgb3IgbG9jYXRpb24g
aW4gYSBJbnRSZWN0IG9yIEZsb2F0UmVjdCBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwODQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHNpemUoKSBhbmQgbG9jYXRpb24oKSBtZXRob2Rz
IGluIHRoZSBJbnRSZWN0IGNsYXNzIHJldHVybiB0aGUgdmFsdWUKKyAgICAgICAgbWVtYmVyIHZh
cmlhYmxlIG9iamVjdHMuIEJ5IHJldHVybmluZyBhIGNvbnN0LXJlZmVyZW5jZSB0byB0aGUgbWVt
YmVyCisgICAgICAgIHZhcmlhYmxlLCBpdCBjYW4gYXZvaWQgY3JlYXRpbmcgYSB0ZW1wb3Jhcnkg
dmFyaWFibGUgd2hlbiBvbmUgaXMgbm90CisgICAgICAgIG5lZWRlZC4gVGhlIHNhbWUgaXMgdHJ1
ZSBmb3IgRmxvYXRSZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFJlY3Q6OmxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UmVjdDo6c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6bG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6c2l6ZSk6CisKIDIwMTItMDctMDkgIE5vJ2FtIFJvc2VudGhhbCAg
PG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBTaGFyZWQgY29kZSB0aGF0IGlz
IGd1YXJkZWQgd2l0aCBFTkFCTEUoV0VCR0wpIHNob3VsZCBiZSBndWFyZGVkIHdpdGggVVNFKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKaW5kZXggNzI1
MDEyZmQ3YTg5Mzk5OTMzNDI0MTczNGU5MjFlMDdiMmQzYTAyMC4uNjMwMTFiNWFiN2YzMDk2MjE4
N2ZkMTcxM2JmNjc3YzM3YmQwN2VlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKQEAgLTk1LDggKzk1LDggQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lk
dGgsIGRvdWJsZSBoZWlnaHQpOwogCi0gICAgRmxvYXRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhdGlvbjsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogCiAgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBs
b2NhdGlvbikgeyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KICAgICB2b2lkIHNldFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAppbmRleCA5YTlhN2Y3ZTVjNTkwZTVkZjc0OTkyNDlm
OWI1YThjZWNjZDM5MDY3Li5iYjlmYTRjYmQ5ZTFlMmIwZDk5ODkyZDQ4YzZjODI5OTZhYjhjODIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCkBAIC05MCw4
ICs5MCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIGV4cGxp
Y2l0IEludFJlY3QoY29uc3QgRnJhY3Rpb25hbExheW91dFJlY3QmKTsgLy8gZG9uJ3QgZG8gdGhp
cyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICAgICAgCi0gICAgSW50UG9pbnQgbG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgSW50
UG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2NhdGlvbjsgfQogICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>