New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 621802 link

Starred by 2 users

Issue metadata

Status: WontFix
Owner:
Closed: Sep 2016
Cc:
EstimatedDays: ----
NextAction: ----
OS: Linux , Mac
Pri: 2
Type: Bug-Regression



Sign in to add a comment

50KB size regression on Mac/Linux at r400722

Project Member Reported by toyoshim@chromium.org, Jun 21 2016

Issue description

See the link to graphs below.
 
All graphs for this bug:
  https://chromeperf.appspot.com/group_report?bug_id=621802

Original alerts at time of bug-filing:
  https://chromeperf.appspot.com/group_report?keys=agxzfmNocm9tZXBlcmZyFAsSB0Fub21hbHkYgICgwvS-tgoM,agxzfmNocm9tZXBlcmZyFAsSB0Fub21hbHkYgICggtX7vwoM


Bot(s) for this bug's original alert(s):

Google Chrome Mac
Google Chrome Win
Labels: OS-Mac OS-Windows
Labels: -OS-Mac
Remove one graph happening on mac for no-overlapped revision range.
Cc: sullivan@chromium.org kylec...@chromium.org dpranke@chromium.org toyoshim@chromium.org
Owner: hlopko@chromium.org
Regression range for Mac was 400719 - 400736.
Regression range for Win was 400775 - 400784.

Looking Linux graph to find a suspicious CL:
https://chromeperf.appspot.com/report?sid=a514f920dd8efd47095d638a55303444b0c85ad57d7b9308c58a37e4dcdf810e&start_rev=400719&end_rev=400784

Then, the graph indicates two regression at r400722 and r400746.

For major regression (+50kB) at r400722
https://chromium.googlesource.com/chromium/src/+log/8111a7789baafc20cd90808caf30fe5041a361ca%5E..8111a7789baafc20cd90808caf30fe5041a361ca?pretty=fuller

hlopko:
Could you check if this regression is reasonable?

For minor regression (+20kB) at r400746
https://chromium.googlesource.com/chromium/src/+log/523bf0ebab6ebdafb419e517666f14aa769bd429%5E..523bf0ebab6ebdafb419e517666f14aa769bd429?pretty=fuller

kylechar:
Could you check if this regression is reasonable?


I can not find any regression in Linux within the range of Windows regression.
https://chromium.googlesource.com/chromium/src/+log/c548a8dc422953c7e06a65e6abe2e68ef063e5dd%5E..9eddf5d3cbb03e87dc091dc0b1c40917b80ec071?pretty=fuller
Considering these changes, it looks flipping GN build may cause this.

dpranke:
Do you think this big size change (+1MB) of chrome.dll was expected?
I enabled a new Mojo interface at r400746. It wouldn't have been compiled before then.

So there would be autogen C++ code for the Mojo structs, StructTraits and Mojo interface. There is also the client code that uses those things. It's a big chunk of code, so 20kb doesn't seem super unreasonable.
No, flipping to GN should not cause a 1MB size increase in chrome.dll (i.e., that would be unexpected). It is, however, completely plausible, and that would be the first thing I'ld like at in that revision range.

Should this be two different bugs, or are we just going to ignore the mac increase?


Blocking: 621677
Cc: brucedaw...@chromium.org brettw@chromium.org
Labels: Proj-GN-Migration
Components: Build
On my over-the-weekend gyp/gn build comparisons I see that on official builds chrome.dll increased by 0.8 MiB and chrome_child.dll shrunk by 0.3 MiB when switching from gyp to gn.

That's from 35.5 to 36.3 for chrome.dll and 44.2 to 43.9 MiB for chrome_child.dll.

On static_library builds both DLLs shrunk significantly when going from gyp to gn. On shared_library builds chrome.dll shrunk hugely when going from gyp to gn.

The only difference in my test builds was gyp versus gn. My build settings for the official build were:

gyp:
GYP_DEFINES=buildtype=Official
gn:
gn_args=target_cpu="x86";is_debug=false;is_component_build=false;is_official_build=true

At 4cc4f198b1, local build with settings shown in comment #9:

gyp official-build sizes:
37,176,832 chrome.dll
46,396,416 chrome_child.dll
   270,848 chrome_elf.dll
   450,048 chrome_watcher.dll
 84,294,144 bytes

gn official-build sizes:
38,073,856 chrome.dll
45,983,232 chrome_child.dll
   356,352 chrome_elf.dll
   579,584 chrome_watcher.dll
 84,993,024 bytes

The relative increase in chrome_elf.dll is particularly significant, and may allow for faster iteration on testing possible solutions since it will build relatively quickly.

I created a separate bug for flipping to GN on Windows.  crbug.com/624274 .
Let's discuss the third regression at #c4 from now on.
Blocking: -621677
Cc: -brucedaw...@chromium.org -dpranke@chromium.org -brettw@chromium.org
Labels: -Proj-GN-Migration
revert GN related label changes, etc.
Labels: -OS-Windows OS-Linux OS-Mac
Summary: 50KB size regression on Windows at r400722 (was: 0.1%-2.7% regression in sizes at 400719:400784)
The second regression at #c4 was confirmed at #c5.

hlopko:
Now the first regression is the only unsolved item in this bug.
Can you check if your change at r400722 causing +50kB size regression is reasonable?
Summary: 50KB size regression on Mac/Linux at r400722 (was: 50KB size regression on Windows at r400722)
Components: -Build
Project Member

Comment 16 by sheriffbot@chromium.org, Jul 3 2016

Labels: -M-53 M-54 MovedFrom-53
Moving this nonessential bug to the next milestone.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
hlopko: Ping!
Perf sheriff ping: reminder to follow up on possible performance issues
Cc: jochen@chromium.org yukishiino@chromium.org hpayer@chromium.org mlippautz@chromium.org
Yeah, r400722 added one pointer to WrapperTypeInfo, which has caused the 50 KB size regression.

+yukishiino +hpayer +jochen +mlippautz

I don't think we have tried hard to reduce sizeof(WrapperTypeInfo), so I'm guessing that there will be some low-hanging fruits there. Any thoughts?

One easy solution would be to use a union for |traceWrappersFunction| and |visitDOMWrapperFunction|.

I think we can move hasPendingActivity() from ActiveScriptWrappable to ScriptWrappable, and it reduces the size of WrapperTypeInfo.

My attempt is here: https://crrev.com/2265873003/

Oops, I forgot to add BUG= number in the CL (and to write the CL description).

https://crrev.com/2265873003/ has got landed.  Let's see if the size reduces.
Project Member

Comment 22 by bugdroid1@chromium.org, Aug 30 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9432327e5f7048159fec797972dbb04808664213

commit 9432327e5f7048159fec797972dbb04808664213
Author: yukishiino <yukishiino@chromium.org>
Date: Tue Aug 30 10:25:06 2016

binding: Reduces the binary size of binding's generated code.

Retires installConditionallyEnabledProperties.  This function has been
unused for months at least, and it's now unlikely we'll need this
mechanism again.

Stops generating unused functions of preparePrototypeAndInterfaceObject.
Even when we don't use them, each function requires an unique address,
i.e. each function consumes 8 bytes.  Uses nullptr instead of generating
unused functions.

This CL is expected to reduce the size by 400k+ bytes.

BUG= 621802 

Review-Url: https://codereview.chromium.org/2296573003
Cr-Commit-Position: refs/heads/master@{#415263}

[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/core/v8/WrapperTypeInfo.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/scripts/v8_interface.py
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/templates/interface.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/templates/interface.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/templates/interface_base.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/templates/partial_interface.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/templates/partial_interface.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBuffer.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8ArrayBufferView.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8DataView.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8SVGTestInterface.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestException.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexed.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedGlobal.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestIntegerIndexedPrimaryGlobal.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface2.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterface3.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor2.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor3.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceConstructor4.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCustomConstructor.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceDocument.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEmpty.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventInitConstructor.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceEventTarget.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceGarbageCollected.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNamedConstructor2.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceNode.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceOriginTrialEnabled.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceSecureContext.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestNode.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperations.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestSpecialOperationsNotEnumerable.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8TestTypedefs.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/core/V8Uint8ClampedArray.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface2Partial.h
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterface5.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/bindings/tests/results/modules/V8TestInterfacePartial.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/core/dom/Document.cpp
[modify] https://crrev.com/9432327e5f7048159fec797972dbb04808664213/third_party/WebKit/Source/core/dom/Node.cpp

I was silly.  The previous CL https://crrev.com/2265873003 reduced the size of WrapperTypeInfo, but increased the size of vtbl of ScriptWrappable and its subclasses.  So, in total, the CL didn't reduce the binary size of Blink.

This time, https://crrev.com/2296573003 should reduce the size.  On my local environment, the size of component-builds reduced by 400k bytes.

Let's see if the size will drop.
Unfortunately, I can't see an improvement on the original graphs.  Even worse, the size is increasing from time to time.

Is there anything we can help on this issue?  If not, is it okay to close this issue?
One important goal of this kind of monitoring is to detect changes that unexpectedly increase binary size drastically. So, if you or feature owners think it's expected or reasonable, IMO it's fine to close.
Cc: hlopko@chromium.org
Owner: yukishiino@chromium.org
Status: Fixed (was: Assigned)
Status: WontFix (was: Fixed)
Ok, so as this was not unexpected increase in binary size, I'm closing this issue. Getting WrapperTypeInfo and ScriptWrappable smaller will be part of future work :)

Sign in to add a comment