F7.12.4Simultaneous motion cost stacksdesign

Simultaneous motions stack cost beyond a single-motion budget

Aliases: concurrent motion · stacked cost · single-clip profiling fails

What it is

A shared-element transition that looks clean in a performance panel can still fail when twenty list rows enter at once. Cost stacks; evaluation is too often done per clip. Simultaneous triggers multiply layout, upload and fill per frame by the clip count. Motion that just fits the budget as one clip drops frames as a crowd. That is not several clips in series stretching wait: there the addend is wall clock; here it is work inside the same frame.

Why it happens

Every in-flight clip is evaluated this frame. N transforms might still live on the compositor, but N blurs, N shadows, N script layout reads fill the main thread and the GPU together. A stagger is meant to spread time; if the stagger is thinner than a frame, the GPU still sees N units of work in one frame. List recycling stacked on top means node count itself is rising while every visible row is moving.

The blind spot of per-clip evaluation is the scene combination: navigation transition + list entrance + button micro-spring + scroll inertia, each “light,” peaking in the same 16 ms. If the budget is not taken on the peak scene, shipped jank lives in the combination.

Where it stops holding

  • If clips truly wait until the previous has settled before starting, the peak can approach a single clip; the stagger has to exceed settling time, not a 20 ms line on a storyboard.
  • Kindred transforms the compositor can merge add more linearly and more predictably than layout animation, but layer count still has a ceiling.
  • Reduced motion or a low-end degrade that cuts concurrent count is a proper fix for this problem, not a second set of N shorter clips.

Applying it

  • Measure in the real peak scene: what else is moving on the frame the page opens, and accept or reject on that frame’s time, not on an isolated demo.
  • Cap how many motions may be in flight; list entrance should use a few layers, not an independent clip per row.
  • Check: the shared element is green alone in a performance panel; then open the full page with its list. If the page goes red, per-clip evaluation has failed.

Related

  • Same group: F7.12.1 Motion work can contend for the main thread and cause jank · F7.12.2 Dropped frames hurt more than no motion because they expose strain · F7.12.3 On low-end devices, complex motion should degrade or stop, not scale uniformly
  • Nearby: F7.10.1 Stacked motion lengthens total wait · R3.04 Performance budget
  • Search terms: simultaneous animations · frame budget · jank

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/F7.12.4