Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
| 3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
| 4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
| 5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
| 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
| 9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 10 * | 10 * |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 213 renderer->setWidget(nullptr); | 213 renderer->setWidget(nullptr); |
| 214 } | 214 } |
| 215 | 215 |
| 216 void FrameView::reset() | 216 void FrameView::reset() |
| 217 { | 217 { |
| 218 m_cannotBlitToWindow = false; | 218 m_cannotBlitToWindow = false; |
| 219 m_isOverlapped = false; | 219 m_isOverlapped = false; |
| 220 m_contentIsOpaque = false; | 220 m_contentIsOpaque = false; |
| 221 m_hasPendingLayout = false; | 221 m_hasPendingLayout = false; |
| 222 m_layoutSubtreeRoot = 0; | 222 m_layoutSubtreeRoot = 0; |
| 223 m_doFullRepaint = false; | |
| 224 m_layoutSchedulingEnabled = true; | 223 m_layoutSchedulingEnabled = true; |
| 225 m_inPerformLayout = false; | 224 m_inPerformLayout = false; |
| 226 m_canRepaintDuringPerformLayout = false; | 225 m_canRepaintDuringPerformLayout = false; |
| 227 m_doingPreLayoutStyleUpdate = false; | 226 m_doingPreLayoutStyleUpdate = false; |
| 228 m_inSynchronousPostLayout = false; | 227 m_inSynchronousPostLayout = false; |
| 229 m_layoutCount = 0; | 228 m_layoutCount = 0; |
| 230 m_nestedLayoutCount = 0; | 229 m_nestedLayoutCount = 0; |
| 231 m_postLayoutTasksTimer.stop(); | 230 m_postLayoutTasksTimer.stop(); |
| 232 m_updateWidgetsTimer.stop(); | 231 m_updateWidgetsTimer.stop(); |
| 233 m_firstLayout = true; | 232 m_firstLayout = true; |
| (...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 943 setScrollbarModes(hMode, vMode); | 942 setScrollbarModes(hMode, vMode); |
| 944 setScrollbarsSuppressed(false, true); | 943 setScrollbarsSuppressed(false, true); |
| 945 } else if (hMode != currentHMode || vMode != currentVMode) { | 944 } else if (hMode != currentHMode || vMode != currentVMode) { |
| 946 setScrollbarModes(hMode, vMode); | 945 setScrollbarModes(hMode, vMode); |
| 947 } | 946 } |
| 948 | 947 |
| 949 LayoutSize oldSize = m_size; | 948 LayoutSize oldSize = m_size; |
| 950 | 949 |
| 951 m_size = LayoutSize(layoutSize().width(), layoutSize().height()); | 950 m_size = LayoutSize(layoutSize().width(), layoutSize().height()); |
| 952 | 951 |
| 953 if (oldSize != m_size) { | 952 if (oldSize != m_size && !m_firstLayout) { |
| 954 shouldDoFullLayout = true; | 953 RenderBox* rootRenderer = document->documentElement() ? document ->documentElement()->renderBox() : 0; |
| 955 if (!m_firstLayout) { | 954 RenderBox* bodyRenderer = rootRenderer && document->body() ? doc ument->body()->renderBox() : 0; |
| 956 RenderBox* rootRenderer = document->documentElement() ? docu ment->documentElement()->renderBox() : 0; | 955 if (bodyRenderer && bodyRenderer->stretchesToViewport()) |
| 957 RenderBox* bodyRenderer = rootRenderer && document->body() ? document->body()->renderBox() : 0; | 956 bodyRenderer->setChildNeedsLayout(); |
| 958 if (bodyRenderer && bodyRenderer->stretchesToViewport()) | 957 else if (rootRenderer && rootRenderer->stretchesToViewport()) |
| 959 bodyRenderer->setChildNeedsLayout(); | 958 rootRenderer->setChildNeedsLayout(); |
| 960 else if (rootRenderer && rootRenderer->stretchesToViewport() ) | |
| 961 rootRenderer->setChildNeedsLayout(); | |
| 962 } | |
| 963 } | 959 } |
| 964 } | 960 } |
| 965 | 961 |
| 966 layer = rootForThisLayout->enclosingLayer(); | 962 layer = rootForThisLayout->enclosingLayer(); |
| 967 | 963 |
| 968 // We need to set m_doFullRepaint before triggering layout as RenderObje ct::checkForRepaint | 964 if (shouldDoFullLayout) |
| 969 // checks the boolean to disable local repaints. | 965 setNeedsLayout(); // May override previous setNeedsResizeLayout(). |
|
dsinclair
2014/03/20 10:41:41
It seems strange to me that we're in FrameView::la
Xianzhu
2014/03/20 17:47:43
I thought if shouldDoFullLayout but only resizeLay
| |
| 970 m_doFullRepaint |= shouldDoFullLayout; | |
| 971 | |
| 972 performLayout(rootForThisLayout, inSubtreeLayout); | 966 performLayout(rootForThisLayout, inSubtreeLayout); |
| 973 | 967 |
| 974 m_layoutSubtreeRoot = 0; | 968 m_layoutSubtreeRoot = 0; |
| 975 } // Reset m_layoutSchedulingEnabled to its previous value. | 969 } // Reset m_layoutSchedulingEnabled to its previous value. |
| 976 | 970 |
| 977 if (!inSubtreeLayout && !toRenderView(rootForThisLayout)->document().printin g()) | 971 if (!inSubtreeLayout && !toRenderView(rootForThisLayout)->document().printin g()) |
| 978 adjustViewSize(); | 972 adjustViewSize(); |
| 979 | 973 |
| 980 layer->updateLayerPositionsAfterLayout(renderView()->layer(), updateLayerPos itionFlags(layer, inSubtreeLayout, m_doFullRepaint)); | 974 layer->updateLayerPositionsAfterLayout(renderView()->layer(), updateLayerPos itionFlags(layer, inSubtreeLayout, false)); |
|
dsinclair
2014/03/20 10:41:41
I believe this is the only caller for updateLayerP
| |
| 981 | 975 |
| 982 updateCompositingLayersAfterLayout(); | 976 updateCompositingLayersAfterLayout(); |
| 983 | 977 |
| 984 m_layoutCount++; | 978 m_layoutCount++; |
| 985 | 979 |
| 986 if (AXObjectCache* cache = rootForThisLayout->document().existingAXObjectCac he()) | 980 if (AXObjectCache* cache = rootForThisLayout->document().existingAXObjectCac he()) |
| 987 cache->postNotification(rootForThisLayout, AXObjectCache::AXLayoutComple te, true); | 981 cache->postNotification(rootForThisLayout, AXObjectCache::AXLayoutComple te, true); |
| 988 updateAnnotatedRegions(); | 982 updateAnnotatedRegions(); |
| 989 | 983 |
| 990 ASSERT(!rootForThisLayout->needsLayout()); | 984 ASSERT(!rootForThisLayout->needsLayout()); |
| 991 | 985 |
| 992 if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER)) | 986 if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER)) |
| 993 updateOverflowStatus(layoutSize().width() < contentsWidth(), layoutSize( ).height() < contentsHeight()); | 987 updateOverflowStatus(layoutSize().width() < contentsWidth(), layoutSize( ).height() < contentsHeight()); |
| 994 | 988 |
| 995 scheduleOrPerformPostLayoutTasks(); | 989 scheduleOrPerformPostLayoutTasks(); |
| 996 | 990 |
| 997 InspectorInstrumentation::didLayout(cookie, rootForThisLayout); | 991 InspectorInstrumentation::didLayout(cookie, rootForThisLayout); |
| 998 | 992 |
| 999 m_nestedLayoutCount--; | 993 m_nestedLayoutCount--; |
| 1000 if (m_nestedLayoutCount) | 994 if (m_nestedLayoutCount) |
| 1001 return; | 995 return; |
| 1002 | 996 |
| 1003 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) { | |
| 1004 if (m_doFullRepaint) | |
| 1005 renderView()->setShouldDoFullRepaintAfterLayout(true); | |
| 1006 | |
| 1007 if (m_doFullRepaint) | |
| 1008 repaintTree(rootForThisLayout); | |
|
dsinclair
2014/03/20 10:41:41
This will break repaintAfterLayout as this is the
Xianzhu
2014/03/20 17:47:43
Previously when m_doFullRepaint is not true, would
dsinclair
2014/03/21 09:39:27
No, this was actually broken with the partial layo
Xianzhu
2014/03/21 16:17:09
Thanks for explanation. So Patch Set 3 is doing th
| |
| 1009 | |
| 1010 } else if (m_doFullRepaint) { | |
| 1011 // FIXME: This isn't really right, since the RenderView doesn't fully en compass | |
| 1012 // the visibleContentRect(). It just happens to work out most of the tim e, | |
| 1013 // since first layouts and printing don't have you scrolled anywhere. | |
| 1014 renderView()->repaint(); | |
| 1015 } | |
| 1016 | |
| 1017 m_doFullRepaint = false; | |
| 1018 | |
| 1019 #ifndef NDEBUG | 997 #ifndef NDEBUG |
| 1020 // Post-layout assert that nobody was re-marked as needing layout during lay out. | 998 // Post-layout assert that nobody was re-marked as needing layout during lay out. |
| 1021 document->renderer()->assertSubtreeIsLaidOut(); | 999 document->renderer()->assertSubtreeIsLaidOut(); |
| 1022 #endif | 1000 #endif |
| 1023 | 1001 |
| 1024 // FIXME: It should be not possible to remove the FrameView from the frame/p age during layout | 1002 // FIXME: It should be not possible to remove the FrameView from the frame/p age during layout |
| 1025 // however m_inPerformLayout is not set for most of this function, so none o f our RELEASE_ASSERTS | 1003 // however m_inPerformLayout is not set for most of this function, so none o f our RELEASE_ASSERTS |
| 1026 // in LocalFrame/Page will fire. One of the post-layout tasks is disconnecti ng the LocalFrame from | 1004 // in LocalFrame/Page will fire. One of the post-layout tasks is disconnecti ng the LocalFrame from |
| 1027 // the page in fast/frames/crash-remove-iframe-during-object-beforeload-2.ht ml | 1005 // the page in fast/frames/crash-remove-iframe-during-object-beforeload-2.ht ml |
| 1028 // necessitating this check here. | 1006 // necessitating this check here. |
| (...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1743 repaintRect.move(-scrollOffset()); | 1721 repaintRect.move(-scrollOffset()); |
| 1744 m_trackedRepaintRects.append(repaintRect); | 1722 m_trackedRepaintRects.append(repaintRect); |
| 1745 } | 1723 } |
| 1746 | 1724 |
| 1747 ScrollView::repaintContentRectangle(r); | 1725 ScrollView::repaintContentRectangle(r); |
| 1748 } | 1726 } |
| 1749 | 1727 |
| 1750 void FrameView::contentsResized() | 1728 void FrameView::contentsResized() |
| 1751 { | 1729 { |
| 1752 ScrollView::contentsResized(); | 1730 ScrollView::contentsResized(); |
| 1753 setNeedsLayout(); | 1731 setNeedsResizeLayout(); |
| 1754 } | 1732 } |
| 1755 | 1733 |
| 1756 void FrameView::scrollbarExistenceDidChange() | 1734 void FrameView::scrollbarExistenceDidChange() |
| 1757 { | 1735 { |
| 1758 // We check to make sure the view is attached to a frame() as this method ca n | 1736 // We check to make sure the view is attached to a frame() as this method ca n |
| 1759 // be triggered before the view is attached by LocalFrame::createView(...) s etting | 1737 // be triggered before the view is attached by LocalFrame::createView(...) s etting |
| 1760 // various values such as setScrollBarModes(...) for example. An ASSERT is | 1738 // various values such as setScrollBarModes(...) for example. An ASSERT is |
| 1761 // triggered when a view is layout before being attached to a frame(). | 1739 // triggered when a view is layout before being attached to a frame(). |
| 1762 if (!frame().view()) | 1740 if (!frame().view()) |
| 1763 return; | 1741 return; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1885 || (renderView && renderView->needsLayout()) | 1863 || (renderView && renderView->needsLayout()) |
| 1886 || isSubtreeLayout(); | 1864 || isSubtreeLayout(); |
| 1887 } | 1865 } |
| 1888 | 1866 |
| 1889 void FrameView::setNeedsLayout() | 1867 void FrameView::setNeedsLayout() |
| 1890 { | 1868 { |
| 1891 if (RenderView* renderView = this->renderView()) | 1869 if (RenderView* renderView = this->renderView()) |
| 1892 renderView->setNeedsLayout(); | 1870 renderView->setNeedsLayout(); |
| 1893 } | 1871 } |
| 1894 | 1872 |
| 1873 void FrameView::setNeedsResizeLayout() | |
| 1874 { | |
| 1875 if (RenderView* renderView = this->renderView()) | |
| 1876 renderView->setNeedsResizeLayout(); | |
| 1877 } | |
| 1878 | |
| 1895 bool FrameView::isTransparent() const | 1879 bool FrameView::isTransparent() const |
| 1896 { | 1880 { |
| 1897 return m_isTransparent; | 1881 return m_isTransparent; |
| 1898 } | 1882 } |
| 1899 | 1883 |
| 1900 void FrameView::setTransparent(bool isTransparent) | 1884 void FrameView::setTransparent(bool isTransparent) |
| 1901 { | 1885 { |
| 1902 m_isTransparent = isTransparent; | 1886 m_isTransparent = isTransparent; |
| 1903 DisableCompositingQueryAsserts disabler; | 1887 DisableCompositingQueryAsserts disabler; |
| 1904 if (renderView() && renderView()->layer()->hasCompositedLayerMapping()) | 1888 if (renderView() && renderView()->layer()->hasCompositedLayerMapping()) |
| (...skipping 1312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3217 void FrameView::willRemoveScrollbar(Scrollbar* scrollbar, ScrollbarOrientation o rientation) | 3201 void FrameView::willRemoveScrollbar(Scrollbar* scrollbar, ScrollbarOrientation o rientation) |
| 3218 { | 3202 { |
| 3219 ScrollableArea::willRemoveScrollbar(scrollbar, orientation); | 3203 ScrollableArea::willRemoveScrollbar(scrollbar, orientation); |
| 3220 if (AXObjectCache* cache = axObjectCache()) { | 3204 if (AXObjectCache* cache = axObjectCache()) { |
| 3221 cache->remove(scrollbar); | 3205 cache->remove(scrollbar); |
| 3222 cache->handleScrollbarUpdate(this); | 3206 cache->handleScrollbarUpdate(this); |
| 3223 } | 3207 } |
| 3224 } | 3208 } |
| 3225 | 3209 |
| 3226 } // namespace WebCore | 3210 } // namespace WebCore |
| OLD | NEW |