author | Matt Woodrow <mwoodrow@mozilla.com> |
Tue, 24 Jun 2014 12:12:52 +1200 | |
changeset 190375 | c0e27620432b8e8d891360a3633ac8e26427d15b |
parent 190374 | 9324051fd22c9adfae73a7b1905efaef3768000e |
child 190376 | c6a7886cde250f7ed2b8e23e92947539cb324d41 |
push id | 27004 |
push user | emorley@mozilla.com |
push date | Tue, 24 Jun 2014 15:52:34 +0000 |
treeherder | mozilla-central@7b174d47f3cc [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 1028216, 952721 |
milestone | 33.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/base/nsDisplayList.cpp +++ b/layout/base/nsDisplayList.cpp @@ -4744,36 +4744,36 @@ nsDisplayTransform::ShouldPrerenderTrans message.AppendLiteral("Performance warning: Async animation disabled because frame was not marked active for transform animation"); CommonElementAnimationData::LogAsyncAnimationFailure(message, aFrame->GetContent()); } return false; } nsSize refSize = aBuilder->RootReferenceFrame()->GetSize(); - // Only prerender if the transformed frame's size (in the reference - // frames coordinate space) is <= the reference frame size (~viewport), - // allowing a 1/8th fuzz factor for shadows, borders, etc. + // Only prerender if the transformed frame's size is <= the + // reference frame size (~viewport), allowing a 1/8th fuzz factor + // for shadows, borders, etc. refSize += nsSize(refSize.width / 8, refSize.height / 8); - nsRect frameRect = aFrame->GetVisualOverflowRectRelativeToSelf(); - - frameRect = - nsLayoutUtils::TransformFrameRectToAncestor(aFrame, frameRect, - aBuilder->RootReferenceFrame()); - - if (frameRect.Size() <= refSize) { - return true; + nsSize frameSize = aFrame->GetVisualOverflowRectRelativeToSelf().Size(); + if (frameSize <= refSize) { + // Bug 717521 - pre-render max 4096 x 4096 device pixels. + nscoord max = aFrame->PresContext()->DevPixelsToAppUnits(4096); + nsRect visual = aFrame->GetVisualOverflowRect(); + if (visual.width <= max && visual.height <= max) { + return true; + } } if (aLogAnimations) { nsCString message; message.AppendLiteral("Performance warning: Async animation disabled because frame size ("); - message.AppendInt(nsPresContext::AppUnitsToIntCSSPixels(frameRect.width)); + message.AppendInt(nsPresContext::AppUnitsToIntCSSPixels(frameSize.width)); message.AppendLiteral(", "); - message.AppendInt(nsPresContext::AppUnitsToIntCSSPixels(frameRect.height)); + message.AppendInt(nsPresContext::AppUnitsToIntCSSPixels(frameSize.height)); message.AppendLiteral(") is bigger than the viewport ("); message.AppendInt(nsPresContext::AppUnitsToIntCSSPixels(refSize.width)); message.AppendLiteral(", "); message.AppendInt(nsPresContext::AppUnitsToIntCSSPixels(refSize.height)); message.Append(')'); CommonElementAnimationData::LogAsyncAnimationFailure(message, aFrame->GetContent()); }