The lifetime of a newly started cc::Animation is roughly the following:
element_idif one does not already exist. This ElementAnimations instance is shared by all animations with the same target and tracks the existence of the target.
element_idis created on the main thread LayerTreeHost's
property_trees_. This begins ticking the attached KeyframeEffects and tracks that the element exists in the active layer / property tree.
element_idis pushed by cc::KeyframeEffect::PushPropertiesTo cc::Animation::AttachElementForKeyframeEffect creates a compositor side cc::ElementAnimations instance to track the existence of the element on the compositor. Since animations are pushed after the layer and property trees, the element should already exist on the pending tree. This will result in the animation being added to the ticking animations list.
TODO(flackr): Document finishing / cancel / abort.
TODO(smcgruer): Write this.
The Compositor Property Trees talk slides includes discussion on compositor animations.
The Project Heaviside design document and slides provide history on the Chromium and Blink animation system. The slides in particular include helpful software architecture diagrams.
Smooth scrolling is implemented via animations. See also references to “scroll offset” animations in the cc code base. Smooth Scrolling in Chromium provides an overview of smooth scrolling. There is further class header documentation in Blink's platform/scroll directory.