When restoring the refresh driver after testing we can arrive at a situation
where a layer has an animation that has yet to start. However, calling
ElementAnimations::GetPositionInIteration with a negative value from the
compositor thread is an error.
This patch detects animations on the compositor thread that are yet-to-start and
skips them when sampling. It also moves the activeAnimations = true line up as
otherwise we would need special logic to wake up the compositor after the delay
has finished.
If we've applied an async transform to an empty container layer (e.g. a layer
that corresponds to an nsDisplayScrollInfo display item), don't use that
transform on the corresponding scrollbar.
Fixed layers are relative to their nearest scrollable ancestor, so when we
encounter a scrollable layer in AlignFixedAndStickyLayers, reset the transform
and sub-tree root to start from that scrollable layer.
This fixes async scrolling of the fixed header in the Firefox marketplace on
B2G.
This adds a new eCSSUnit_SharedList type for nsCSSValue, which is a
reference counted object that contains an nsCSSValueList. We need this
so that nsStyleDisplay::mSpecifiedTransform can hold a strong reference
to a specified transform list value. When 'transform' is specified
using a variable reference, the resulting nsCSSValue does not stick
around in the Declaration object, so we wouldn't be guaranteed that
it lives long enough for nsStyleDisplay to keep referencing it.
The bulk of this patch is fixing up pieces of code that infer the resolution
as the inverse of the scaling transform on the root layer. This used to be
how various bits of gfx code obtained the resolution, but now that we can set
the resolution on the actual presShell that contains the content, we can also
just read the resolution from the FrameMetrics directly.
Since the CSS transform includes a 1/resolution scaling factor, the translation
amount in the async transform is now in LayoutDevicePixels instead of LayerPixels.
The shadow tree transform is now effectively:
(1/resolution * rest of CSS transform * async translation * async resolution)
Whereas before it was
(async translation * async resolution * 1/resolution * rest of CSS transform)
Bug 876542 introduces a patch that reworks how we maintain the position of
fixed position layers, but didn't handle overscroll/zoom. This restores the old
behaviour in this situation.
Restore the reconciliation between content document fixed position margins at
render time and the fixed layer margins as retrieved via SyncViewportInfo
during async panning/zooming.