Bug 1274991 - Consider ancestor scale transforms when deciding whether to prerender transformed content; r?mstange
MozReview-Commit-ID: AnmSSy9YviP
--- a/layout/base/nsDisplayList.cpp
+++ b/layout/base/nsDisplayList.cpp
@@ -5854,22 +5854,23 @@ nsDisplayTransform::ShouldPrerenderTrans
return false;
}
nsSize refSize = aBuilder->RootReferenceFrame()->GetSize();
// 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);
- nsSize frameSize = aFrame->GetVisualOverflowRectRelativeToSelf().Size();
+ gfxSize scale = nsLayoutUtils::GetTransformToAncestorScale(aFrame);
+ nsSize frameSize = aFrame->GetVisualOverflowRectRelativeToSelf().Size() *
+ nsSize(scale.width, scale.height);
nscoord maxInAppUnits = nscoord_MAX;
if (frameSize <= refSize) {
maxInAppUnits = aFrame->PresContext()->DevPixelsToAppUnits(4096);
- nsRect visual = aFrame->GetVisualOverflowRect();
- if (visual.width <= maxInAppUnits && visual.height <= maxInAppUnits) {
+ if (frameSize <= nsSize(maxInAppUnits, maxInAppUnits)) {
return true;
}
}
nsRect visual = aFrame->GetVisualOverflowRect();
EffectCompositor::SetPerformanceWarning(