mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 08:48:39 +09:00
Issue #1355 - Avoid unnecessary work in nsIFrame::BuildDisplayListForStackingContext() and nsIFrame::BuildDisplayListForChild() and Cleanup DescendIntoChild
Bug 1441796 - Part 1: Optimize the (pseudo)-stacking context conditions Bug 1441796 - Part 3: Reuse the results in nsIFrame::BuildDisplayListForStackingContext() for ChildrenHavePerspective(), IsTransformed(), and Combines3DTransformWithAncestors() Bug 1512244 - Part 1: Cleanup DescendIntoChild
This commit is contained in:
parent
e15b1ba0ec
commit
da0e3a828b
3 changed files with 80 additions and 57 deletions
|
|
@ -1009,8 +1009,22 @@ nsDisplayListBuilder::EnterPresShell(nsIFrame* aReferenceFrame,
|
|||
}
|
||||
state->mInsidePointerEventsNoneDoc = pointerEventsNone;
|
||||
|
||||
if (!buildCaret)
|
||||
state->mPresShellIgnoreScrollFrame =
|
||||
state->mPresShell->IgnoringViewportScrolling()
|
||||
? state->mPresShell->GetRootScrollFrame()
|
||||
: nullptr;
|
||||
|
||||
nsPresContext* pc = aReferenceFrame->PresContext();
|
||||
nsCOMPtr<nsIDocShell> docShell = pc->GetDocShell();
|
||||
if (docShell) {
|
||||
docShell->GetWindowDraggingAllowed(&mWindowDraggingAllowed);
|
||||
}
|
||||
|
||||
mIsInChromePresContext = pc->IsChrome();
|
||||
|
||||
if (!buildCaret) {
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<nsCaret> caret = state->mPresShell->GetCaret();
|
||||
state->mCaretFrame = caret->GetPaintGeometry(&state->mCaretRect);
|
||||
|
|
@ -1018,13 +1032,6 @@ nsDisplayListBuilder::EnterPresShell(nsIFrame* aReferenceFrame,
|
|||
mFramesMarkedForDisplay.AppendElement(state->mCaretFrame);
|
||||
MarkFrameForDisplay(state->mCaretFrame, nullptr);
|
||||
}
|
||||
|
||||
nsPresContext* pc = aReferenceFrame->PresContext();
|
||||
nsCOMPtr<nsIDocShell> docShell = pc->GetDocShell();
|
||||
if (docShell) {
|
||||
docShell->GetWindowDraggingAllowed(&mWindowDraggingAllowed);
|
||||
}
|
||||
mIsInChromePresContext = pc->IsChrome();
|
||||
}
|
||||
|
||||
// A non-blank paint is a paint that does not just contain the canvas background.
|
||||
|
|
|
|||
|
|
@ -520,6 +520,14 @@ public:
|
|||
* Get the caret associated with the current presshell.
|
||||
*/
|
||||
nsCaret* GetCaret();
|
||||
|
||||
/**
|
||||
* Returns the root scroll frame for the current PresShell, if the PresShell
|
||||
* is ignoring viewport scrolling.
|
||||
*/
|
||||
nsIFrame* GetPresShellIgnoreScrollFrame() {
|
||||
return CurrentPresShellState()->mPresShellIgnoreScrollFrame;
|
||||
}
|
||||
/**
|
||||
* Notify the display list builder that we're entering a presshell.
|
||||
* aReferenceFrame should be a frame in the new presshell.
|
||||
|
|
@ -805,10 +813,11 @@ public:
|
|||
friend class AutoSaveRestorePerspectiveIndex;
|
||||
class AutoSaveRestorePerspectiveIndex {
|
||||
public:
|
||||
AutoSaveRestorePerspectiveIndex(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame)
|
||||
AutoSaveRestorePerspectiveIndex(nsDisplayListBuilder* aBuilder,
|
||||
const bool aChildrenHavePerspective)
|
||||
: mBuilder(nullptr)
|
||||
{
|
||||
if (aFrame->ChildrenHavePerspective()) {
|
||||
if (aChildrenHavePerspective) {
|
||||
mBuilder = aBuilder;
|
||||
mCachedItemIndex = aBuilder->mPerspectiveItemIndex;
|
||||
aBuilder->mPerspectiveItemIndex = 0;
|
||||
|
|
@ -1175,6 +1184,7 @@ private:
|
|||
nsRect mCaretRect;
|
||||
uint32_t mFirstFrameMarkedForDisplay;
|
||||
bool mIsBackgroundOnly;
|
||||
nsIFrame* mPresShellIgnoreScrollFrame;
|
||||
// This is a per-document flag turning off event handling for all content
|
||||
// in the document, and is set when we enter a subdocument for a pointer-
|
||||
// events:none frame.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue