Bug 1269935 - Replace PresShell::DecVisibleCount() with a general map function. r=mstange

This commit is contained in:
Seth Fowler 2016-05-11 19:27:28 -07:00
Родитель 1678f1d3bb
Коммит 298a9f9d69
2 изменённых файлов: 23 добавлений и 24 удалений

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

@ -5745,18 +5745,17 @@ PresShell::MarkFramesInListApproximatelyVisible(const nsDisplayList& aList)
}
}
/* static */ void
PresShell::DecVisibleCount(const VisibleFrames& aFrames,
VisibilityCounter aCounter,
Maybe<OnNonvisible> aNonvisibleAction /* = Nothing() */)
template <typename Func> void
ForAllTrackedFramesInVisibleSet(const VisibleFrames& aFrames, Func aFunc)
{
for (auto iter = aFrames.ConstIter(); !iter.Done(); iter.Next()) {
nsIFrame* frame = iter.Get()->GetKey();
// Decrement the frame's visible count if we're still tracking its
// visibility. (We may not be, if the frame disabled visibility tracking
// after we added it to the visible frames list.)
// Call |aFunc| if we're still tracking the frame's visibility. (We may
// not be, if the frame disabled visibility tracking after we added it to
// the visible frames list.)
if (frame->TrackingVisibility()) {
frame->DecVisibilityCount(aCounter, aNonvisibleAction);
aFunc(frame);
}
}
}
@ -5801,8 +5800,9 @@ PresShell::RebuildApproximateFrameVisibilityDisplayList(const nsDisplayList& aLi
MarkFramesInListApproximatelyVisible(aList);
DecVisibleCount(oldApproximatelyVisibleFrames,
VisibilityCounter::MAY_BECOME_VISIBLE);
ForAllTrackedFramesInVisibleSet(oldApproximatelyVisibleFrames, [&](nsIFrame* aFrame) {
aFrame->DecVisibilityCount(VisibilityCounter::MAY_BECOME_VISIBLE);
});
NotifyCompositorOfVisibleRegionsChange();
}
@ -5827,14 +5827,14 @@ void
PresShell::ClearVisibleFramesSets(Maybe<OnNonvisible> aNonvisibleAction
/* = Nothing() */)
{
DecVisibleCount(mApproximatelyVisibleFrames,
VisibilityCounter::MAY_BECOME_VISIBLE,
aNonvisibleAction);
mApproximatelyVisibleFrames.Clear();
ForAllTrackedFramesInVisibleSet(mApproximatelyVisibleFrames, [&](nsIFrame* aFrame) {
aFrame->DecVisibilityCount(VisibilityCounter::MAY_BECOME_VISIBLE, aNonvisibleAction);
});
ForAllTrackedFramesInVisibleSet(mInDisplayPortFrames, [&](nsIFrame* aFrame) {
aFrame->DecVisibilityCount(VisibilityCounter::IN_DISPLAYPORT, aNonvisibleAction);
});
DecVisibleCount(mInDisplayPortFrames,
VisibilityCounter::IN_DISPLAYPORT,
aNonvisibleAction);
mApproximatelyVisibleFrames.Clear();
mInDisplayPortFrames.Clear();
if (mVisibleRegions) {
@ -5962,8 +5962,9 @@ PresShell::RebuildApproximateFrameVisibility(nsRect* aRect,
MarkFramesInSubtreeApproximatelyVisible(rootFrame, vis, aRemoveOnly);
DecVisibleCount(oldApproximatelyVisibleFrames,
VisibilityCounter::MAY_BECOME_VISIBLE);
ForAllTrackedFramesInVisibleSet(oldApproximatelyVisibleFrames, [&](nsIFrame* aFrame) {
aFrame->DecVisibilityCount(VisibilityCounter::MAY_BECOME_VISIBLE);
});
NotifyCompositorOfVisibleRegionsChange();
}
@ -6403,7 +6404,9 @@ PresShell::Paint(nsView* aViewToPaint,
nsLayoutUtils::PaintFrame(nullptr, frame, aDirtyRegion, bgcolor,
nsDisplayListBuilderMode::PAINTING, flags);
DecVisibleCount(oldInDisplayPortFrames, VisibilityCounter::IN_DISPLAYPORT);
ForAllTrackedFramesInVisibleSet(oldInDisplayPortFrames, [&](nsIFrame* aFrame) {
aFrame->DecVisibilityCount(VisibilityCounter::IN_DISPLAYPORT);
});
if (mVisibleRegions &&
!mNotifyCompositorOfVisibleRegionsChangeEvent.IsPending()) {

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

@ -777,10 +777,6 @@ protected:
const nsRect& aRect,
bool aRemoveOnly = false);
void DecVisibleCount(const VisibleFrames& aFrames,
VisibilityCounter aCounter,
Maybe<OnNonvisible> aNonvisibleAction = Nothing());
void InitVisibleRegionsIfVisualizationEnabled(VisibilityCounter aForCounter);
void AddFrameToVisibleRegions(nsIFrame* aFrame, VisibilityCounter aForCounter);
void NotifyCompositorOfVisibleRegionsChange();