Bug 1122526 patch 2 - Only do OMTA transform scale choosing for layers that are for transform display items. r=roc

This fixes the scaling choice when we have more than one layer for the
same element, e.g., because it animates both transform and opacity.
This commit is contained in:
L. David Baron 2015-06-29 16:46:16 -07:00
parent 41fbfbc01b
commit 0339c0adea
4 changed files with 60 additions and 0 deletions

View File

@ -4643,6 +4643,7 @@ static bool
ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder,
nsDisplayListBuilder* aDisplayListBuilder,
nsIFrame* aContainerFrame,
nsDisplayItem* aContainerItem,
const nsRect& aVisibleRect,
const Matrix4x4* aTransform,
const ContainerLayerParameters& aIncomingScale,
@ -4698,6 +4699,8 @@ ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder,
// If the container's transform is animated off main thread, fix a suitable scale size
// for animation
if (aContainerFrame->GetContent() &&
aContainerItem &&
aContainerItem->GetType() == nsDisplayItem::TYPE_TRANSFORM &&
nsLayoutUtils::HasAnimationsForCompositor(
aContainerFrame->GetContent(), eCSSProperty_transform)) {
// compute scale using the animation on the container (ignoring
@ -4891,6 +4894,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder,
aContainerItem ? aContainerItem->GetVisibleRectForChildren() :
aContainerFrame->GetVisualOverflowRectRelativeToSelf();
if (!ChooseScaleAndSetTransform(this, aBuilder, aContainerFrame,
aContainerItem,
bounds.Intersect(childrenVisible),
aTransform, aParameters,
containerLayer, state, scaleParameters)) {

View File

@ -0,0 +1,24 @@
<!DOCTYPE HTML>
<title>Testcase, bug 1122526</title>
<style>
#outer, #inner {
display: inline-block;
background: white;
color: black;
}
#inner {
vertical-align: top;
height: 100px;
width: 100px;
background: repeating-linear-gradient(to top left, yellow, blue 10px);
opacity: 0.6;
will-change: transform, opacity;
}
</style>
<div id="outer">
<div id="inner">
</div>
</div>

View File

@ -0,0 +1,31 @@
<!DOCTYPE HTML>
<title>Testcase, bug 1122526</title>
<style>
#outer, #inner {
display: inline-block;
background: white;
color: black;
}
#outer { transform: scale(5) }
#inner { animation: HoldTransform linear infinite 1s,
HoldOpacity linear infinite 1s; }
#inner {
vertical-align: top;
height: 100px;
width: 100px;
background: repeating-linear-gradient(to top left, yellow, blue 10px);
}
@keyframes HoldTransform {
from, to { transform: scale(0.2) }
}
@keyframes HoldOpacity {
from, to { opacity: 0.6 }
}
</style>
<div id="outer">
<div id="inner">
</div>
</div>

View File

@ -134,3 +134,4 @@ pref(svg.transform-origin.enabled,true) == transform-origin-svg-2a.svg transform
pref(svg.transform-origin.enabled,true) == transform-origin-svg-2b.svg transform-origin-svg-2-ref.svg
# Bug 1122526
== animate-layer-scale-inherit-1.html animate-layer-scale-inherit-1-ref.html
== animate-layer-scale-inherit-2.html animate-layer-scale-inherit-2-ref.html