| 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 f9a26739b6a91a856fb17904cc6517a1d0a346c9..db7a683c54e8935afe22e2bfb87c58c71dbc7815 100644
|
| --- a/third_party/WebKit/Source/core/frame/FrameView.h
|
| +++ b/third_party/WebKit/Source/core/frame/FrameView.h
|
| @@ -26,6 +26,7 @@
|
| #define FrameView_h
|
|
|
| #include "core/CoreExport.h"
|
| +#include "core/dom/DocumentLifecycle.h"
|
| #include "core/frame/FrameViewAutoSizeInfo.h"
|
| #include "core/frame/LayoutSubtreeRootList.h"
|
| #include "core/frame/RootFrameViewport.h"
|
| @@ -82,6 +83,7 @@ class CORE_EXPORT FrameView final : public Widget, public ScrollableArea {
|
| friend class Internals;
|
| friend class LayoutPart; // for invalidateTreeIfNeeded
|
| friend class LayoutView; // for contentRectangleForPaintInvalidation
|
| + friend class FrameThrottlingTest;
|
|
|
| public:
|
| static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*);
|
| @@ -226,12 +228,14 @@ public:
|
| Color documentBackgroundColor() const;
|
|
|
| // Run all needed lifecycle stages. After calling this method, all frames will be in the lifecycle state PaintInvalidationClean.
|
| + // If lifecycle throttling is allowed, some frames may skip the lifecycle update (e.g., based on visibility) and will not end
|
| + // up being PaintInvalidationClean.
|
| // TODO(pdr): Update callers to pass in the interest rect.
|
| - void updateAllLifecyclePhases(const LayoutRect& interestRect = LayoutRect::infiniteRect());
|
| + void updateAllLifecyclePhases(DocumentLifecycle::ThrottlingMode = DocumentLifecycle::ThrottlingMode::Disallow, const LayoutRect& interestRect = LayoutRect::infiniteRect());
|
|
|
| // Computes the style, layout and compositing lifecycle stages if needed. After calling this method, all frames wil lbe in a lifecycle
|
| // state >= CompositingClean, and scrolling has been updated.
|
| - void updateLifecycleToCompositingCleanPlusScrolling();
|
| + void updateLifecycleToCompositingCleanPlusScrolling(DocumentLifecycle::ThrottlingMode = DocumentLifecycle::ThrottlingMode::Disallow);
|
|
|
| bool invalidateViewportConstrainedObjects();
|
|
|
| @@ -557,6 +561,19 @@ public:
|
| void setFrameTimingRequestsDirty(bool isDirty) { m_frameTimingRequestsDirty = isDirty; }
|
| bool frameTimingRequestsDirty() { return m_frameTimingRequestsDirty; }
|
|
|
| + // Returns true if this frame should skip rendering pipeline processing during the
|
| + // current BeginMainFrame.
|
| + bool shouldThrottleRenderingPipeline() const;
|
| +
|
| + // Returns true if this frame should skip style computation, layout and
|
| + // compositing updates for the current BeginMainFrame.
|
| + bool shouldThrottleStyleLayoutAndCompositingUpdates() const;
|
| +
|
| + // Called to signal the end of a lifecycle update. Updates the throttling
|
| + // status of all frames in the hierarchy and schedules new animations or
|
| + // lifecycle updates as necessary.
|
| + void finalizeLifecycleUpdate();
|
| +
|
| protected:
|
| // Scroll the content via the compositor.
|
| bool scrollContentsFastPath(const IntSize& scrollDelta);
|
| @@ -610,7 +627,7 @@ private:
|
| OnlyUpToCompositingCleanPlusScrolling,
|
| };
|
|
|
| - void updateLifecyclePhasesInternal(LifeCycleUpdateOption, const LayoutRect& interestRect = LayoutRect::infiniteRect());
|
| + void updateLifecyclePhasesInternal(LifeCycleUpdateOption, DocumentLifecycle::ThrottlingMode, const LayoutRect& interestRect = LayoutRect::infiniteRect());
|
| void invalidateTreeIfNeededRecursive();
|
| void scrollContentsIfNeededRecursive();
|
| void updateStyleAndLayoutIfNeededRecursive();
|
| @@ -715,6 +732,12 @@ private:
|
| void collectFrameTimingRequests(GraphicsLayerFrameTimingRequests&);
|
| void collectFrameTimingRequestsRecursive(GraphicsLayerFrameTimingRequests&);
|
|
|
| + void updateViewportVisibilityIfNeeded();
|
| + void setLifecycleThrottlingModeForSubtree(DocumentLifecycle::ThrottlingMode);
|
| +
|
| + enum class SecurityOriginStatus { IsSameOrigin, IsCrossOrigin };
|
| + void updateThrottlingRecursive(SecurityOriginStatus);
|
| +
|
| LayoutSize m_size;
|
|
|
| typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet;
|
| @@ -796,6 +819,7 @@ private:
|
| float m_topControlsViewportAdjustment;
|
|
|
| bool m_needsUpdateWidgetPositions;
|
| + bool m_needsUpdateViewportVisibility;
|
|
|
| #if ENABLE(ASSERT)
|
| // Verified when finalizing.
|
| @@ -833,6 +857,19 @@ private:
|
| // TODO(bokan): crbug.com/484188. We should specialize FrameView for the
|
| // main frame.
|
| OwnPtrWillBeMember<ScrollableArea> m_viewportScrollableArea;
|
| +
|
| + // This frame's bounds in the root frame's content coordinates, clipped
|
| + // recursively through every ancestor view.
|
| + IntRect m_clippedBounds;
|
| +
|
| + enum class ViewportVisibility { Hidden, Visible };
|
| +
|
| + // The following members control rendering pipeline throttling for this
|
| + // frame. They are only updated at the end of the pipeline (after painting)
|
| + // to avoid running further pipeline stages for a frame without having gone
|
| + // through the previous ones.
|
| + ViewportVisibility m_viewportVisibility;
|
| + SecurityOriginStatus m_securityOriginStatusForThrottling;
|
| };
|
|
|
| inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count)
|
|
|