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

Side by Side Diff: sky/engine/core/rendering/RenderLayerScrollableArea.cpp

Issue 712573003: Remove usesCompositedScrolling (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: moar Created 6 years, 1 month 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) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 } 288 }
289 289
290 // The caret rect needs to be invalidated after scrolling 290 // The caret rect needs to be invalidated after scrolling
291 frame->selection().setCaretRectNeedsUpdate(); 291 frame->selection().setCaretRectNeedsUpdate();
292 292
293 FloatQuad quadForFakeMouseMoveEvent = FloatQuad(layer()->renderer()->previou sPaintInvalidationRect()); 293 FloatQuad quadForFakeMouseMoveEvent = FloatQuad(layer()->renderer()->previou sPaintInvalidationRect());
294 294
295 quadForFakeMouseMoveEvent = paintInvalidationContainer->localToAbsoluteQuad( quadForFakeMouseMoveEvent); 295 quadForFakeMouseMoveEvent = paintInvalidationContainer->localToAbsoluteQuad( quadForFakeMouseMoveEvent);
296 frame->eventHandler().dispatchFakeMouseMoveEventSoonInQuad(quadForFakeMouseM oveEvent); 296 frame->eventHandler().dispatchFakeMouseMoveEventSoonInQuad(quadForFakeMouseM oveEvent);
297 297
298 bool requiresPaintInvalidation = true; 298 // For querying RenderLayer::compositingState()
299 299 // This code appears correct, since scrolling outside of layout happens duri ng activities that do not dirty compositing state.
300 if (box().view()->compositor()->inCompositingMode()) { 300 DisableCompositingQueryAsserts disabler;
301 // Hits in virtual/gpu/fast/canvas/canvas-scroll-path-into-view.html. 301 if (box().frameView()->isInPerformLayout())
302 DisableCompositingQueryAsserts disabler; 302 box().setShouldDoFullPaintInvalidation(true);
303 bool onlyScrolledCompositedLayers = scrollsOverflow() 303 else
304 && !layer()->hasVisibleNonLayerContent() 304 box().invalidatePaintUsingContainer(paintInvalidationContainer, layer()- >renderer()->previousPaintInvalidationRect(), InvalidationScroll);
305 && !layer()->hasNonCompositedChild()
306 && !layer()->hasBlockSelectionGapBounds()
307 && box().style()->backgroundLayers().attachment() != LocalBackground Attachment;
308
309 if (usesCompositedScrolling() || onlyScrolledCompositedLayers)
310 requiresPaintInvalidation = false;
311 }
312
313 // Just schedule a full paint invalidation of our object.
314 if (requiresPaintInvalidation) {
315 // For querying RenderLayer::compositingState()
316 // This code appears correct, since scrolling outside of layout happens during activities that do not dirty compositing state.
317 DisableCompositingQueryAsserts disabler;
318 if (box().frameView()->isInPerformLayout())
319 box().setShouldDoFullPaintInvalidation(true);
320 else
321 box().invalidatePaintUsingContainer(paintInvalidationContainer, laye r()->renderer()->previousPaintInvalidationRect(), InvalidationScroll);
322 }
323 305
324 // Schedule the scroll DOM event. 306 // Schedule the scroll DOM event.
325 if (box().node()) 307 if (box().node())
326 box().node()->document().enqueueScrollEventForNode(box().node()); 308 box().node()->document().enqueueScrollEventForNode(box().node());
327 } 309 }
328 310
329 IntPoint RenderLayerScrollableArea::scrollPosition() const 311 IntPoint RenderLayerScrollableArea::scrollPosition() const
330 { 312 {
331 return IntPoint(m_scrollOffset); 313 return IntPoint(m_scrollOffset);
332 } 314 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 return box().frame() ? box().frame()->eventHandler().lastKnownMousePosition( ) : IntPoint(); 363 return box().frame() ? box().frame()->eventHandler().lastKnownMousePosition( ) : IntPoint();
382 } 364 }
383 365
384 IntRect RenderLayerScrollableArea::scrollableAreaBoundingBox() const 366 IntRect RenderLayerScrollableArea::scrollableAreaBoundingBox() const
385 { 367 {
386 return box().absoluteBoundingBoxRect(); 368 return box().absoluteBoundingBoxRect();
387 } 369 }
388 370
389 bool RenderLayerScrollableArea::userInputScrollable(ScrollbarOrientation orienta tion) const 371 bool RenderLayerScrollableArea::userInputScrollable(ScrollbarOrientation orienta tion) const
390 { 372 {
391 if (box().isIntristicallyScrollable(orientation))
392 return true;
393
394 EOverflow overflowStyle = (orientation == HorizontalScrollbar) ? 373 EOverflow overflowStyle = (orientation == HorizontalScrollbar) ?
395 box().style()->overflowX() : box().style()->overflowY(); 374 box().style()->overflowX() : box().style()->overflowY();
396 return (overflowStyle == OSCROLL || overflowStyle == OAUTO || overflowStyle == OOVERLAY); 375 return (overflowStyle == OSCROLL || overflowStyle == OAUTO || overflowStyle == OOVERLAY);
397 } 376 }
398 377
399 bool RenderLayerScrollableArea::shouldPlaceVerticalScrollbarOnLeft() const 378 bool RenderLayerScrollableArea::shouldPlaceVerticalScrollbarOnLeft() const
400 { 379 {
401 return box().style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft(); 380 return box().style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft();
402 } 381 }
403 382
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 } 595 }
617 596
618 if (needsVerticalScrollbar && oldStyle && oldStyle->overflowY() == OSCROLL & & overflowY != OSCROLL) { 597 if (needsVerticalScrollbar && oldStyle && oldStyle->overflowY() == OSCROLL & & overflowY != OSCROLL) {
619 ASSERT(hasVerticalScrollbar()); 598 ASSERT(hasVerticalScrollbar());
620 m_vBar->setEnabled(true); 599 m_vBar->setEnabled(true);
621 } 600 }
622 } 601 }
623 602
624 bool RenderLayerScrollableArea::updateAfterCompositingChange() 603 bool RenderLayerScrollableArea::updateAfterCompositingChange()
625 { 604 {
626 layer()->updateScrollingStateAfterCompositingChange();
627 const bool layersChanged = m_topmostScrollChild != m_nextTopmostScrollChild; 605 const bool layersChanged = m_topmostScrollChild != m_nextTopmostScrollChild;
628 m_topmostScrollChild = m_nextTopmostScrollChild; 606 m_topmostScrollChild = m_nextTopmostScrollChild;
629 m_nextTopmostScrollChild = nullptr; 607 m_nextTopmostScrollChild = nullptr;
630 return layersChanged; 608 return layersChanged;
631 } 609 }
632 610
633 void RenderLayerScrollableArea::updateAfterOverflowRecalc() 611 void RenderLayerScrollableArea::updateAfterOverflowRecalc()
634 { 612 {
635 computeScrollDimensions(); 613 computeScrollDimensions();
636 if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) { 614 if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) {
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 if (m_scrollsOverflow) 881 if (m_scrollsOverflow)
904 frameView->addScrollableArea(this); 882 frameView->addScrollableArea(this);
905 else 883 else
906 frameView->removeScrollableArea(this); 884 frameView->removeScrollableArea(this);
907 } 885 }
908 886
909 void RenderLayerScrollableArea::updateCompositingLayersAfterScroll() 887 void RenderLayerScrollableArea::updateCompositingLayersAfterScroll()
910 { 888 {
911 RenderLayerCompositor* compositor = box().view()->compositor(); 889 RenderLayerCompositor* compositor = box().view()->compositor();
912 if (compositor->inCompositingMode()) { 890 if (compositor->inCompositingMode()) {
913 if (usesCompositedScrolling()) { 891 layer()->setNeedsCompositingInputsUpdate();
914 DisableCompositingQueryAsserts disabler;
915 ASSERT(layer()->hasCompositedLayerMapping());
916 layer()->compositedLayerMapping()->setNeedsGraphicsLayerUpdate(Graph icsLayerUpdateSubtree);
917 compositor->setNeedsCompositingUpdate(CompositingUpdateAfterGeometry Change);
918 } else {
919 layer()->setNeedsCompositingInputsUpdate();
920 }
921 } 892 }
922 } 893 }
923 894
924 bool RenderLayerScrollableArea::usesCompositedScrolling() const
925 {
926 // Scroll form controls on the main thread so they exhibit correct touch scr oll event bubbling
927 if (box().isIntristicallyScrollable(VerticalScrollbar) || box().isIntristica llyScrollable(HorizontalScrollbar))
928 return false;
929
930 // See https://codereview.chromium.org/176633003/ for the tests that fail wi thout this disabler.
931 DisableCompositingQueryAsserts disabler;
932 return layer()->hasCompositedLayerMapping() && layer()->compositedLayerMappi ng()->scrollingLayer();
933 }
934
935 static bool layerNeedsCompositedScrolling(const RenderLayer* layer) 895 static bool layerNeedsCompositedScrolling(const RenderLayer* layer)
936 { 896 {
937 return layer->scrollsOverflow() 897 return layer->scrollsOverflow()
938 && layer->compositor()->preferCompositingToLCDTextEnabled() 898 && layer->compositor()->preferCompositingToLCDTextEnabled()
939 && !layer->hasDescendantWithClipPath() 899 && !layer->hasDescendantWithClipPath()
940 && !layer->hasAncestorWithClipPath(); 900 && !layer->hasAncestorWithClipPath();
941 } 901 }
942 902
943 void RenderLayerScrollableArea::updateNeedsCompositedScrolling() 903 void RenderLayerScrollableArea::updateNeedsCompositedScrolling()
944 { 904 {
945 const bool needsCompositedScrolling = layerNeedsCompositedScrolling(layer()) ; 905 const bool needsCompositedScrolling = layerNeedsCompositedScrolling(layer()) ;
946 if (static_cast<bool>(m_needsCompositedScrolling) != needsCompositedScrollin g) { 906 if (static_cast<bool>(m_needsCompositedScrolling) != needsCompositedScrollin g) {
947 m_needsCompositedScrolling = needsCompositedScrolling; 907 m_needsCompositedScrolling = needsCompositedScrolling;
948 layer()->didUpdateNeedsCompositedScrolling(); 908 layer()->didUpdateNeedsCompositedScrolling();
949 } 909 }
950 } 910 }
951 911
952 void RenderLayerScrollableArea::setTopmostScrollChild(RenderLayer* scrollChild) 912 void RenderLayerScrollableArea::setTopmostScrollChild(RenderLayer* scrollChild)
953 { 913 {
954 // We only want to track the topmost scroll child for scrollable areas with 914 // We only want to track the topmost scroll child for scrollable areas with
955 // overlay scrollbars. 915 // overlay scrollbars.
956 if (!hasOverlayScrollbars()) 916 if (!hasOverlayScrollbars())
957 return; 917 return;
958 m_nextTopmostScrollChild = scrollChild; 918 m_nextTopmostScrollChild = scrollChild;
959 } 919 }
960 920
961 } // namespace blink 921 } // namespace blink
OLDNEW
« no previous file with comments | « sky/engine/core/rendering/RenderLayerScrollableArea.h ('k') | sky/engine/platform/scroll/ScrollableArea.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698