Hi
[Summary] We're planning to ship Oilpan for core/animations except for temporary objects such as AnimatableValues. We're planning to land
https://codereview.chromium.org/1318543009/. It won't cause any performance regression.
[Details]
Performance results are as follows:
*-vanilla: ToT
*-vanilla-partanim: ToT + ship oilpan for core/animations except for temporary objects
*-vanilla-fullanim: ToT + ship oilpan for everything in core/animations
The highlights are as follows:
- The important numbers are tough_animation_cases.frame_times and tough_animation_cases.queueing_durations for each benchmark.
- There is no problematic regression in linux-vanilla-partanim, n4-vanilla-partanim and n7-vanilla-partanim. This means that there is no regression in shipping oilpan for core/animations except for temporary objects. Our proposal is to do this.
- linux-vanilla-fullanim hits a 13 - 18% regression at tough_animation_cases.frame_times of balls_css_properties_* benchmarks. We confirmed that this is caused by a pause time of a conservative GC which has to collect a ton of temporary animation objects such as AnimatableValues and InterporableValues. We didn't observe similar regressions in Nexus4 and Nexus7. We confirmed that this is because Nexus4 and Nexus7 are slow and thus the pause time of conservative GCs don't affect the frame_times metric.
It is unfortunate that we cannot ship Oilpan for temporary animation objects, but I think that this would be a fair decision for the following reasons:
- The balls_css_properties_* benchmarks allocate an incredible number of AnimatableValues & InterpolableValues. If we put those temporary objects on Oilpan's heap, they add a significant pressure on the heap.
- There is no advantage in putting those temporary objects on Oilpan's heap because their lifetime is very clear.
- I have tried a bunch of approaches to resolve the regression but concluded that we won't be able to resolve the regression without introducing an incremental marking or/and a generational GC to Oilpan. I don't think that the engineering cost and the complexity outweighs the benefit. At the very least, it won't be a task of Oilpan v1.
- For core/animations/ and Oilpan, it is more important to ship Oilpan for core animation objects such as Animation, AnimationTimeline, ElementAnimation, DocumentTimeline, SampledEffect etc. Oilpan solves the complicated lifetime problem. Actually,
https://codereview.chromium.org/1318543009/ removes a bunch of complexities to clear raw pointers between these objects.
In conclusion, our proposal is:
We confirmed that it won't cause any performance regression in the tough benchmarks in telemetry.
Does the plan sound good to you?
Thanks!
--
Kentaro Hara, Tokyo, Japan