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

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 2659183002: [RootLayerScrolls] Fix frame scrolling layer in ScrollingCoordinator (Closed)
Patch Set: Created 3 years, 10 months 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) 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 2578 matching lines...) Expand 10 before | Expand all | Expand 10 after
2589 2589
2590 IntRect FrameView::scrollableAreaBoundingBox() const { 2590 IntRect FrameView::scrollableAreaBoundingBox() const {
2591 LayoutPartItem ownerLayoutItem = frame().ownerLayoutItem(); 2591 LayoutPartItem ownerLayoutItem = frame().ownerLayoutItem();
2592 if (ownerLayoutItem.isNull()) 2592 if (ownerLayoutItem.isNull())
2593 return frameRect(); 2593 return frameRect();
2594 2594
2595 return ownerLayoutItem.absoluteContentQuad(TraverseDocumentBoundaries) 2595 return ownerLayoutItem.absoluteContentQuad(TraverseDocumentBoundaries)
2596 .enclosingBoundingBox(); 2596 .enclosingBoundingBox();
2597 } 2597 }
2598 2598
2599 bool FrameView::isScrollable() { 2599 bool FrameView::isScrollable() const {
2600 return getScrollingReasons() == Scrollable; 2600 return getScrollingReasons() == Scrollable;
2601 } 2601 }
2602 2602
2603 bool FrameView::isProgrammaticallyScrollable() { 2603 bool FrameView::isProgrammaticallyScrollable() {
2604 return !m_inUpdateScrollbars; 2604 return !m_inUpdateScrollbars;
2605 } 2605 }
2606 2606
2607 FrameView::ScrollingReasons FrameView::getScrollingReasons() const { 2607 FrameView::ScrollingReasons FrameView::getScrollingReasons() const {
2608 // Check for: 2608 // Check for:
2609 // 1) If there an actual overflow. 2609 // 1) If there an actual overflow.
(...skipping 21 matching lines...) Expand all
2631 calculateScrollbarModes(horizontalMode, verticalMode, 2631 calculateScrollbarModes(horizontalMode, verticalMode,
2632 RulesFromWebContentOnly); 2632 RulesFromWebContentOnly);
2633 if (horizontalMode == ScrollbarAlwaysOff && 2633 if (horizontalMode == ScrollbarAlwaysOff &&
2634 verticalMode == ScrollbarAlwaysOff) 2634 verticalMode == ScrollbarAlwaysOff)
2635 return NotScrollableExplicitlyDisabled; 2635 return NotScrollableExplicitlyDisabled;
2636 2636
2637 return Scrollable; 2637 return Scrollable;
2638 } 2638 }
2639 2639
2640 void FrameView::updateParentScrollableAreaSet() { 2640 void FrameView::updateParentScrollableAreaSet() {
2641 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled())
2642 return;
2643
2641 // That ensures that only inner frames are cached. 2644 // That ensures that only inner frames are cached.
2642 FrameView* parentFrameView = this->parentFrameView(); 2645 FrameView* parentFrameView = this->parentFrameView();
2643 if (!parentFrameView) 2646 if (!parentFrameView)
2644 return; 2647 return;
2645 2648
2646 if (!isScrollable()) { 2649 if (!isScrollable()) {
2647 parentFrameView->removeScrollableArea(this); 2650 parentFrameView->removeScrollableArea(this);
2648 return; 2651 return;
2649 } 2652 }
2650 2653
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
3656 updateParentScrollableAreaSet(); 3659 updateParentScrollableAreaSet();
3657 setupRenderThrottling(); 3660 setupRenderThrottling();
3658 3661
3659 if (parentFrameView()) 3662 if (parentFrameView())
3660 m_subtreeThrottled = parentFrameView()->canThrottleRendering(); 3663 m_subtreeThrottled = parentFrameView()->canThrottleRendering();
3661 } 3664 }
3662 3665
3663 void FrameView::removeChild(Widget* child) { 3666 void FrameView::removeChild(Widget* child) {
3664 ASSERT(child->parent() == this); 3667 ASSERT(child->parent() == this);
3665 3668
3666 if (child->isFrameView()) 3669 if (child->isFrameView() &&
3670 !RuntimeEnabledFeatures::rootLayerScrollingEnabled())
3667 removeScrollableArea(toFrameView(child)); 3671 removeScrollableArea(toFrameView(child));
3668 3672
3669 child->setParent(0); 3673 child->setParent(0);
3670 m_children.remove(child); 3674 m_children.remove(child);
3671 } 3675 }
3672 3676
3673 bool FrameView::visualViewportSuppliesScrollbars() { 3677 bool FrameView::visualViewportSuppliesScrollbars() {
3674 // On desktop, we always use the layout viewport's scrollbars. 3678 // On desktop, we always use the layout viewport's scrollbars.
3675 if (!m_frame->settings() || !m_frame->settings()->getViewportEnabled() || 3679 if (!m_frame->settings() || !m_frame->settings()->getViewportEnabled() ||
3676 !m_frame->document() || !m_frame->host()) 3680 !m_frame->document() || !m_frame->host())
(...skipping 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after
4866 if (!page()->settings().getThreadedScrollingEnabled()) 4870 if (!page()->settings().getThreadedScrollingEnabled())
4867 reasons |= MainThreadScrollingReason::kThreadedScrollingDisabled; 4871 reasons |= MainThreadScrollingReason::kThreadedScrollingDisabled;
4868 4872
4869 if (!frame.isLocalFrame()) 4873 if (!frame.isLocalFrame())
4870 return; 4874 return;
4871 4875
4872 if (!toLocalFrame(frame).view()->layerForScrolling()) 4876 if (!toLocalFrame(frame).view()->layerForScrolling())
4873 return; 4877 return;
4874 4878
4875 reasons |= toLocalFrame(frame).view()->mainThreadScrollingReasonsPerFrame(); 4879 reasons |= toLocalFrame(frame).view()->mainThreadScrollingReasonsPerFrame();
4876 if (WebLayer* scrollLayer = 4880 if (GraphicsLayer* layerForScrolling = toLocalFrame(frame)
4877 toLocalFrame(frame).view()->layerForScrolling()->platformLayer()) { 4881 .view()
4878 if (reasons) { 4882 ->layoutViewportScrollableArea()
4879 scrollLayer->addMainThreadScrollingReasons(reasons); 4883 ->layerForScrolling()) {
4880 } else { 4884 if (WebLayer* platformLayerForScrolling =
4881 // Clear all main thread scrolling reasons except the one that's set 4885 layerForScrolling->platformLayer()) {
4882 // if there is a running scroll animation. 4886 if (reasons) {
4883 scrollLayer->clearMainThreadScrollingReasons( 4887 platformLayerForScrolling->addMainThreadScrollingReasons(reasons);
4884 ~MainThreadScrollingReason::kHandlingScrollFromMainThread); 4888 } else {
4889 // Clear all main thread scrolling reasons except the one that's set
4890 // if there is a running scroll animation.
4891 platformLayerForScrolling->clearMainThreadScrollingReasons(
4892 ~MainThreadScrollingReason::kHandlingScrollFromMainThread);
4893 }
4885 } 4894 }
4886 } 4895 }
4887 4896
4888 Frame* child = frame.tree().firstChild(); 4897 Frame* child = frame.tree().firstChild();
4889 while (child) { 4898 while (child) {
4890 updateSubFrameScrollOnMainReason(*child, reasons); 4899 updateSubFrameScrollOnMainReason(*child, reasons);
4891 child = child->tree().nextSibling(); 4900 child = child->tree().nextSibling();
4892 } 4901 }
4893 4902
4894 if (frame.isMainFrame()) 4903 if (frame.isMainFrame())
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
5070 std::unique_ptr<CompositorAnimationTimeline> timeline) { 5079 std::unique_ptr<CompositorAnimationTimeline> timeline) {
5071 m_animationTimeline = std::move(timeline); 5080 m_animationTimeline = std::move(timeline);
5072 } 5081 }
5073 5082
5074 void FrameView::setAnimationHost( 5083 void FrameView::setAnimationHost(
5075 std::unique_ptr<CompositorAnimationHost> host) { 5084 std::unique_ptr<CompositorAnimationHost> host) {
5076 m_animationHost = std::move(host); 5085 m_animationHost = std::move(host);
5077 } 5086 }
5078 5087
5079 } // namespace blink 5088 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698