OLD | NEW |
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 | 7 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights |
8 reserved. | 8 reserved. |
9 | 9 |
10 This library is free software; you can redistribute it and/or | 10 This library is free software; you can redistribute it and/or |
(...skipping 10 matching lines...) Expand all Loading... |
21 along with this library; see the file COPYING.LIB. If not, write to | 21 along with this library; see the file COPYING.LIB. If not, write to |
22 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 22 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
23 Boston, MA 02110-1301, USA. | 23 Boston, MA 02110-1301, USA. |
24 */ | 24 */ |
25 | 25 |
26 #ifndef FrameView_h | 26 #ifndef FrameView_h |
27 #define FrameView_h | 27 #define FrameView_h |
28 | 28 |
29 #include "core/CoreExport.h" | 29 #include "core/CoreExport.h" |
30 #include "core/dom/DocumentLifecycle.h" | 30 #include "core/dom/DocumentLifecycle.h" |
| 31 #include "core/dom/IntersectionObserverCallback.h" |
31 #include "core/frame/FrameViewAutoSizeInfo.h" | 32 #include "core/frame/FrameViewAutoSizeInfo.h" |
32 #include "core/frame/LayoutSubtreeRootList.h" | 33 #include "core/frame/LayoutSubtreeRootList.h" |
33 #include "core/frame/RootFrameViewport.h" | 34 #include "core/frame/RootFrameViewport.h" |
34 #include "core/layout/ScrollAnchor.h" | 35 #include "core/layout/ScrollAnchor.h" |
35 #include "core/paint/FirstMeaningfulPaintDetector.h" | 36 #include "core/paint/FirstMeaningfulPaintDetector.h" |
36 #include "core/paint/ObjectPaintProperties.h" | 37 #include "core/paint/ObjectPaintProperties.h" |
37 #include "core/paint/PaintInvalidationCapableScrollableArea.h" | 38 #include "core/paint/PaintInvalidationCapableScrollableArea.h" |
38 #include "core/paint/PaintPhase.h" | 39 #include "core/paint/PaintPhase.h" |
39 #include "platform/RuntimeEnabledFeatures.h" | 40 #include "platform/RuntimeEnabledFeatures.h" |
40 #include "platform/Widget.h" | 41 #include "platform/Widget.h" |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 | 664 |
664 LayoutAnalyzer* layoutAnalyzer() { return m_analyzer.get(); } | 665 LayoutAnalyzer* layoutAnalyzer() { return m_analyzer.get(); } |
665 | 666 |
666 // Returns true if this frame should not render or schedule visual updates. | 667 // Returns true if this frame should not render or schedule visual updates. |
667 bool shouldThrottleRendering() const; | 668 bool shouldThrottleRendering() const; |
668 | 669 |
669 // Returns true if this frame could potentially skip rendering and avoid | 670 // Returns true if this frame could potentially skip rendering and avoid |
670 // scheduling visual updates. | 671 // scheduling visual updates. |
671 bool canThrottleRendering() const; | 672 bool canThrottleRendering() const; |
672 bool isHiddenForThrottling() const { return m_hiddenForThrottling; } | 673 bool isHiddenForThrottling() const { return m_hiddenForThrottling; } |
| 674 void setupRenderThrottling(); |
673 | 675 |
674 // For testing, run pending intersection observer notifications for this | 676 // For testing, run pending intersection observer notifications for this |
675 // frame. | 677 // frame. |
676 void notifyRenderThrottlingObserversForTesting(); | 678 void updateRenderThrottlingStatusForTesting(); |
677 | 679 |
678 // Paint properties for SPv2 Only. | 680 // Paint properties for SPv2 Only. |
679 void setPreTranslation( | 681 void setPreTranslation( |
680 PassRefPtr<TransformPaintPropertyNode> preTranslation) { | 682 PassRefPtr<TransformPaintPropertyNode> preTranslation) { |
681 m_preTranslation = preTranslation; | 683 m_preTranslation = preTranslation; |
682 } | 684 } |
683 TransformPaintPropertyNode* preTranslation() const { | 685 TransformPaintPropertyNode* preTranslation() const { |
684 return m_preTranslation.get(); | 686 return m_preTranslation.get(); |
685 } | 687 } |
686 | 688 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 : m_scope(&view->m_inUpdateScrollbars, true) {} | 768 : m_scope(&view->m_inUpdateScrollbars, true) {} |
767 | 769 |
768 private: | 770 private: |
769 AutoReset<bool> m_scope; | 771 AutoReset<bool> m_scope; |
770 }; | 772 }; |
771 | 773 |
772 // Only for LayoutPart to traverse into sub frames during paint invalidation. | 774 // Only for LayoutPart to traverse into sub frames during paint invalidation. |
773 void invalidateTreeIfNeeded(const PaintInvalidationState&); | 775 void invalidateTreeIfNeeded(const PaintInvalidationState&); |
774 | 776 |
775 private: | 777 private: |
| 778 class IntersectionObserverCallback |
| 779 : public blink::IntersectionObserverCallback { |
| 780 public: |
| 781 IntersectionObserverCallback(FrameView*, ExecutionContext*); |
| 782 |
| 783 // IntersectionObserverCallback implementation: |
| 784 void handleEvent(const HeapVector<Member<IntersectionObserverEntry>>&, |
| 785 IntersectionObserver&) override; |
| 786 ExecutionContext* getExecutionContext() const override; |
| 787 |
| 788 DECLARE_TRACE(); |
| 789 |
| 790 private: |
| 791 WeakMember<FrameView> m_frameView; |
| 792 WeakMember<ExecutionContext> m_context; |
| 793 }; |
| 794 |
776 explicit FrameView(LocalFrame*); | 795 explicit FrameView(LocalFrame*); |
777 | 796 |
778 void updateScrollOffset(const ScrollOffset&, ScrollType) override; | 797 void updateScrollOffset(const ScrollOffset&, ScrollType) override; |
779 | 798 |
780 void updateLifecyclePhasesInternal( | 799 void updateLifecyclePhasesInternal( |
781 DocumentLifecycle::LifecycleState targetState); | 800 DocumentLifecycle::LifecycleState targetState); |
782 | 801 |
783 void invalidateTreeIfNeededRecursive(); | 802 void invalidateTreeIfNeededRecursive(); |
784 void scrollContentsIfNeededRecursive(); | 803 void scrollContentsIfNeededRecursive(); |
785 void updateStyleAndLayoutIfNeededRecursive(); | 804 void updateStyleAndLayoutIfNeededRecursive(); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 | 909 |
891 void collectAnnotatedRegions(LayoutObject&, | 910 void collectAnnotatedRegions(LayoutObject&, |
892 Vector<AnnotatedRegionValue>&) const; | 911 Vector<AnnotatedRegionValue>&) const; |
893 | 912 |
894 template <typename Function> | 913 template <typename Function> |
895 void forAllNonThrottledFrameViews(const Function&); | 914 void forAllNonThrottledFrameViews(const Function&); |
896 | 915 |
897 void setNeedsUpdateViewportIntersection(); | 916 void setNeedsUpdateViewportIntersection(); |
898 void updateViewportIntersectionsForSubtree( | 917 void updateViewportIntersectionsForSubtree( |
899 DocumentLifecycle::LifecycleState targetState); | 918 DocumentLifecycle::LifecycleState targetState); |
900 void updateViewportIntersectionIfNeeded(); | 919 void updateRenderThrottlingStatus(bool hidden, bool subtreeThrottled); |
901 void notifyRenderThrottlingObservers(); | |
902 void updateThrottlingStatus(); | |
903 void notifyResizeObservers(); | 920 void notifyResizeObservers(); |
904 | 921 |
905 // PaintInvalidationCapableScrollableArea | 922 // PaintInvalidationCapableScrollableArea |
906 LayoutScrollbarPart* resizer() const override { return nullptr; } | 923 LayoutScrollbarPart* resizer() const override { return nullptr; } |
907 | 924 |
908 bool checkLayoutInvalidationIsAllowed() const; | 925 bool checkLayoutInvalidationIsAllowed() const; |
909 | 926 |
910 PaintController* paintController() { return m_paintController.get(); } | 927 PaintController* paintController() { return m_paintController.get(); } |
911 | 928 |
912 LayoutSize m_size; | 929 LayoutSize m_size; |
(...skipping 21 matching lines...) Expand all Loading... |
934 bool m_hasPendingLayout; | 951 bool m_hasPendingLayout; |
935 LayoutSubtreeRootList m_layoutSubtreeRootList; | 952 LayoutSubtreeRootList m_layoutSubtreeRootList; |
936 DepthOrderedLayoutObjectList m_orthogonalWritingModeRootList; | 953 DepthOrderedLayoutObjectList m_orthogonalWritingModeRootList; |
937 | 954 |
938 bool m_layoutSchedulingEnabled; | 955 bool m_layoutSchedulingEnabled; |
939 bool m_inSynchronousPostLayout; | 956 bool m_inSynchronousPostLayout; |
940 int m_layoutCount; | 957 int m_layoutCount; |
941 unsigned m_nestedLayoutCount; | 958 unsigned m_nestedLayoutCount; |
942 Timer<FrameView> m_postLayoutTasksTimer; | 959 Timer<FrameView> m_postLayoutTasksTimer; |
943 Timer<FrameView> m_updateWidgetsTimer; | 960 Timer<FrameView> m_updateWidgetsTimer; |
944 std::unique_ptr<CancellableTaskFactory> | |
945 m_renderThrottlingObserverNotificationFactory; | |
946 | 961 |
947 bool m_firstLayout; | 962 bool m_firstLayout; |
948 bool m_isTransparent; | 963 bool m_isTransparent; |
949 Color m_baseBackgroundColor; | 964 Color m_baseBackgroundColor; |
950 IntSize m_lastViewportSize; | 965 IntSize m_lastViewportSize; |
951 float m_lastZoomFactor; | 966 float m_lastZoomFactor; |
952 | 967 |
953 AtomicString m_mediaType; | 968 AtomicString m_mediaType; |
954 AtomicString m_mediaTypeWhenNotPrinting; | 969 AtomicString m_mediaTypeWhenNotPrinting; |
955 | 970 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1016 | 1031 |
1017 // Mark if something has changed in the mapping from Frame to GraphicsLayer | 1032 // Mark if something has changed in the mapping from Frame to GraphicsLayer |
1018 // and the Frame Timing regions should be recalculated. | 1033 // and the Frame Timing regions should be recalculated. |
1019 bool m_frameTimingRequestsDirty; | 1034 bool m_frameTimingRequestsDirty; |
1020 | 1035 |
1021 // Exists only on root frame. | 1036 // Exists only on root frame. |
1022 // TODO(bokan): crbug.com/484188. We should specialize FrameView for the | 1037 // TODO(bokan): crbug.com/484188. We should specialize FrameView for the |
1023 // main frame. | 1038 // main frame. |
1024 Member<RootFrameViewport> m_viewportScrollableArea; | 1039 Member<RootFrameViewport> m_viewportScrollableArea; |
1025 | 1040 |
1026 // This frame's bounds in the root frame's content coordinates, clipped | |
1027 // recursively through every ancestor view. | |
1028 IntRect m_viewportIntersection; | |
1029 bool m_viewportIntersectionValid; | |
1030 | |
1031 // The following members control rendering pipeline throttling for this | 1041 // The following members control rendering pipeline throttling for this |
1032 // frame. They are only updated in response to intersection observer | 1042 // frame. They are only updated in response to intersection observer |
1033 // notifications, i.e., not in the middle of the lifecycle. | 1043 // notifications, i.e., not in the middle of the lifecycle. |
1034 bool m_hiddenForThrottling; | 1044 bool m_hiddenForThrottling; |
1035 bool m_crossOriginForThrottling; | |
1036 bool m_subtreeThrottled; | 1045 bool m_subtreeThrottled; |
1037 | 1046 |
1038 // Paint properties for SPv2 Only. | 1047 // Paint properties for SPv2 Only. |
1039 // The hierarchy of transform subtree created by a FrameView. | 1048 // The hierarchy of transform subtree created by a FrameView. |
1040 // [ preTranslation ] The offset from Widget::frameRect. | 1049 // [ preTranslation ] The offset from Widget::frameRect. |
1041 // | Establishes viewport. | 1050 // | Establishes viewport. |
1042 // +---[ scrollTranslation ] Frame scrolling. | 1051 // +---[ scrollTranslation ] Frame scrolling. |
1043 // TODO(trchen): These will not be needed once settings->rootLayerScrolls() is | 1052 // TODO(trchen): These will not be needed once settings->rootLayerScrolls() is |
1044 // enabled. | 1053 // enabled. |
1045 RefPtr<TransformPaintPropertyNode> m_preTranslation; | 1054 RefPtr<TransformPaintPropertyNode> m_preTranslation; |
(...skipping 10 matching lines...) Expand all Loading... |
1056 | 1065 |
1057 // This is set on the local root frame view only. | 1066 // This is set on the local root frame view only. |
1058 DocumentLifecycle::LifecycleState m_currentUpdateLifecyclePhasesTargetState; | 1067 DocumentLifecycle::LifecycleState m_currentUpdateLifecyclePhasesTargetState; |
1059 | 1068 |
1060 ScrollAnchor m_scrollAnchor; | 1069 ScrollAnchor m_scrollAnchor; |
1061 | 1070 |
1062 bool m_needsScrollbarsUpdate; | 1071 bool m_needsScrollbarsUpdate; |
1063 bool m_suppressAdjustViewSize; | 1072 bool m_suppressAdjustViewSize; |
1064 bool m_allowsLayoutInvalidationAfterLayoutClean; | 1073 bool m_allowsLayoutInvalidationAfterLayoutClean; |
1065 | 1074 |
| 1075 Member<IntersectionObserver> m_intersectionObserver; |
| 1076 |
1066 // For testing. | 1077 // For testing. |
1067 struct ObjectPaintInvalidation { | 1078 struct ObjectPaintInvalidation { |
1068 String name; | 1079 String name; |
1069 PaintInvalidationReason reason; | 1080 PaintInvalidationReason reason; |
1070 }; | 1081 }; |
1071 std::unique_ptr<Vector<ObjectPaintInvalidation>> | 1082 std::unique_ptr<Vector<ObjectPaintInvalidation>> |
1072 m_trackedObjectPaintInvalidations; | 1083 m_trackedObjectPaintInvalidations; |
1073 | 1084 |
1074 // For Slimming Paint v2 only. | 1085 // For Slimming Paint v2 only. |
1075 std::unique_ptr<PaintController> m_paintController; | 1086 std::unique_ptr<PaintController> m_paintController; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 widget.isFrameView()); | 1118 widget.isFrameView()); |
1108 DEFINE_TYPE_CASTS(FrameView, | 1119 DEFINE_TYPE_CASTS(FrameView, |
1109 ScrollableArea, | 1120 ScrollableArea, |
1110 scrollableArea, | 1121 scrollableArea, |
1111 scrollableArea->isFrameView(), | 1122 scrollableArea->isFrameView(), |
1112 scrollableArea.isFrameView()); | 1123 scrollableArea.isFrameView()); |
1113 | 1124 |
1114 } // namespace blink | 1125 } // namespace blink |
1115 | 1126 |
1116 #endif // FrameView_h | 1127 #endif // FrameView_h |
OLD | NEW |