Bug 1346109. Call NotifyApproximateFrameVisibilityUpdate after we set a display port base rect. r=botond

NotifyApproximateFrameVisibilityUpdate gets the displayport so we want the base rect set before calling it.

We also don't want to record the displayport if we ignored it in the actual visibility pass.
This commit is contained in:
Timothy Nikkel 2017-04-05 00:18:11 -05:00
Родитель f2802b9d4c
Коммит cba42d43ac
4 изменённых файлов: 20 добавлений и 13 удалений

Просмотреть файл

@ -6003,8 +6003,6 @@ PresShell::MarkFramesInSubtreeApproximatelyVisible(nsIFrame* aFrame,
nsIScrollableFrame* scrollFrame = do_QueryFrame(aFrame);
if (scrollFrame) {
scrollFrame->NotifyApproximateFrameVisibilityUpdate();
bool ignoreDisplayPort = false;
if (nsLayoutUtils::IsMissingDisplayPortBaseRect(aFrame->GetContent())) {
// We can properly set the base rect for root scroll frames on top level
@ -6023,6 +6021,8 @@ PresShell::MarkFramesInSubtreeApproximatelyVisible(nsIFrame* aFrame,
}
}
scrollFrame->NotifyApproximateFrameVisibilityUpdate(ignoreDisplayPort);
nsRect displayPort;
bool usingDisplayport = !ignoreDisplayPort &&
nsLayoutUtils::GetDisplayPortForVisibilityTesting(

Просмотреть файл

@ -2717,12 +2717,17 @@ ScrollFrameHelper::ScheduleSyntheticMouseMove()
}
void
ScrollFrameHelper::NotifyApproximateFrameVisibilityUpdate()
ScrollFrameHelper::NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort)
{
mLastUpdateFramesPos = GetScrollPosition();
mHadDisplayPortAtLastFrameUpdate =
nsLayoutUtils::GetDisplayPort(mOuter->GetContent(),
&mDisplayPortAtLastFrameUpdate);
if (aIgnoreDisplayPort) {
mHadDisplayPortAtLastFrameUpdate = false;
mDisplayPortAtLastFrameUpdate = nsRect();
} else {
mHadDisplayPortAtLastFrameUpdate =
nsLayoutUtils::GetDisplayPort(mOuter->GetContent(),
&mDisplayPortAtLastFrameUpdate);
}
}
bool
@ -3238,7 +3243,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists)
{
if (aBuilder->IsForFrameVisibility()) {
NotifyApproximateFrameVisibilityUpdate();
NotifyApproximateFrameVisibilityUpdate(false);
}
mOuter->DisplayBorderBackgroundOutline(aBuilder, aLists);

Просмотреть файл

@ -405,7 +405,7 @@ public:
bool DecideScrollableLayer(nsDisplayListBuilder* aBuilder,
nsRect* aDirtyRect,
bool aAllowCreateDisplayPort);
void NotifyApproximateFrameVisibilityUpdate();
void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort);
bool GetDisplayPortAtLastApproximateFrameVisibilityUpdate(nsRect* aDisplayPort);
bool AllowDisplayPortExpiration();
@ -943,8 +943,8 @@ public:
bool aAllowCreateDisplayPort) override {
return mHelper.DecideScrollableLayer(aBuilder, aDirtyRect, aAllowCreateDisplayPort);
}
virtual void NotifyApproximateFrameVisibilityUpdate() override {
mHelper.NotifyApproximateFrameVisibilityUpdate();
virtual void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort) override {
mHelper.NotifyApproximateFrameVisibilityUpdate(aIgnoreDisplayPort);
}
virtual bool GetDisplayPortAtLastApproximateFrameVisibilityUpdate(nsRect* aDisplayPort) override {
return mHelper.GetDisplayPortAtLastApproximateFrameVisibilityUpdate(aDisplayPort);
@ -1463,8 +1463,8 @@ public:
bool aAllowCreateDisplayPort) override {
return mHelper.DecideScrollableLayer(aBuilder, aDirtyRect, aAllowCreateDisplayPort);
}
virtual void NotifyApproximateFrameVisibilityUpdate() override {
mHelper.NotifyApproximateFrameVisibilityUpdate();
virtual void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort) override {
mHelper.NotifyApproximateFrameVisibilityUpdate(aIgnoreDisplayPort);
}
virtual bool GetDisplayPortAtLastApproximateFrameVisibilityUpdate(nsRect* aDisplayPort) override {
return mHelper.GetDisplayPortAtLastApproximateFrameVisibilityUpdate(aDisplayPort);

Просмотреть файл

@ -452,8 +452,10 @@ public:
/**
* Notification that this scroll frame is getting its frame visibility updated.
* aIgnoreDisplayPort indicates that the display port was ignored (because
* there was no suitable base rect)
*/
virtual void NotifyApproximateFrameVisibilityUpdate() = 0;
virtual void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort) = 0;
/**
* Returns true if this scroll frame had a display port at the last frame