From fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 03:14:29 +0200 Subject: Merging upstream version 125.0.1. Signed-off-by: Daniel Baumann --- layout/painting/nsDisplayList.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'layout/painting/nsDisplayList.cpp') diff --git a/layout/painting/nsDisplayList.cpp b/layout/painting/nsDisplayList.cpp index 46f8b05f82..78388d2185 100644 --- a/layout/painting/nsDisplayList.cpp +++ b/layout/painting/nsDisplayList.cpp @@ -868,6 +868,11 @@ void nsDisplayListBuilder::SetIsRelativeToLayoutViewport() { UpdateShouldBuildAsyncZoomContainer(); } +void nsDisplayListBuilder::ForceLayerForScrollParent() { + mForceLayerForScrollParent = true; + mNumActiveScrollframesEncountered++; +} + void nsDisplayListBuilder::UpdateShouldBuildAsyncZoomContainer() { const Document* document = mReferenceFrame->PresContext()->Document(); mBuildAsyncZoomContainer = !mIsRelativeToLayoutViewport && @@ -5974,7 +5979,8 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, mPrerenderDecision(PrerenderDecision::No), mIsTransformSeparator(true), mHasTransformGetter(false), - mHasAssociatedPerspective(false) { + mHasAssociatedPerspective(false), + mContainsASRs(false) { MOZ_COUNT_CTOR(nsDisplayTransform); MOZ_ASSERT(aFrame, "Must have a frame!"); Init(aBuilder, aList); @@ -5990,7 +5996,8 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, mPrerenderDecision(aPrerenderDecision), mIsTransformSeparator(false), mHasTransformGetter(false), - mHasAssociatedPerspective(false) { + mHasAssociatedPerspective(false), + mContainsASRs(false) { MOZ_COUNT_CTOR(nsDisplayTransform); MOZ_ASSERT(aFrame, "Must have a frame!"); SetReferenceFrameToAncestor(aBuilder); @@ -6007,7 +6014,8 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder, mPrerenderDecision(PrerenderDecision::No), mIsTransformSeparator(false), mHasTransformGetter(true), - mHasAssociatedPerspective(false) { + mHasAssociatedPerspective(false), + mContainsASRs(false) { MOZ_COUNT_CTOR(nsDisplayTransform); MOZ_ASSERT(aFrame, "Must have a frame!"); MOZ_ASSERT(aFrame->GetTransformGetter()); @@ -6194,6 +6202,9 @@ Matrix4x4 nsDisplayTransform::GetResultingTransformMatrixInternal( NS_ASSERTION(frame || !(aFlags & INCLUDE_PERSPECTIVE), "Must have a frame to compute perspective!"); + // IncrementScaleRestyleCountIfNeeded in ActiveLayerTracker.cpp is a + // simplified copy of this function. + // Get the underlying transform matrix: /* Get the matrix, then change its basis to factor in the origin. */ @@ -6637,12 +6648,12 @@ bool nsDisplayTransform::CreateWebRenderCommands( key}; nsDisplayTransform* deferredTransformItem = nullptr; - if (!mFrame->ChildrenHavePerspective()) { + if (ShouldDeferTransform()) { // If it has perspective, we create a new scroll data via the - // UpdateScrollData call because that scenario is more complex. Otherwise - // we can just stash the transform on the StackingContextHelper and - // apply it to any scroll data that are created inside this - // nsDisplayTransform. + // UpdateScrollData call because that scenario is more complex. Otherwise, + // if we don't contain any ASRs then just stash the transform on the + // StackingContextHelper and apply it to any scroll data that are created + // inside this nsDisplayTransform. deferredTransformItem = this; } @@ -6693,14 +6704,14 @@ bool nsDisplayTransform::CreateWebRenderCommands( bool nsDisplayTransform::UpdateScrollData( WebRenderScrollData* aData, WebRenderLayerScrollData* aLayerData) { - if (!mFrame->ChildrenHavePerspective()) { + if (ShouldDeferTransform()) { // This case is handled in CreateWebRenderCommands by stashing the transform // on the stacking context. return false; } if (aLayerData) { aLayerData->SetTransform(GetTransform().GetMatrix()); - aLayerData->SetTransformIsPerspective(true); + aLayerData->SetTransformIsPerspective(mFrame->ChildrenHavePerspective()); } return true; } -- cgit v1.2.3