I watched if frame_times metrics for balls_css_transition_{2,40,all}_properties.html
regress >=10% between non-Oilpan and Oilpan.
Staring with May 11 - July 9, the range became almost half a week.
Now I know..
- July 3 23:21:04 commit 857d255f700e69c80c46e7213c3b0063f9ce48b0 is good
- July 7 23:43:42 commit 441ec9912e6b1fba1eef37bebee92c224dd825d5 is bad
Thanks for the bisecting!The only suspicious change in the blame range is http://src.chromium.org/viewvc/blink?revision=198316&view=revision. This CL enables an idle GC on non-oilpan. Would it be possible to check if the CL is the culprit of the regression?
Does this mean that non-oilpan and oilpan were the same performance in July 3, but non-oilpan was >10% faster than oilpan in July 7?If that is the case, does it mean that enabling the idle GC improved performance of non-oilpan by 10%? Hmm, it sounds strange since core/animations are not yet enabled on non-oilpan...
Hmm, let me continue working for this.
It may be good to plot values...
Looking them, following Blink blame range reduces frame_times on non-Oilpan builds, while it does not change on Oilpan build.
http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog_blink.html?url=/trunk&mode=html&range=197759:197820
JFYI, Chromium Commit position range is
https://chromium.googlesource.com/chromium/src/+log/c89cfe476f4d1f9bae23e6980a12a379fbd00da4%5E..86efa5cd35a94289ba8af2ae243b2cdbd3f738ef?pretty=fuller
The old one merged results from 20 runs.I separated out each run to get a closer look at the pattern.https://257e68df4dae930120a4c67b6f7a507d5042fbc3.googledrive.com/host/0B4aiM9jljUy8UEh0QjR3SUVXaVE/balls-css-individual-runs.htmlThe periodic spikes going down look very similar to the results peria@ showed me today.Oilpan looks like it always has an upward spike at about three quarters into the test, and that seems to be the only bad part.Possibly a GC creating jank?
Here is the heap visualizer result for ToT + a) + b) + oilpanPeak swept object count ~2,200,000 -> ~250,000 (88% reduction)Peak marked object count ~200,000 -> ~100,000 (50% reduction)
The total time spent in collectGarbage during the test has gone up from 17ms to 40ms(5 precise GCs each taking 8ms). (I am excluding the first Conservative GC because I don't think it effects the frame_times measurement. If we include that the change is from 37ms to 45ms).
But come to think of it, the sum of frame times is like 59ms * 158frames = 9322ms so time spent in collectGarbage should be well below 1% and I don't think it explains the regression.
vanilla | oilpan | a9 | |
exclude frames containing collectGarbage and lazySweep | 102.6ms | 113.7ms | 106.1ms |
all frames | 102.6ms | 108.1ms | 110.4ms |
Some results I collected today."a9" is ToT+(a)+oilpan.1) I've written a python script to extract frame times from trace files.The results for oilpan and a9 seem to contradict each other so I'll collect more samples tomorrow.
vanilla oilpan a9 exclude frames containing collectGarbage and lazySweep 102.6ms 113.7ms 106.1ms all frames 102.6ms 108.1ms 110.4ms 2) I've confirmed that Partitions::totalSizeOfCommittedPagesKB is around 108MB for vanilla, oilpan and a9.3) I've added overhead to ThreadState::persistentAllocated/persistentFreed and confirmed ThreadState::persistentAllocated/persistentFreed is called around 3,000,000 times per frame.
1) The 3,000,000 per frame number was calculated by dividing the difference in frame time with the amount of sleep I added, but it turns out it was way off. I added a counter to persistentAllocated/persistentFreed and observed that the actual number of times called is around 3,000 times per frame. Around 44% of that is from StyleRareNonInheritedData.
2) By comparing the average frame times of all frames and the average frame times of frames that contain no marking or sweeping, I think we can conclude that marking and sweeping is not affecting frame times.
I'm merging them by hand.
I created a CL to ship oilpan for a part of core/animations objects.
https://codereview.chromium.org/1318543009/
The CL ships oilpan only for the following classes:
AnimationEffect
EventDelegate
AnimationEffectTiming
AnimationTimeline
PlatformTiming
EffectModel
ElementAnimations
SampledEffect
RunningAnimation
ToT = r201292
CL | oilpan | Node | CSSValue | Animation | AnimtableValue | |
non-oilpan | ToT | off | F | F | F | F |
oilpan | ToT | on | T | T | T | T |
a | on | T | T | T | F | |
b | off | F | F | T | F | |
c | on | T | F | T | T | |
d | ToT + https://codereview.chromium.org/1318543009/ + https://codereview.chromium.org/1303173007 | off | F | F | T | F |
e | off | F | F | T | T | |
f | on | T | F | T | F |