Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(523)

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameView.h

Issue 2272773002: Use intersection observer to control frame throttling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adjust OOPIF expectations Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 (C) 1998 Waldo Bastian (bastian@kde.org) 3 (C) 1998 Waldo Bastian (bastian@kde.org)
4 (C) 1998, 1999 Torben Weis (weis@kde.org) 4 (C) 1998, 1999 Torben Weis (weis@kde.org)
5 (C) 1999 Lars Knoll (knoll@kde.org) 5 (C) 1999 Lars Knoll (knoll@kde.org)
6 (C) 1999 Antti Koivisto (koivisto@kde.org) 6 (C) 1999 Antti Koivisto (koivisto@kde.org)
7 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 7 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
8 8
9 This library is free software; you can redistribute it and/or 9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Library General Public 10 modify it under the terms of the GNU Library General Public
11 License as published by the Free Software Foundation; either 11 License as published by the Free Software Foundation; either
12 version 2 of the License, or (at your option) any later version. 12 version 2 of the License, or (at your option) any later version.
13 13
14 This library is distributed in the hope that it will be useful, 14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Library General Public License for more details. 17 Library General Public License for more details.
18 18
19 You should have received a copy of the GNU Library General Public License 19 You should have received a copy of the GNU Library General Public License
20 along with this library; see the file COPYING.LIB. If not, write to 20 along with this library; see the file COPYING.LIB. If not, write to
21 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA. 22 Boston, MA 02110-1301, USA.
23 */ 23 */
24 24
25 #ifndef FrameView_h 25 #ifndef FrameView_h
26 #define FrameView_h 26 #define FrameView_h
27 27
28 #include "core/CoreExport.h" 28 #include "core/CoreExport.h"
29 #include "core/dom/DocumentLifecycle.h" 29 #include "core/dom/DocumentLifecycle.h"
30 #include "core/dom/IntersectionObserverCallback.h"
30 #include "core/frame/FrameViewAutoSizeInfo.h" 31 #include "core/frame/FrameViewAutoSizeInfo.h"
31 #include "core/frame/LayoutSubtreeRootList.h" 32 #include "core/frame/LayoutSubtreeRootList.h"
32 #include "core/frame/RootFrameViewport.h" 33 #include "core/frame/RootFrameViewport.h"
33 #include "core/layout/ScrollAnchor.h" 34 #include "core/layout/ScrollAnchor.h"
34 #include "core/layout/api/LayoutViewItem.h" 35 #include "core/layout/api/LayoutViewItem.h"
35 #include "core/paint/FirstMeaningfulPaintDetector.h" 36 #include "core/paint/FirstMeaningfulPaintDetector.h"
36 #include "core/paint/PaintInvalidationCapableScrollableArea.h" 37 #include "core/paint/PaintInvalidationCapableScrollableArea.h"
37 #include "core/paint/PaintPhase.h" 38 #include "core/paint/PaintPhase.h"
38 #include "platform/RuntimeEnabledFeatures.h" 39 #include "platform/RuntimeEnabledFeatures.h"
39 #include "platform/Widget.h" 40 #include "platform/Widget.h"
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 585
585 LayoutAnalyzer* layoutAnalyzer() { return m_analyzer.get(); } 586 LayoutAnalyzer* layoutAnalyzer() { return m_analyzer.get(); }
586 587
587 // Returns true if this frame should not render or schedule visual updates. 588 // Returns true if this frame should not render or schedule visual updates.
588 bool shouldThrottleRendering() const; 589 bool shouldThrottleRendering() const;
589 590
590 // Returns true if this frame could potentially skip rendering and avoid 591 // Returns true if this frame could potentially skip rendering and avoid
591 // scheduling visual updates. 592 // scheduling visual updates.
592 bool canThrottleRendering() const; 593 bool canThrottleRendering() const;
593 bool isHiddenForThrottling() const { return m_hiddenForThrottling; } 594 bool isHiddenForThrottling() const { return m_hiddenForThrottling; }
595 void setupRenderThrottling();
594 596
595 // For testing, run pending intersection observer notifications for this fra me. 597 // For testing, run pending intersection observer notifications for this fra me.
596 void notifyRenderThrottlingObserversForTesting(); 598 void updateRenderThrottlingStatusForTesting();
597 599
598 // Paint properties for SPv2 Only. 600 // Paint properties for SPv2 Only.
599 void setPreTranslation(PassRefPtr<TransformPaintPropertyNode> preTranslation ) { m_preTranslation = preTranslation; } 601 void setPreTranslation(PassRefPtr<TransformPaintPropertyNode> preTranslation ) { m_preTranslation = preTranslation; }
600 TransformPaintPropertyNode* preTranslation() const { return m_preTranslation .get(); } 602 TransformPaintPropertyNode* preTranslation() const { return m_preTranslation .get(); }
601 603
602 void setScrollTranslation(PassRefPtr<TransformPaintPropertyNode> scrollTrans lation) { m_scrollTranslation = scrollTranslation; } 604 void setScrollTranslation(PassRefPtr<TransformPaintPropertyNode> scrollTrans lation) { m_scrollTranslation = scrollTranslation; }
603 TransformPaintPropertyNode* scrollTranslation() const { return m_scrollTrans lation.get(); } 605 TransformPaintPropertyNode* scrollTranslation() const { return m_scrollTrans lation.get(); }
604 606
605 void setContentClip(PassRefPtr<ClipPaintPropertyNode> contentClip) { m_conte ntClip = contentClip; } 607 void setContentClip(PassRefPtr<ClipPaintPropertyNode> contentClip) { m_conte ntClip = contentClip; }
606 ClipPaintPropertyNode* contentClip() const { return m_contentClip.get(); } 608 ClipPaintPropertyNode* contentClip() const { return m_contentClip.get(); }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 : m_scope(&view->m_inUpdateScrollbars, true) 663 : m_scope(&view->m_inUpdateScrollbars, true)
662 { } 664 { }
663 private: 665 private:
664 AutoReset<bool> m_scope; 666 AutoReset<bool> m_scope;
665 }; 667 };
666 668
667 // Only for LayoutPart to traverse into sub frames during paint invalidation . 669 // Only for LayoutPart to traverse into sub frames during paint invalidation .
668 void invalidateTreeIfNeeded(const PaintInvalidationState&); 670 void invalidateTreeIfNeeded(const PaintInvalidationState&);
669 671
670 private: 672 private:
673 class IntersectionObserverCallback : public blink::IntersectionObserverCallb ack {
674 public:
675 IntersectionObserverCallback(FrameView*);
676
677 // IntersectionObserverCallback implementation:
678 void handleEvent(const HeapVector<Member<IntersectionObserverEntry>>&, I ntersectionObserver&) override;
679 ExecutionContext* getExecutionContext() const override;
680
681 DECLARE_TRACE();
682
683 private:
684 Member<FrameView> m_frameView;
szager1 2016/08/30 23:57:12 I think this should be WeakMember, to avoid a refe
Sami 2016/08/31 11:08:56 I guess I was thinking that with Oilpan in-heap re
685 };
686
671 explicit FrameView(LocalFrame*); 687 explicit FrameView(LocalFrame*);
672 688
673 void setScrollOffset(const DoublePoint&, ScrollType) override; 689 void setScrollOffset(const DoublePoint&, ScrollType) override;
674 690
675 void updateLifecyclePhasesInternal(DocumentLifecycle::LifecycleState targetS tate); 691 void updateLifecyclePhasesInternal(DocumentLifecycle::LifecycleState targetS tate);
676 692
677 void invalidateTreeIfNeededRecursive(); 693 void invalidateTreeIfNeededRecursive();
678 void scrollContentsIfNeededRecursive(); 694 void scrollContentsIfNeededRecursive();
679 void updateStyleAndLayoutIfNeededRecursive(); 695 void updateStyleAndLayoutIfNeededRecursive();
680 void updatePaintProperties(); 696 void updatePaintProperties();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 787
772 // LayoutObject for the viewport-defining element (see Document::viewportDef iningElement). 788 // LayoutObject for the viewport-defining element (see Document::viewportDef iningElement).
773 LayoutObject* viewportLayoutObject() const; 789 LayoutObject* viewportLayoutObject() const;
774 790
775 void collectAnnotatedRegions(LayoutObject&, Vector<AnnotatedRegionValue>&) c onst; 791 void collectAnnotatedRegions(LayoutObject&, Vector<AnnotatedRegionValue>&) c onst;
776 792
777 template <typename Function> void forAllNonThrottledFrameViews(const Functio n&); 793 template <typename Function> void forAllNonThrottledFrameViews(const Functio n&);
778 794
779 void setNeedsUpdateViewportIntersection(); 795 void setNeedsUpdateViewportIntersection();
780 void updateViewportIntersectionsForSubtree(DocumentLifecycle::LifecycleState targetState); 796 void updateViewportIntersectionsForSubtree(DocumentLifecycle::LifecycleState targetState);
781 void updateViewportIntersectionIfNeeded(); 797 void updateRenderThrottlingStatus(bool hidden, bool subtreeThrottled);
782 void notifyRenderThrottlingObservers();
783 void updateThrottlingStatus();
784 void notifyResizeObservers(); 798 void notifyResizeObservers();
785 799
786 // PaintInvalidationCapableScrollableArea 800 // PaintInvalidationCapableScrollableArea
787 LayoutScrollbarPart* resizer() const override { return nullptr; } 801 LayoutScrollbarPart* resizer() const override { return nullptr; }
788 802
789 bool checkLayoutInvalidationIsAllowed() const; 803 bool checkLayoutInvalidationIsAllowed() const;
790 804
791 LayoutSize m_size; 805 LayoutSize m_size;
792 806
793 typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet; 807 typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet;
(...skipping 18 matching lines...) Expand all
812 bool m_hasPendingLayout; 826 bool m_hasPendingLayout;
813 LayoutSubtreeRootList m_layoutSubtreeRootList; 827 LayoutSubtreeRootList m_layoutSubtreeRootList;
814 DepthOrderedLayoutObjectList m_orthogonalWritingModeRootList; 828 DepthOrderedLayoutObjectList m_orthogonalWritingModeRootList;
815 829
816 bool m_layoutSchedulingEnabled; 830 bool m_layoutSchedulingEnabled;
817 bool m_inSynchronousPostLayout; 831 bool m_inSynchronousPostLayout;
818 int m_layoutCount; 832 int m_layoutCount;
819 unsigned m_nestedLayoutCount; 833 unsigned m_nestedLayoutCount;
820 Timer<FrameView> m_postLayoutTasksTimer; 834 Timer<FrameView> m_postLayoutTasksTimer;
821 Timer<FrameView> m_updateWidgetsTimer; 835 Timer<FrameView> m_updateWidgetsTimer;
822 std::unique_ptr<CancellableTaskFactory> m_renderThrottlingObserverNotificati onFactory;
823 836
824 bool m_firstLayout; 837 bool m_firstLayout;
825 bool m_isTransparent; 838 bool m_isTransparent;
826 Color m_baseBackgroundColor; 839 Color m_baseBackgroundColor;
827 IntSize m_lastViewportSize; 840 IntSize m_lastViewportSize;
828 float m_lastZoomFactor; 841 float m_lastZoomFactor;
829 842
830 AtomicString m_mediaType; 843 AtomicString m_mediaType;
831 AtomicString m_mediaTypeWhenNotPrinting; 844 AtomicString m_mediaTypeWhenNotPrinting;
832 845
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 907
895 // Mark if something has changed in the mapping from Frame to GraphicsLayer 908 // Mark if something has changed in the mapping from Frame to GraphicsLayer
896 // and the Frame Timing regions should be recalculated. 909 // and the Frame Timing regions should be recalculated.
897 bool m_frameTimingRequestsDirty; 910 bool m_frameTimingRequestsDirty;
898 911
899 // Exists only on root frame. 912 // Exists only on root frame.
900 // TODO(bokan): crbug.com/484188. We should specialize FrameView for the 913 // TODO(bokan): crbug.com/484188. We should specialize FrameView for the
901 // main frame. 914 // main frame.
902 Member<RootFrameViewport> m_viewportScrollableArea; 915 Member<RootFrameViewport> m_viewportScrollableArea;
903 916
904 // This frame's bounds in the root frame's content coordinates, clipped
905 // recursively through every ancestor view.
906 IntRect m_viewportIntersection;
907 bool m_viewportIntersectionValid;
908
909 // The following members control rendering pipeline throttling for this 917 // The following members control rendering pipeline throttling for this
910 // frame. They are only updated in response to intersection observer 918 // frame. They are only updated in response to intersection observer
911 // notifications, i.e., not in the middle of the lifecycle. 919 // notifications, i.e., not in the middle of the lifecycle.
912 bool m_hiddenForThrottling; 920 bool m_hiddenForThrottling;
913 bool m_crossOriginForThrottling;
914 bool m_subtreeThrottled; 921 bool m_subtreeThrottled;
915 922
916 // Paint properties for SPv2 Only. 923 // Paint properties for SPv2 Only.
917 // The hierarchy of transform subtree created by a FrameView. 924 // The hierarchy of transform subtree created by a FrameView.
918 // [ preTranslation ] The offset from Widget::frameRect. Estab lishes viewport. 925 // [ preTranslation ] The offset from Widget::frameRect. Estab lishes viewport.
919 // +---[ scrollTranslation ] Frame scrolling. 926 // +---[ scrollTranslation ] Frame scrolling.
920 // TODO(trchen): These will not be needed once settings->rootLayerScrolls() is enabled. 927 // TODO(trchen): These will not be needed once settings->rootLayerScrolls() is enabled.
921 RefPtr<TransformPaintPropertyNode> m_preTranslation; 928 RefPtr<TransformPaintPropertyNode> m_preTranslation;
922 RefPtr<TransformPaintPropertyNode> m_scrollTranslation; 929 RefPtr<TransformPaintPropertyNode> m_scrollTranslation;
923 // The content clip clips the document (= LayoutView) but not the scrollbars . 930 // The content clip clips the document (= LayoutView) but not the scrollbars .
924 // TODO(trchen): This will not be needed once settings->rootLayerScrolls() i s enabled. 931 // TODO(trchen): This will not be needed once settings->rootLayerScrolls() i s enabled.
925 RefPtr<ClipPaintPropertyNode> m_contentClip; 932 RefPtr<ClipPaintPropertyNode> m_contentClip;
926 933
927 // These nodes represent the root nodes of each property tree. 934 // These nodes represent the root nodes of each property tree.
928 // Only the root frame should create them and they will be no-op. 935 // Only the root frame should create them and they will be no-op.
929 RefPtr<TransformPaintPropertyNode> m_rootTransform; 936 RefPtr<TransformPaintPropertyNode> m_rootTransform;
930 RefPtr<ClipPaintPropertyNode> m_rootClip; 937 RefPtr<ClipPaintPropertyNode> m_rootClip;
931 RefPtr<EffectPaintPropertyNode> m_rootEffect; 938 RefPtr<EffectPaintPropertyNode> m_rootEffect;
932 939
933 // This is set on the local root frame view only. 940 // This is set on the local root frame view only.
934 DocumentLifecycle::LifecycleState m_currentUpdateLifecyclePhasesTargetState; 941 DocumentLifecycle::LifecycleState m_currentUpdateLifecyclePhasesTargetState;
935 942
936 ScrollAnchor m_scrollAnchor; 943 ScrollAnchor m_scrollAnchor;
937 944
938 bool m_needsScrollbarsUpdate; 945 bool m_needsScrollbarsUpdate;
939 bool m_suppressAdjustViewSize; 946 bool m_suppressAdjustViewSize;
940 bool m_allowsLayoutInvalidationAfterLayoutClean; 947 bool m_allowsLayoutInvalidationAfterLayoutClean;
941 948
949 Member<IntersectionObserver> m_intersectionObserver;
950
942 // For testing. 951 // For testing.
943 struct ObjectPaintInvalidation { 952 struct ObjectPaintInvalidation {
944 String name; 953 String name;
945 PaintInvalidationReason reason; 954 PaintInvalidationReason reason;
946 }; 955 };
947 std::unique_ptr<Vector<ObjectPaintInvalidation>> m_trackedObjectPaintInvalid ations; 956 std::unique_ptr<Vector<ObjectPaintInvalidation>> m_trackedObjectPaintInvalid ations;
948 }; 957 };
949 958
950 inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count) 959 inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count)
951 { 960 {
(...skipping 17 matching lines...) Expand all
969 if (m_visuallyNonEmptyPixelCount > visualPixelThreshold) 978 if (m_visuallyNonEmptyPixelCount > visualPixelThreshold)
970 setIsVisuallyNonEmpty(); 979 setIsVisuallyNonEmpty();
971 } 980 }
972 981
973 DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFra meView()); 982 DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFra meView());
974 DEFINE_TYPE_CASTS(FrameView, ScrollableArea, scrollableArea, scrollableArea->isF rameView(), scrollableArea.isFrameView()); 983 DEFINE_TYPE_CASTS(FrameView, ScrollableArea, scrollableArea, scrollableArea->isF rameView(), scrollableArea.isFrameView());
975 984
976 } // namespace blink 985 } // namespace blink
977 986
978 #endif // FrameView_h 987 #endif // FrameView_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698