Index: third_party/WebKit/Source/core/frame/FrameView.h |
diff --git a/third_party/WebKit/Source/core/frame/FrameView.h b/third_party/WebKit/Source/core/frame/FrameView.h |
index d8f183533b304cbc72c827789d3e7ae11255013c..0c8655aec0ed8c874c07a03dd98096892d075d74 100644 |
--- a/third_party/WebKit/Source/core/frame/FrameView.h |
+++ b/third_party/WebKit/Source/core/frame/FrameView.h |
@@ -28,6 +28,7 @@ |
#include "core/CoreExport.h" |
#include "core/dom/DocumentLifecycle.h" |
+#include "core/dom/IntersectionObserverCallback.h" |
#include "core/frame/FrameViewAutoSizeInfo.h" |
#include "core/frame/LayoutSubtreeRootList.h" |
#include "core/frame/RootFrameViewport.h" |
@@ -670,10 +671,11 @@ class CORE_EXPORT FrameView final |
// scheduling visual updates. |
bool canThrottleRendering() const; |
bool isHiddenForThrottling() const { return m_hiddenForThrottling; } |
+ void setupRenderThrottling(); |
// For testing, run pending intersection observer notifications for this |
// frame. |
- void notifyRenderThrottlingObserversForTesting(); |
+ void updateRenderThrottlingStatusForTesting(); |
// Paint properties for SPv2 Only. |
void setPreTranslation( |
@@ -773,6 +775,23 @@ class CORE_EXPORT FrameView final |
void invalidateTreeIfNeeded(const PaintInvalidationState&); |
private: |
+ class IntersectionObserverCallback |
+ : public blink::IntersectionObserverCallback { |
+ public: |
+ IntersectionObserverCallback(FrameView*, ExecutionContext*); |
+ |
+ // IntersectionObserverCallback implementation: |
+ void handleEvent(const HeapVector<Member<IntersectionObserverEntry>>&, |
+ IntersectionObserver&) override; |
+ ExecutionContext* getExecutionContext() const override; |
+ |
+ DECLARE_TRACE(); |
+ |
+ private: |
+ WeakMember<FrameView> m_frameView; |
+ WeakMember<ExecutionContext> m_context; |
+ }; |
+ |
explicit FrameView(LocalFrame*); |
void updateScrollOffset(const ScrollOffset&, ScrollType) override; |
@@ -897,9 +916,7 @@ class CORE_EXPORT FrameView final |
void setNeedsUpdateViewportIntersection(); |
void updateViewportIntersectionsForSubtree( |
DocumentLifecycle::LifecycleState targetState); |
- void updateViewportIntersectionIfNeeded(); |
- void notifyRenderThrottlingObservers(); |
- void updateThrottlingStatus(); |
+ void updateRenderThrottlingStatus(bool hidden, bool subtreeThrottled); |
void notifyResizeObservers(); |
// PaintInvalidationCapableScrollableArea |
@@ -941,8 +958,6 @@ class CORE_EXPORT FrameView final |
unsigned m_nestedLayoutCount; |
Timer<FrameView> m_postLayoutTasksTimer; |
Timer<FrameView> m_updateWidgetsTimer; |
- std::unique_ptr<CancellableTaskFactory> |
- m_renderThrottlingObserverNotificationFactory; |
bool m_firstLayout; |
bool m_isTransparent; |
@@ -1023,16 +1038,10 @@ class CORE_EXPORT FrameView final |
// main frame. |
Member<RootFrameViewport> m_viewportScrollableArea; |
- // This frame's bounds in the root frame's content coordinates, clipped |
- // recursively through every ancestor view. |
- IntRect m_viewportIntersection; |
- bool m_viewportIntersectionValid; |
- |
// The following members control rendering pipeline throttling for this |
// frame. They are only updated in response to intersection observer |
// notifications, i.e., not in the middle of the lifecycle. |
bool m_hiddenForThrottling; |
- bool m_crossOriginForThrottling; |
bool m_subtreeThrottled; |
// Paint properties for SPv2 Only. |
@@ -1063,6 +1072,8 @@ class CORE_EXPORT FrameView final |
bool m_suppressAdjustViewSize; |
bool m_allowsLayoutInvalidationAfterLayoutClean; |
+ Member<IntersectionObserver> m_intersectionObserver; |
+ |
// For testing. |
struct ObjectPaintInvalidation { |
String name; |