From 900c174944de08f7aeabd61a96a1d38923a75b04 Mon Sep 17 00:00:00 2001 From: Seth Fowler Date: Fri, 29 May 2015 22:33:37 -0700 Subject: [PATCH] Bug 1169879 - Use only the critical displayport when computing image visibility. r=tn --- layout/base/nsLayoutUtils.cpp | 7 +++++++ layout/base/nsLayoutUtils.h | 10 ++++++++++ layout/base/nsPresShell.cpp | 4 +++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index aedd782e4aed..d8098e6a498c 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -1065,6 +1065,13 @@ nsLayoutUtils::GetDisplayPort(nsIContent* aContent, nsRect *aResult) return GetDisplayPortImpl(aContent, aResult, 1.0f); } +/* static */ bool +nsLayoutUtils::GetDisplayPortForVisibilityTesting(nsIContent* aContent, + nsRect* aResult) +{ + return GetDisplayPortImpl(aContent, aResult, 1.0f); +} + bool nsLayoutUtils::SetDisplayPortMargins(nsIContent* aContent, nsIPresShell* aPresShell, diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index 42b174071864..057765dd2b09 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -165,6 +165,16 @@ public: */ static bool GetDisplayPort(nsIContent* aContent, nsRect *aResult = nullptr); + /** + * @return the display port for the given element which should be used for + * visibility testing purposes. + * + * If low-precision buffers are enabled, this is the critical display port; + * otherwise, it's the same display port returned by GetDisplayPort(). + */ + static bool GetDisplayPortForVisibilityTesting(nsIContent* aContent, + nsRect* aResult = nullptr); + enum class RepaintMode : uint8_t { Repaint, DoNotRepaint diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index 7ca1e72ca316..fd7de8f05e07 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -5940,7 +5940,9 @@ PresShell::MarkImagesInSubtreeVisible(nsIFrame* aFrame, const nsRect& aRect) nsIScrollableFrame* scrollFrame = do_QueryFrame(aFrame); if (scrollFrame) { nsRect displayPort; - bool usingDisplayport = nsLayoutUtils::GetDisplayPort(aFrame->GetContent(), &displayPort); + bool usingDisplayport = + nsLayoutUtils::GetDisplayPortForVisibilityTesting(aFrame->GetContent(), + &displayPort); if (usingDisplayport) { rect = displayPort; } else {