Expand description
アニメーション由来の再レイアウトを、実測コストに応じて間引くための予算判定。
§背景
CSS アニメーションは現状 1 フレームごとに parse_and_layout(HTML 再パース +
全ルール再カスケード)を丸ごと呼んでいる。実サイト規模(2403 ルール)では
1 回あたり数秒〜数十秒かかり、再レイアウトが描画を占有して
「描いた内容が画面に出る前に次のレイアウトが始まる」状態に陥る。
本モジュールは「直近の再レイアウト所要時間」と「前回終了からの経過時間」だけから 今フレームの再レイアウトを飛ばすかを決める純粋関数を提供する。 ハードウェアにもグローバル状態にも依存しないため、単体試験で契約を固定できる。
なお本来の解はアニメ値の差し替えのみで再ペイントする軽量経路であり、
本モジュールはそれが入るまでの緩和策(spec/TODO.md 参照)。
Enums§
- Budget
Error - 予算判定の引数が不正だった場合のエラー。
Constants§
- COOLDOWN_
FACTOR - 高コスト時のクールダウン倍率。所要時間のこの倍数だけ間隔を空ける。 3.0 なら再レイアウトの占有率(デューティ比)は 1/(1+3) = 25% に収まり、 残り 75% を描画と画面転送に回せる。
- COST_
THRESHOLD_ MS - この時間を超える再レイアウトを「高コスト」とみなし、間引き対象にする [ms]。 これ未満なら毎フレーム再レイアウトしてもフレーム時間を食い潰さない。
Functions§
- should_
skip_ relayout - 今フレームのアニメーション再レイアウトを飛ばすべきか判定する。