Chromium Code Reviews| Index: Source/core/page/scrolling/ScrollingCoordinator.cpp |
| diff --git a/Source/core/page/scrolling/ScrollingCoordinator.cpp b/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| index 21d9228c1f761e6b57241ab688d372f7e14188f2..5f9c8382f31934db861512899ac80daf2f9494d3 100644 |
| --- a/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| +++ b/Source/core/page/scrolling/ScrollingCoordinator.cpp |
| @@ -56,6 +56,7 @@ |
| #include "platform/scroll/ScrollAnimator.h" |
| #include "platform/scroll/ScrollbarTheme.h" |
| #include "public/platform/Platform.h" |
| +#include "public/platform/WebCompositorAnimationTimeline.h" |
| #include "public/platform/WebCompositorSupport.h" |
| #include "public/platform/WebLayerPositionConstraint.h" |
| #include "public/platform/WebScrollbarLayer.h" |
| @@ -93,6 +94,12 @@ ScrollingCoordinator::ScrollingCoordinator(Page* page) |
| , m_wasFrameScrollable(false) |
| , m_lastMainThreadScrollingReasons(0) |
| { |
| + if (RuntimeEnabledFeatures::compositorAnimationTimelinesEnabled() && Platform::current()->compositorSupport()) { |
|
Ian Vollick
2015/07/10 03:06:45
AFAICT, most of the time we assume that compositor
loyso (OOO)
2015/07/22 05:24:23
Done.
|
| + ASSERT(m_page); |
| + ASSERT(m_page->mainFrame()->isLocalFrame()); |
| + m_programmaticScrollAnimatorTimeline = adoptPtr(Platform::current()->compositorSupport()->createAnimationTimeline()); |
| + m_page->chromeClient().attachCompositorAnimationTimeline(m_programmaticScrollAnimatorTimeline.get(), toLocalFrame(m_page->mainFrame())); |
| + } |
| } |
| ScrollingCoordinator::~ScrollingCoordinator() |
| @@ -435,7 +442,7 @@ bool ScrollingCoordinator::scrollableAreaScrollLayerDidChange(ScrollableArea* sc |
| if (m_page->settings().rootLayerScrolls() && isForRootLayer(scrollableArea)) |
| m_page->chromeClient().registerViewportLayers(); |
| - scrollableArea->layerForScrollingDidChange(); |
| + scrollableArea->layerForScrollingDidChange(m_programmaticScrollAnimatorTimeline.get()); |
| return !!webLayer; |
| } |
| @@ -723,6 +730,13 @@ void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainTh |
| void ScrollingCoordinator::willBeDestroyed() |
| { |
| ASSERT(m_page); |
| + |
| + if (m_programmaticScrollAnimatorTimeline) { |
| + ASSERT(m_page->mainFrame()->isLocalFrame()); |
| + m_page->chromeClient().detachCompositorAnimationTimeline(m_programmaticScrollAnimatorTimeline.get(), toLocalFrame(m_page->mainFrame())); |
| + m_programmaticScrollAnimatorTimeline.clear(); |
| + } |
| + |
| m_page = nullptr; |
| for (const auto& scrollbar : m_horizontalScrollbars) |
| GraphicsLayer::unregisterContentsLayer(scrollbar.value->layer()); |