Skip to content

Commit

Permalink
Backed out changeset 8f2dd8f13b53 (bug 1388161) for failing chrome's …
Browse files Browse the repository at this point in the history
…test_animation_performance_warning.html | preserve-3d transform. r=backout
  • Loading branch information
Archaeopteryx committed Aug 10, 2017
1 parent c84d825 commit ad67156
Show file tree
Hide file tree
Showing 154 changed files with 450 additions and 281 deletions.
4 changes: 2 additions & 2 deletions layout/base/PresShell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4942,8 +4942,8 @@ PresShell::CreateRangePaintInfo(nsIDOMRange* aRange,
nsIFrame* frame = aNode->AsContent()->GetPrimaryFrame();
// XXX deal with frame being null due to display:contents
for (; frame; frame = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(frame)) {
info->mBuilder.SetDirtyRect(frame->GetVisualOverflowRect());
frame->BuildDisplayListForStackingContext(&info->mBuilder, &info->mList);
frame->BuildDisplayListForStackingContext(&info->mBuilder,
frame->GetVisualOverflowRect(), &info->mList);
}
};
if (startContainer->NodeType() == nsIDOMNode::TEXT_NODE) {
Expand Down
6 changes: 2 additions & 4 deletions layout/base/nsLayoutUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3257,8 +3257,7 @@ nsLayoutUtils::GetFramesForArea(nsIFrame* aFrame, const nsRect& aRect,
}

builder.EnterPresShell(aFrame);
builder.SetDirtyRect(aRect);
aFrame->BuildDisplayListForStackingContext(&builder, &list);
aFrame->BuildDisplayListForStackingContext(&builder, aRect, &list);
builder.LeavePresShell(aFrame, nullptr);

#ifdef MOZ_DUMP_PAINTING
Expand Down Expand Up @@ -3613,8 +3612,7 @@ nsLayoutUtils::PaintFrame(gfxContext* aRenderingContext, nsIFrame* aFrame,

nsDisplayListBuilder::AutoCurrentScrollParentIdSetter idSetter(&builder, id);

builder.SetDirtyRect(dirtyRect);
aFrame->BuildDisplayListForStackingContext(&builder, &list);
aFrame->BuildDisplayListForStackingContext(&builder, dirtyRect, &list);
}

LayoutFrameType frameType = aFrame->Type();
Expand Down
12 changes: 10 additions & 2 deletions layout/forms/nsComboboxControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1312,6 +1312,7 @@ class nsComboboxDisplayFrame : public nsBlockFrame {
nsReflowStatus& aStatus) override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

protected:
Expand Down Expand Up @@ -1346,10 +1347,11 @@ nsComboboxDisplayFrame::Reflow(nsPresContext* aPresContext,

void
nsComboboxDisplayFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
nsDisplayListCollection set;
nsBlockFrame::BuildDisplayList(aBuilder, set);
nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, set);

// remove background items if parent frame is themed
if (mComboBox->IsThemed()) {
Expand Down Expand Up @@ -1553,16 +1555,22 @@ void nsDisplayComboboxFocus::Paint(nsDisplayListBuilder* aBuilder,

void
nsComboboxControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
#ifdef NOISY
printf("%p paint at (%d, %d, %d, %d)\n", this,
aDirtyRect.x, aDirtyRect.y, aDirtyRect.width, aDirtyRect.height);
#endif

if (aBuilder->IsForEventDelivery()) {
// Don't allow children to receive events.
// REVIEW: following old GetFrameForPoint
DisplayBorderBackgroundOutline(aBuilder, aLists);
} else {
// REVIEW: Our in-flow child frames are inline-level so they will paint in our
// content list, so we don't need to mess with layers.
nsBlockFrame::BuildDisplayList(aBuilder, aLists);
nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
}

// draw a focus indicator only when focus rings should be drawn
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsComboboxControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ class nsComboboxControlFrame final : public nsBlockFrame,
nsEventStatus* aEventStatus) override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

void PaintFocus(DrawTarget& aDrawTarget, nsPoint aPt);
Expand Down
7 changes: 4 additions & 3 deletions layout/forms/nsFieldSetFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ nsDisplayFieldSetBorder::GetBounds(nsDisplayListBuilder* aBuilder,

void
nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) {
// Paint our background and border in a special way.
// REVIEW: We don't really need to check frame emptiness here; if it's empty,
Expand All @@ -174,7 +175,7 @@ nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
}

if (GetPrevInFlow()) {
DisplayOverflowContainers(aBuilder, aLists);
DisplayOverflowContainers(aBuilder, aDirtyRect, aLists);
}

nsDisplayListCollection contentDisplayItems;
Expand All @@ -185,13 +186,13 @@ nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
// legend. However, we want the inner frame's display items to be
// after the legend's display items in z-order, so we need to save them
// and append them later.
BuildDisplayListForChild(aBuilder, inner, contentDisplayItems);
BuildDisplayListForChild(aBuilder, inner, aDirtyRect, contentDisplayItems);
}
if (nsIFrame* legend = GetLegend()) {
// The legend's background goes on our BlockBorderBackgrounds list because
// it's a block child.
nsDisplayListSet set(aLists, aLists.BlockBorderBackgrounds());
BuildDisplayListForChild(aBuilder, legend, set);
BuildDisplayListForChild(aBuilder, legend, aDirtyRect, set);
}
// Put the inner frame's display items on the master list. Note that this
// moves its border/background display items to our BorderBackground() list,
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsFieldSetFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class nsFieldSetFrame final : public nsContainerFrame
nscoord* aBaseline) const override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

DrawResult PaintBorder(nsDisplayListBuilder* aBuilder,
Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsFileControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -496,9 +496,10 @@ nsFileControlFrame::SetFormProperty(nsIAtom* aName,

void
nsFileControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
BuildDisplayListForInline(aBuilder, aLists);
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
}

#ifdef ACCESSIBILITY
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsFileControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class nsFileControlFrame : public nsBlockFrame,
nsIFrame* aPrevInFlow) override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

NS_DECL_QUERYFRAME
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsFormControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class nsFormControlFrame : public nsAtomicContainerFrame,

// nsIFrame replacements
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override {
DO_GLOBAL_REFLOW_COUNT_DSP("nsFormControlFrame");
DisplayBorderBackgroundOutline(aBuilder, aLists);
Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsGfxCheckboxControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,10 @@ nsGfxCheckboxControlFrame::AccessibleType()

void
nsGfxCheckboxControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
nsFormControlFrame::BuildDisplayList(aBuilder, aLists);
nsFormControlFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);

// Get current checked state through content model.
if ((!IsChecked() && !IsIndeterminate()) || !IsVisibleForPainting(aBuilder))
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsGfxCheckboxControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class nsGfxCheckboxControlFrame : public nsFormControlFrame

#ifdef MOZ_WIDGET_ANDROID
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;
#endif

Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsGfxRadioControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ PaintCheckedRadioButton(nsIFrame* aFrame,

void
nsGfxRadioControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
nsFormControlFrame::BuildDisplayList(aBuilder, aLists);
nsFormControlFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);

if (!IsVisibleForPainting(aBuilder))
return;
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsGfxRadioControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class nsGfxRadioControlFrame : public nsFormControlFrame

#ifdef MOZ_WIDGET_ANDROID
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;
#endif
};
Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsHTMLButtonControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ nsHTMLButtonControlFrame::ShouldClipPaintingToBorderBox()

void
nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
// Clip to our border area for event hit testing.
Expand Down Expand Up @@ -125,7 +126,7 @@ nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
clipState.ClipContainingBlockDescendants(rect, hasRadii ? radii : nullptr);
}

BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), set,
BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), aDirtyRect, set,
DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT);
// That should put the display items in set.Content()
}
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsHTMLButtonControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class nsHTMLButtonControlFrame : public nsContainerFrame,
NS_DECL_FRAMEARENA_HELPERS(nsHTMLButtonControlFrame)

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

virtual nscoord GetMinISize(gfxContext *aRenderingContext) override;
Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsListControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ nsListControlFrame::DestroyFrom(nsIFrame* aDestructRoot)

void
nsListControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
// We allow visibility:hidden <select>s to contain visible options.
Expand All @@ -185,7 +186,7 @@ nsListControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
mLastDropdownBackstopColor));
}

nsHTMLScrollFrame::BuildDisplayList(aBuilder, aLists);
nsHTMLScrollFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
}

/**
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsListControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class nsListControlFrame final : public nsHTMLScrollFrame,
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

virtual nsContainerFrame* GetContentInsertionFrame() override;
Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsProgressFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,10 @@ NS_QUERYFRAME_TAIL_INHERITING(nsContainerFrame)

void
nsProgressFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
BuildDisplayListForInline(aBuilder, aLists);
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
}

void
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsProgressFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class nsProgressFrame final
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

virtual void Reflow(nsPresContext* aCX,
Expand Down
5 changes: 3 additions & 2 deletions layout/forms/nsRangeFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ nsDisplayRangeFocusRing::Paint(nsDisplayListBuilder* aBuilder,

void
nsRangeFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
const nsStyleDisplay* disp = StyleDisplay();
Expand All @@ -270,10 +271,10 @@ nsRangeFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
nsIFrame* thumb = mThumbDiv->GetPrimaryFrame();
if (thumb) {
nsDisplayListSet set(aLists, aLists.Content());
BuildDisplayListForChild(aBuilder, thumb, set, DISPLAY_CHILD_INLINE);
BuildDisplayListForChild(aBuilder, thumb, aDirtyRect, set, DISPLAY_CHILD_INLINE);
}
} else {
BuildDisplayListForInline(aBuilder, aLists);
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
}

// Draw a focus outline if appropriate:
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsRangeFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class nsRangeFrame final : public nsContainerFrame,
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;

void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

virtual void Reflow(nsPresContext* aPresContext,
Expand Down
8 changes: 5 additions & 3 deletions layout/forms/nsSelectsAreaFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,25 +126,27 @@ class nsDisplayListFocus : public nsDisplayItem {

void
nsSelectsAreaFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
if (!aBuilder->IsForEventDelivery()) {
BuildDisplayListInternal(aBuilder, aLists);
BuildDisplayListInternal(aBuilder, aDirtyRect, aLists);
return;
}

nsDisplayListCollection set;
BuildDisplayListInternal(aBuilder, set);
BuildDisplayListInternal(aBuilder, aDirtyRect, set);

nsOptionEventGrabberWrapper wrapper;
wrapper.WrapLists(aBuilder, this, set, aLists);
}

void
nsSelectsAreaFrame::BuildDisplayListInternal(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
nsBlockFrame::BuildDisplayList(aBuilder, aLists);
nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);

nsListControlFrame* listFrame = GetEnclosingListFrame(this);
if (listFrame && listFrame->IsFocused()) {
Expand Down
2 changes: 2 additions & 0 deletions layout/forms/nsSelectsAreaFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ class nsSelectsAreaFrame : public nsBlockFrame
nsFrameState aFlags);

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

void BuildDisplayListInternal(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists);

virtual void Reflow(nsPresContext* aCX,
Expand Down
3 changes: 2 additions & 1 deletion layout/forms/nsTextControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1286,6 +1286,7 @@ nsTextControlFrame::PeekOffset(nsPeekOffsetStruct *aPos)

void
nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
/*
Expand Down Expand Up @@ -1315,7 +1316,7 @@ nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
!txtCtrl->GetPlaceholderVisibility()) ||
(kid->GetContent() == txtCtrl->GetPreviewNode() &&
!txtCtrl->GetPreviewVisibility()))) {
BuildDisplayListForChild(aBuilder, kid, set, 0);
BuildDisplayListForChild(aBuilder, kid, aDirtyRect, set, 0);
}
kid = kid->GetNextSibling();
}
Expand Down
1 change: 1 addition & 0 deletions layout/forms/nsTextControlFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ class nsTextControlFrame final : public nsContainerFrame,
nsFrameList& aChildList) override;

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

virtual mozilla::dom::Element*
Expand Down
9 changes: 3 additions & 6 deletions layout/generic/ViewportFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ ViewportFrame::Init(nsIContent* aContent,

void
ViewportFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
AUTO_PROFILER_LABEL("ViewportFrame::BuildDisplayList", GRAPHICS);
Expand All @@ -62,7 +63,7 @@ ViewportFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
// make the kid's BorderBackground our own. This ensures that the canvas
// frame's background becomes our own background and therefore appears
// below negative z-index elements.
BuildDisplayListForChild(aBuilder, kid, aLists);
BuildDisplayListForChild(aBuilder, kid, aDirtyRect, aLists);
}

nsDisplayList topLayerList;
Expand Down Expand Up @@ -123,12 +124,8 @@ BuildDisplayListForTopLayerFrame(nsDisplayListBuilder* aBuilder,
asrSetter.SetCurrentActiveScrolledRoot(
savedOutOfFlowData->mContainingBlockActiveScrolledRoot);
}
nsDisplayListBuilder::AutoBuildingDisplayList
buildingForChild(aBuilder, aFrame, dirty,
aBuilder->IsAtRootOfPseudoStackingContext());

nsDisplayList list;
aFrame->BuildDisplayListForStackingContext(aBuilder, &list);
aFrame->BuildDisplayListForStackingContext(aBuilder, dirty, &list);
aList->AppendToTop(&list);
}

Expand Down
1 change: 1 addition & 0 deletions layout/generic/ViewportFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class ViewportFrame : public nsContainerFrame {
#endif

virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;

void BuildDisplayListForTopLayer(nsDisplayListBuilder* aBuilder,
Expand Down
Loading

0 comments on commit ad67156

Please sign in to comment.