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()); |