- From: Jonas Sicking <jonas@sicking.cc>
- Date: Mon, 2 May 2011 19:06:14 -0700
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: James Robinson <jamesr@google.com>, public-web-perf@w3.org, "Robert O'Callahan" <robert@ocallahan.org>
On Mon, May 2, 2011 at 6:48 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote: > On 5/2/11 9:24 PM, James Robinson wrote: >> This means that the user agent has to iterate through the list of >> potential >> callbacks multiple times, potentially updating style and layout >> information after invoking each callback. It's relatively little code >> but is a bit subtle. > > This is something I'd dearly like to avoid, actually, so I'm not sure it's > as simple as we'd like it to be. > > The current ordering in Gecko when a sample happens is like this: > > 1) Resample declarative animations. > 2) Run animation frame callbacks if any. > 3) Process pending restyles, if any. > 4) Do relayout, if needed. > > This ensures the following properties: > > * If animation frame callbacks query style information, it has already been > updated for running declarative animations (SMIL, CSS Transitions, CSS > Animations). > * If animation frame callbacks play nice (don't read style/layout data, just > update their own state and set style accordingly), there is only one restyle > pass and one relayout pass. On the other hand, if you do want to implement the feature James is talking about here, you'd end up with: 1) Resample declarative animations. 2) Run animation frame callbacks if any. 3) Process pending restyles, if any. 4) Do relayout, if needed. 5) If something with an animationcallback has been moved into the screen, goto 2. In the common case, when no objects *just* crossed the edge of the screen, this still results in just one reflow. Only right when an object moved in will it require two. However you would probably want to use some fuzzy logic so that objects that are right on the edge, or just moved off the screen, still get their callback called, so that you don't end up with something that walks the edge of the screen cause cause double reflows for a large number of runs through the algorithm. / Jonas
Received on Tuesday, 3 May 2011 02:07:10 UTC