| 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 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/LayoutObject.h" | 34 #include "core/layout/LayoutObject.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/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 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 | 583 |
| 583 LayoutAnalyzer* layoutAnalyzer() { return m_analyzer.get(); } | 584 LayoutAnalyzer* layoutAnalyzer() { return m_analyzer.get(); } |
| 584 | 585 |
| 585 // Returns true if this frame should not render or schedule visual updates. | 586 // Returns true if this frame should not render or schedule visual updates. |
| 586 bool shouldThrottleRendering() const; | 587 bool shouldThrottleRendering() const; |
| 587 | 588 |
| 588 // Returns true if this frame could potentially skip rendering and avoid | 589 // Returns true if this frame could potentially skip rendering and avoid |
| 589 // scheduling visual updates. | 590 // scheduling visual updates. |
| 590 bool canThrottleRendering() const; | 591 bool canThrottleRendering() const; |
| 591 bool isHiddenForThrottling() const { return m_hiddenForThrottling; } | 592 bool isHiddenForThrottling() const { return m_hiddenForThrottling; } |
| 593 void setupRenderThrottling(); |
| 592 | 594 |
| 593 // For testing, run pending intersection observer notifications for this fra
me. | 595 // For testing, run pending intersection observer notifications for this fra
me. |
| 594 void notifyRenderThrottlingObserversForTesting(); | 596 void updateRenderThrottlingStatusForTesting(); |
| 595 | 597 |
| 596 // Paint properties for SPv2 Only. | 598 // Paint properties for SPv2 Only. |
| 597 void setPreTranslation(PassRefPtr<TransformPaintPropertyNode> preTranslation
) { m_preTranslation = preTranslation; } | 599 void setPreTranslation(PassRefPtr<TransformPaintPropertyNode> preTranslation
) { m_preTranslation = preTranslation; } |
| 598 TransformPaintPropertyNode* preTranslation() const { return m_preTranslation
.get(); } | 600 TransformPaintPropertyNode* preTranslation() const { return m_preTranslation
.get(); } |
| 599 | 601 |
| 600 void setScrollTranslation(PassRefPtr<TransformPaintPropertyNode> scrollTrans
lation) { m_scrollTranslation = scrollTranslation; } | 602 void setScrollTranslation(PassRefPtr<TransformPaintPropertyNode> scrollTrans
lation) { m_scrollTranslation = scrollTranslation; } |
| 601 TransformPaintPropertyNode* scrollTranslation() const { return m_scrollTrans
lation.get(); } | 603 TransformPaintPropertyNode* scrollTranslation() const { return m_scrollTrans
lation.get(); } |
| 602 | 604 |
| 603 void setContentClip(PassRefPtr<ClipPaintPropertyNode> contentClip) { m_conte
ntClip = contentClip; } | 605 void setContentClip(PassRefPtr<ClipPaintPropertyNode> contentClip) { m_conte
ntClip = contentClip; } |
| 604 ClipPaintPropertyNode* contentClip() const { return m_contentClip.get(); } | 606 ClipPaintPropertyNode* contentClip() const { return m_contentClip.get(); } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 659 : m_scope(&view->m_inUpdateScrollbars, true) | 661 : m_scope(&view->m_inUpdateScrollbars, true) |
| 660 { } | 662 { } |
| 661 private: | 663 private: |
| 662 AutoReset<bool> m_scope; | 664 AutoReset<bool> m_scope; |
| 663 }; | 665 }; |
| 664 | 666 |
| 665 // Only for LayoutPart to traverse into sub frames during paint invalidation
. | 667 // Only for LayoutPart to traverse into sub frames during paint invalidation
. |
| 666 void invalidateTreeIfNeeded(const PaintInvalidationState&); | 668 void invalidateTreeIfNeeded(const PaintInvalidationState&); |
| 667 | 669 |
| 668 private: | 670 private: |
| 671 class IntersectionObserverCallback : public blink::IntersectionObserverCallb
ack { |
| 672 public: |
| 673 IntersectionObserverCallback(FrameView*, ExecutionContext*); |
| 674 |
| 675 // IntersectionObserverCallback implementation: |
| 676 void handleEvent(const HeapVector<Member<IntersectionObserverEntry>>&, I
ntersectionObserver&) override; |
| 677 ExecutionContext* getExecutionContext() const override; |
| 678 |
| 679 DECLARE_TRACE(); |
| 680 |
| 681 private: |
| 682 WeakMember<FrameView> m_frameView; |
| 683 WeakMember<ExecutionContext> m_context; |
| 684 }; |
| 685 |
| 669 explicit FrameView(LocalFrame*); | 686 explicit FrameView(LocalFrame*); |
| 670 | 687 |
| 671 void setScrollOffset(const DoublePoint&, ScrollType) override; | 688 void setScrollOffset(const DoublePoint&, ScrollType) override; |
| 672 | 689 |
| 673 void updateLifecyclePhasesInternal(DocumentLifecycle::LifecycleState targetS
tate); | 690 void updateLifecyclePhasesInternal(DocumentLifecycle::LifecycleState targetS
tate); |
| 674 | 691 |
| 675 void invalidateTreeIfNeededRecursive(); | 692 void invalidateTreeIfNeededRecursive(); |
| 676 void scrollContentsIfNeededRecursive(); | 693 void scrollContentsIfNeededRecursive(); |
| 677 void updateStyleAndLayoutIfNeededRecursive(); | 694 void updateStyleAndLayoutIfNeededRecursive(); |
| 678 void updatePaintProperties(); | 695 void updatePaintProperties(); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 769 | 786 |
| 770 // LayoutObject for the viewport-defining element (see Document::viewportDef
iningElement). | 787 // LayoutObject for the viewport-defining element (see Document::viewportDef
iningElement). |
| 771 LayoutObject* viewportLayoutObject() const; | 788 LayoutObject* viewportLayoutObject() const; |
| 772 | 789 |
| 773 void collectAnnotatedRegions(LayoutObject&, Vector<AnnotatedRegionValue>&) c
onst; | 790 void collectAnnotatedRegions(LayoutObject&, Vector<AnnotatedRegionValue>&) c
onst; |
| 774 | 791 |
| 775 template <typename Function> void forAllNonThrottledFrameViews(const Functio
n&); | 792 template <typename Function> void forAllNonThrottledFrameViews(const Functio
n&); |
| 776 | 793 |
| 777 void setNeedsUpdateViewportIntersection(); | 794 void setNeedsUpdateViewportIntersection(); |
| 778 void updateViewportIntersectionsForSubtree(DocumentLifecycle::LifecycleState
targetState); | 795 void updateViewportIntersectionsForSubtree(DocumentLifecycle::LifecycleState
targetState); |
| 779 void updateViewportIntersectionIfNeeded(); | 796 void updateRenderThrottlingStatus(bool hidden, bool subtreeThrottled); |
| 780 void notifyRenderThrottlingObservers(); | |
| 781 void updateThrottlingStatus(); | |
| 782 void notifyResizeObservers(); | 797 void notifyResizeObservers(); |
| 783 | 798 |
| 784 // PaintInvalidationCapableScrollableArea | 799 // PaintInvalidationCapableScrollableArea |
| 785 LayoutScrollbarPart* resizer() const override { return nullptr; } | 800 LayoutScrollbarPart* resizer() const override { return nullptr; } |
| 786 | 801 |
| 787 bool checkLayoutInvalidationIsAllowed() const; | 802 bool checkLayoutInvalidationIsAllowed() const; |
| 788 | 803 |
| 789 LayoutSize m_size; | 804 LayoutSize m_size; |
| 790 | 805 |
| 791 typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet; | 806 typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 810 bool m_hasPendingLayout; | 825 bool m_hasPendingLayout; |
| 811 LayoutSubtreeRootList m_layoutSubtreeRootList; | 826 LayoutSubtreeRootList m_layoutSubtreeRootList; |
| 812 DepthOrderedLayoutObjectList m_orthogonalWritingModeRootList; | 827 DepthOrderedLayoutObjectList m_orthogonalWritingModeRootList; |
| 813 | 828 |
| 814 bool m_layoutSchedulingEnabled; | 829 bool m_layoutSchedulingEnabled; |
| 815 bool m_inSynchronousPostLayout; | 830 bool m_inSynchronousPostLayout; |
| 816 int m_layoutCount; | 831 int m_layoutCount; |
| 817 unsigned m_nestedLayoutCount; | 832 unsigned m_nestedLayoutCount; |
| 818 Timer<FrameView> m_postLayoutTasksTimer; | 833 Timer<FrameView> m_postLayoutTasksTimer; |
| 819 Timer<FrameView> m_updateWidgetsTimer; | 834 Timer<FrameView> m_updateWidgetsTimer; |
| 820 std::unique_ptr<CancellableTaskFactory> m_renderThrottlingObserverNotificati
onFactory; | |
| 821 | 835 |
| 822 bool m_firstLayout; | 836 bool m_firstLayout; |
| 823 bool m_isTransparent; | 837 bool m_isTransparent; |
| 824 Color m_baseBackgroundColor; | 838 Color m_baseBackgroundColor; |
| 825 IntSize m_lastViewportSize; | 839 IntSize m_lastViewportSize; |
| 826 float m_lastZoomFactor; | 840 float m_lastZoomFactor; |
| 827 | 841 |
| 828 AtomicString m_mediaType; | 842 AtomicString m_mediaType; |
| 829 AtomicString m_mediaTypeWhenNotPrinting; | 843 AtomicString m_mediaTypeWhenNotPrinting; |
| 830 | 844 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 | 906 |
| 893 // Mark if something has changed in the mapping from Frame to GraphicsLayer | 907 // Mark if something has changed in the mapping from Frame to GraphicsLayer |
| 894 // and the Frame Timing regions should be recalculated. | 908 // and the Frame Timing regions should be recalculated. |
| 895 bool m_frameTimingRequestsDirty; | 909 bool m_frameTimingRequestsDirty; |
| 896 | 910 |
| 897 // Exists only on root frame. | 911 // Exists only on root frame. |
| 898 // TODO(bokan): crbug.com/484188. We should specialize FrameView for the | 912 // TODO(bokan): crbug.com/484188. We should specialize FrameView for the |
| 899 // main frame. | 913 // main frame. |
| 900 Member<RootFrameViewport> m_viewportScrollableArea; | 914 Member<RootFrameViewport> m_viewportScrollableArea; |
| 901 | 915 |
| 902 // This frame's bounds in the root frame's content coordinates, clipped | |
| 903 // recursively through every ancestor view. | |
| 904 IntRect m_viewportIntersection; | |
| 905 bool m_viewportIntersectionValid; | |
| 906 | |
| 907 // The following members control rendering pipeline throttling for this | 916 // The following members control rendering pipeline throttling for this |
| 908 // frame. They are only updated in response to intersection observer | 917 // frame. They are only updated in response to intersection observer |
| 909 // notifications, i.e., not in the middle of the lifecycle. | 918 // notifications, i.e., not in the middle of the lifecycle. |
| 910 bool m_hiddenForThrottling; | 919 bool m_hiddenForThrottling; |
| 911 bool m_crossOriginForThrottling; | |
| 912 bool m_subtreeThrottled; | 920 bool m_subtreeThrottled; |
| 913 | 921 |
| 914 // Paint properties for SPv2 Only. | 922 // Paint properties for SPv2 Only. |
| 915 // The hierarchy of transform subtree created by a FrameView. | 923 // The hierarchy of transform subtree created by a FrameView. |
| 916 // [ preTranslation ] The offset from Widget::frameRect. Estab
lishes viewport. | 924 // [ preTranslation ] The offset from Widget::frameRect. Estab
lishes viewport. |
| 917 // +---[ scrollTranslation ] Frame scrolling. | 925 // +---[ scrollTranslation ] Frame scrolling. |
| 918 // TODO(trchen): These will not be needed once settings->rootLayerScrolls()
is enabled. | 926 // TODO(trchen): These will not be needed once settings->rootLayerScrolls()
is enabled. |
| 919 RefPtr<TransformPaintPropertyNode> m_preTranslation; | 927 RefPtr<TransformPaintPropertyNode> m_preTranslation; |
| 920 RefPtr<TransformPaintPropertyNode> m_scrollTranslation; | 928 RefPtr<TransformPaintPropertyNode> m_scrollTranslation; |
| 921 // The content clip clips the document (= LayoutView) but not the scrollbars
. | 929 // The content clip clips the document (= LayoutView) but not the scrollbars
. |
| 922 // TODO(trchen): This will not be needed once settings->rootLayerScrolls() i
s enabled. | 930 // TODO(trchen): This will not be needed once settings->rootLayerScrolls() i
s enabled. |
| 923 RefPtr<ClipPaintPropertyNode> m_contentClip; | 931 RefPtr<ClipPaintPropertyNode> m_contentClip; |
| 924 | 932 |
| 925 // These nodes represent the root nodes of each property tree. | 933 // These nodes represent the root nodes of each property tree. |
| 926 // Only the root frame should create them and they will be no-op. | 934 // Only the root frame should create them and they will be no-op. |
| 927 RefPtr<TransformPaintPropertyNode> m_rootTransform; | 935 RefPtr<TransformPaintPropertyNode> m_rootTransform; |
| 928 RefPtr<ClipPaintPropertyNode> m_rootClip; | 936 RefPtr<ClipPaintPropertyNode> m_rootClip; |
| 929 RefPtr<EffectPaintPropertyNode> m_rootEffect; | 937 RefPtr<EffectPaintPropertyNode> m_rootEffect; |
| 930 | 938 |
| 931 // This is set on the local root frame view only. | 939 // This is set on the local root frame view only. |
| 932 DocumentLifecycle::LifecycleState m_currentUpdateLifecyclePhasesTargetState; | 940 DocumentLifecycle::LifecycleState m_currentUpdateLifecyclePhasesTargetState; |
| 933 | 941 |
| 934 ScrollAnchor m_scrollAnchor; | 942 ScrollAnchor m_scrollAnchor; |
| 935 | 943 |
| 936 bool m_needsScrollbarsUpdate; | 944 bool m_needsScrollbarsUpdate; |
| 937 bool m_suppressAdjustViewSize; | 945 bool m_suppressAdjustViewSize; |
| 938 bool m_allowsLayoutInvalidationAfterLayoutClean; | 946 bool m_allowsLayoutInvalidationAfterLayoutClean; |
| 939 | 947 |
| 948 Member<IntersectionObserver> m_intersectionObserver; |
| 949 |
| 940 // For testing. | 950 // For testing. |
| 941 struct ObjectPaintInvalidation { | 951 struct ObjectPaintInvalidation { |
| 942 String name; | 952 String name; |
| 943 PaintInvalidationReason reason; | 953 PaintInvalidationReason reason; |
| 944 }; | 954 }; |
| 945 std::unique_ptr<Vector<ObjectPaintInvalidation>> m_trackedObjectPaintInvalid
ations; | 955 std::unique_ptr<Vector<ObjectPaintInvalidation>> m_trackedObjectPaintInvalid
ations; |
| 946 }; | 956 }; |
| 947 | 957 |
| 948 inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count) | 958 inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count) |
| 949 { | 959 { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 967 if (m_visuallyNonEmptyPixelCount > visualPixelThreshold) | 977 if (m_visuallyNonEmptyPixelCount > visualPixelThreshold) |
| 968 setIsVisuallyNonEmpty(); | 978 setIsVisuallyNonEmpty(); |
| 969 } | 979 } |
| 970 | 980 |
| 971 DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFra
meView()); | 981 DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFra
meView()); |
| 972 DEFINE_TYPE_CASTS(FrameView, ScrollableArea, scrollableArea, scrollableArea->isF
rameView(), scrollableArea.isFrameView()); | 982 DEFINE_TYPE_CASTS(FrameView, ScrollableArea, scrollableArea, scrollableArea->isF
rameView(), scrollableArea.isFrameView()); |
| 973 | 983 |
| 974 } // namespace blink | 984 } // namespace blink |
| 975 | 985 |
| 976 #endif // FrameView_h | 986 #endif // FrameView_h |
| OLD | NEW |