tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 999a77895fec9d953cdedb4a7665a04e727fd200
parent bc3b5be30a7a777aa23e467843138a122953632f
Author: Timothy Nikkel <tnikkel@gmail.com>
Date:   Tue, 16 Dec 2025 10:27:00 +0000

Bug 2006293. Use less stack space in some display building code. r=layout-reviewers,emilio

We can pack AutoCurrentActiveScrolledRootSetter and AutoBuildingDisplayList better to avoid useless padding. Maybe<nsPoint> is 12 bytes so we can fit some small members after it.

AutoPreserves3DContext is big (112 bytes), no sense using stack space for a relatively rare preserve 3d case.

Differential Revision: https://phabricator.services.mozilla.com/D276625

Diffstat:
Mlayout/generic/nsIFrame.cpp | 6++++--
Mlayout/painting/nsDisplayList.cpp | 4++--
Mlayout/painting/nsDisplayList.h | 12+++++-------
3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp @@ -3228,11 +3228,13 @@ void nsIFrame::BuildDisplayListForStackingContext( const bool combines3DTransformWithAncestors = (extend3DContext || isTransformed) && Combines3DTransformWithAncestors(); - Maybe<nsDisplayListBuilder::AutoPreserves3DContext> autoPreserves3DContext; + UniquePtr<nsDisplayListBuilder::AutoPreserves3DContext> + autoPreserves3DContext; if (extend3DContext && !combines3DTransformWithAncestors) { // Start a new preserves3d context to keep informations on // nsDisplayListBuilder. - autoPreserves3DContext.emplace(aBuilder); + autoPreserves3DContext = + MakeUnique<nsDisplayListBuilder::AutoPreserves3DContext>(aBuilder); // Save dirty rect on the builder to avoid being distorted for // multiple transforms along the chain. aBuilder->SavePreserves3DRect(); diff --git a/layout/painting/nsDisplayList.cpp b/layout/painting/nsDisplayList.cpp @@ -8870,10 +8870,10 @@ nsDisplayListBuilder::AutoBuildingDisplayList::AutoBuildingDisplayList( : mBuilder(aBuilder), mPrevFrame(aBuilder->mCurrentFrame), mPrevReferenceFrame(aBuilder->mCurrentReferenceFrame), - mPrevOffset(aBuilder->mCurrentOffsetToReferenceFrame), - mPrevAdditionalOffset(aBuilder->mAdditionalOffset), mPrevVisibleRect(aBuilder->mVisibleRect), mPrevDirtyRect(aBuilder->mDirtyRect), + mPrevOffset(aBuilder->mCurrentOffsetToReferenceFrame), + mPrevAdditionalOffset(aBuilder->mAdditionalOffset), mPrevCompositorHitTestInfo(aBuilder->mCompositorHitTestInfo), mPrevAncestorHasApzAwareEventHandler( aBuilder->mAncestorHasApzAwareEventHandler), diff --git a/layout/painting/nsDisplayList.h b/layout/painting/nsDisplayList.h @@ -1108,10 +1108,10 @@ class nsDisplayListBuilder { nsDisplayListBuilder* mBuilder; const nsIFrame* mPrevFrame; const nsIFrame* mPrevReferenceFrame; - nsPoint mPrevOffset; - Maybe<nsPoint> mPrevAdditionalOffset; nsRect mPrevVisibleRect; nsRect mPrevDirtyRect; + nsPoint mPrevOffset; + Maybe<nsPoint> mPrevAdditionalOffset; gfx::CompositorHitTestInfo mPrevCompositorHitTestInfo; bool mPrevAncestorHasApzAwareEventHandler; bool mPrevBuildingInvisibleItems; @@ -1206,12 +1206,10 @@ class nsDisplayListBuilder { mSavedActiveScrolledRoot(aBuilder->mCurrentActiveScrolledRoot), mContentClipASR(aBuilder->ClipState().GetContentClipASR()), mDescendantsStartIndex(aBuilder->mActiveScrolledRoots.Length()), - mUsed(false), mOldScrollParentId(aBuilder->mCurrentScrollParentId), mOldForceLayer(aBuilder->mForceLayerForScrollParent), mOldContainsNonMinimalDisplayPort( - mBuilder->mContainsNonMinimalDisplayPort), - mCanBeScrollParent(false) {} + mBuilder->mContainsNonMinimalDisplayPort) {} void SetCurrentScrollParentId(ViewID aScrollId) { // Update the old scroll parent id. @@ -1294,11 +1292,11 @@ class nsDisplayListBuilder { * EnterScrollFrame / InsertScrollFrame is called per instance of this * class. */ - bool mUsed; ViewID mOldScrollParentId; + bool mUsed = false; bool mOldForceLayer; bool mOldContainsNonMinimalDisplayPort; - bool mCanBeScrollParent; + bool mCanBeScrollParent = false; }; /**