When looking in layers uniformity graph I can clearly see some layers moving -backwards- when interpolating a single fling on APZC. I think what we've been attributing as skipped frames are actually us producing a frames but moving the layer backwards. This is only noticeable at if the velocity is small (about 1 pixel/frame or less) because otherwise the rounding error will be too small to make the layer move backwards.
Created attachment 8443089 [details] Screenshot 2014-06-19 18.27.25.png
This only occurs for the scrollbar layer as far as I can tell.
Profile with layers dump: http://people.mozilla.org/~bgirard/cleopatra/#report=d116e194a4687dc3502bee16d181659060247a8c
Alright, thanks to a big help from kats, we figured out the problem: We have two sibling layers (1) content layer, (2) scroll bar layers. Say the content layer can scroll 100 pixels while the scrollport/scroll bar is only 10 pixels high. Layer position and transforms from the main thread are rounded. When the position of (1) increases by one pixel, the position of (2) doesn't increase. As a result of the update increasing (1) by one pixel the async transaction is reduced. The position of (2) is computed based on the async transform of (1).
Kats do you know if anyone notices this visually? I'm considering moving this to the backlog if no one is impacted by this visually. It's not trivial to fix and the useful of fixing this appears to be low.
I haven't seen anybody complain about this. CC'ing mason as well in case he's noticed anything related to this.
This is really noticeable in perf tools but it's not worth fixing given how complex the fix is to get the rounding right.