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 1535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1546 frame().loader().saveScrollState(); | 1546 frame().loader().saveScrollState(); |
| 1547 } | 1547 } |
| 1548 | 1548 |
| 1549 void FrameView::didScrollTimerFired(Timer<FrameView>*) | 1549 void FrameView::didScrollTimerFired(Timer<FrameView>*) |
| 1550 { | 1550 { |
| 1551 if (m_frame->document() && m_frame->document()->layoutView()) { | 1551 if (m_frame->document() && m_frame->document()->layoutView()) { |
| 1552 ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->updateAl lImageResourcePriorities(); | 1552 ResourceLoadPriorityOptimizer::resourceLoadPriorityOptimizer()->updateAl lImageResourcePriorities(); |
| 1553 } | 1553 } |
| 1554 } | 1554 } |
| 1555 | 1555 |
| 1556 void FrameView::updateLayersAndCompositingAfterScrollIfNeeded() | 1556 void FrameView::updateLayersAndCompositingAfterScrollIfNeeded(const DoubleSize& scrollDelta) |
| 1557 { | 1557 { |
| 1558 // Nothing to do after scrolling if there are no fixed position elements. | 1558 // Nothing to do after scrolling if there are no fixed position elements. |
| 1559 if (!hasViewportConstrainedObjects()) | 1559 if (!hasViewportConstrainedObjects()) |
| 1560 return; | 1560 return; |
| 1561 | 1561 |
| 1562 RefPtrWillBeRawPtr<FrameView> protect(this); | 1562 RefPtrWillBeRawPtr<FrameView> protect(this); |
| 1563 | 1563 |
| 1564 // Update sticky positioned elements which scroll with the viewport. | |
|
chrishtr
2015/10/06 17:08:33
Are position: sticky elements spec'ed to stick to
flackr
2015/10/07 20:38:12
They're spec'ed to stick to the viewport if no anc
| |
| 1565 for (const auto& viewportConstrainedObject : *m_viewportConstrainedObjects) { | |
| 1566 LayoutObject* layoutObject = viewportConstrainedObject; | |
| 1567 DeprecatedPaintLayer* layer = toLayoutBoxModelObject(layoutObject)->laye r(); | |
| 1568 if (layoutObject->style()->position() == StickyPosition && layer->scroll sWithViewport()) | |
| 1569 layer->updateLayerPositionsAfterOverflowScroll(scrollDelta); | |
| 1570 } | |
| 1571 | |
| 1564 // If there fixed position elements, scrolling may cause compositing layers to change. | 1572 // If there fixed position elements, scrolling may cause compositing layers to change. |
| 1565 // Update widget and layer positions after scrolling, but only if we're not inside of | 1573 // Update widget and layer positions after scrolling, but only if we're not inside of |
| 1566 // layout. | 1574 // layout. |
| 1567 if (!m_nestedLayoutCount) { | 1575 if (!m_nestedLayoutCount) { |
| 1568 updateWidgetPositions(); | 1576 updateWidgetPositions(); |
| 1569 if (LayoutView* layoutView = this->layoutView()) | 1577 if (LayoutView* layoutView = this->layoutView()) |
| 1570 layoutView->layer()->setNeedsCompositingInputsUpdate(); | 1578 layoutView->layer()->setNeedsCompositingInputsUpdate(); |
| 1571 } | 1579 } |
| 1572 } | 1580 } |
| 1573 | 1581 |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2122 // Don't scroll the FrameView! | 2130 // Don't scroll the FrameView! |
| 2123 ASSERT_NOT_REACHED(); | 2131 ASSERT_NOT_REACHED(); |
| 2124 } | 2132 } |
| 2125 | 2133 |
| 2126 m_scrollPosition = newPosition; | 2134 m_scrollPosition = newPosition; |
| 2127 | 2135 |
| 2128 if (!scrollbarsSuppressed()) | 2136 if (!scrollbarsSuppressed()) |
| 2129 m_pendingScrollDelta += scrollDelta; | 2137 m_pendingScrollDelta += scrollDelta; |
| 2130 | 2138 |
| 2131 clearScrollAnchor(); | 2139 clearScrollAnchor(); |
| 2132 updateLayersAndCompositingAfterScrollIfNeeded(); | 2140 updateLayersAndCompositingAfterScrollIfNeeded(scrollDelta); |
| 2133 scrollPositionChanged(); | 2141 scrollPositionChanged(); |
| 2134 frame().loader().client()->didChangeScrollOffset(); | 2142 frame().loader().client()->didChangeScrollOffset(); |
| 2135 } | 2143 } |
| 2136 | 2144 |
| 2137 void FrameView::invalidatePaintForTickmarks() const | 2145 void FrameView::invalidatePaintForTickmarks() const |
| 2138 { | 2146 { |
| 2139 if (Scrollbar* scrollbar = verticalScrollbar()) | 2147 if (Scrollbar* scrollbar = verticalScrollbar()) |
| 2140 scrollbar->invalidate(); | 2148 scrollbar->invalidate(); |
| 2141 } | 2149 } |
| 2142 | 2150 |
| (...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3151 // If no scrollbars are present, the content may still be scrollable. | 3159 // If no scrollbars are present, the content may still be scrollable. |
| 3152 if (!scrollbar) { | 3160 if (!scrollbar) { |
| 3153 IntSize scrollSize = m_contentsSize - visibleContentRect().size(); | 3161 IntSize scrollSize = m_contentsSize - visibleContentRect().size(); |
| 3154 scrollSize.clampNegativeToZero(); | 3162 scrollSize.clampNegativeToZero(); |
| 3155 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollS ize.height(); | 3163 return orientation == HorizontalScrollbar ? scrollSize.width() : scrollS ize.height(); |
| 3156 } | 3164 } |
| 3157 | 3165 |
| 3158 return scrollbar->totalSize() - scrollbar->visibleSize(); | 3166 return scrollbar->totalSize() - scrollbar->visibleSize(); |
| 3159 } | 3167 } |
| 3160 | 3168 |
| 3161 void FrameView::setScrollOffset(const IntPoint& offset, ScrollType) | 3169 void FrameView::setScrollOffset(const IntPoint& offset, ScrollType type) |
| 3162 { | 3170 { |
| 3171 // Scrolling is triggered directly in response to events but should be | |
| 3172 // processed after compositing update. http://crbug.com/420741 | |
| 3173 DisableCompositingQueryAsserts disabler; | |
|
chrishtr
2015/10/06 17:08:33
What is the code path that is now active which lea
flackr
2015/10/07 20:38:12
The stack trace is here:
#0 0x00007fdaea9281b1 in
chrishtr
2015/11/04 01:40:44
Why is the compositing data stale when setScrollOf
flackr
2015/11/25 21:03:01
We have the same disabler in PaintLayerScrollableA
| |
| 3163 scrollTo(clampScrollPosition(offset)); | 3174 scrollTo(clampScrollPosition(offset)); |
| 3164 } | 3175 } |
| 3165 | 3176 |
| 3166 void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType) | 3177 void FrameView::setScrollOffset(const DoublePoint& offset, ScrollType type) |
| 3167 { | 3178 { |
| 3179 // Scrolling is triggered directly in response to events but should be | |
| 3180 // processed after compositing update. http://crbug.com/420741 | |
| 3181 DisableCompositingQueryAsserts disabler; | |
|
chrishtr
2015/10/06 17:08:33
Same question here.
flackr
2015/10/07 20:38:12
Same as above.
| |
| 3168 scrollTo(clampScrollPosition(offset)); | 3182 scrollTo(clampScrollPosition(offset)); |
| 3169 } | 3183 } |
| 3170 | 3184 |
| 3171 void FrameView::windowResizerRectChanged() | 3185 void FrameView::windowResizerRectChanged() |
| 3172 { | 3186 { |
| 3173 updateScrollbars(scrollOffsetDouble()); | 3187 updateScrollbars(scrollOffsetDouble()); |
| 3174 } | 3188 } |
| 3175 | 3189 |
| 3176 bool FrameView::hasOverlayScrollbars() const | 3190 bool FrameView::hasOverlayScrollbars() const |
| 3177 { | 3191 { |
| (...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3935 | 3949 |
| 3936 if (!graphicsLayer) | 3950 if (!graphicsLayer) |
| 3937 return; | 3951 return; |
| 3938 | 3952 |
| 3939 DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentL ayoutObject(), paintInvalidationContainer, viewRect); | 3953 DeprecatedPaintLayer::mapRectToPaintInvalidationBacking(localFrame->contentL ayoutObject(), paintInvalidationContainer, viewRect); |
| 3940 | 3954 |
| 3941 graphicsLayerTimingRequests.add(graphicsLayer, Vector<std::pair<int64_t, Web Rect>>()).storedValue->value.append(std::make_pair(m_frame->frameID(), enclosing IntRect(viewRect))); | 3955 graphicsLayerTimingRequests.add(graphicsLayer, Vector<std::pair<int64_t, Web Rect>>()).storedValue->value.append(std::make_pair(m_frame->frameID(), enclosing IntRect(viewRect))); |
| 3942 } | 3956 } |
| 3943 | 3957 |
| 3944 } // namespace blink | 3958 } // namespace blink |
| OLD | NEW |