bool ScrollingCoordinator::requestScrollPositionUpdate(FrameView* frameView, const IntPoint& scrollPosition) { ASSERT(isMainThread()); ASSERT(m_page); if (!coordinatesScrollingForFrameView(frameView)) return false; #if ENABLE(THREADED_SCROLLING) // Update the main frame scroll position locally before asking the scrolling thread to scroll, // since FrameView expects scroll position updates to happen synchronously. updateMainFrameScrollPosition(scrollPosition); if (frameView->frame()->document()->inPageCache()) { // If this frame view's document is being put into the page cache, we don't want to update our // main frame scroll position. return true; } m_scrollingTreeState->setRequestedScrollPosition(scrollPosition); scheduleTreeStateCommit(); return true; #else UNUSED_PARAM(scrollPosition); return false; #endif }
void ScrollingCoordinator::scheduleUpdateMainFrameScrollPosition(const IntPoint& scrollPosition, bool programmaticScroll, SetOrSyncScrollingLayerPosition scrollingLayerPositionAction) { if (m_updateMainFrameScrollPositionTimer.isActive()) { if (m_scheduledUpdateIsProgrammaticScroll == programmaticScroll && m_scheduledScrollingLayerPositionAction == scrollingLayerPositionAction) { m_scheduledUpdateScrollPosition = scrollPosition; return; } // If the parameters don't match what was previosly scheduled, dispatch immediately. m_updateMainFrameScrollPositionTimer.stop(); updateMainFrameScrollPosition(m_scheduledUpdateScrollPosition, m_scheduledUpdateIsProgrammaticScroll, m_scheduledScrollingLayerPositionAction); updateMainFrameScrollPosition(scrollPosition, programmaticScroll, scrollingLayerPositionAction); return; } m_scheduledUpdateScrollPosition = scrollPosition; m_scheduledUpdateIsProgrammaticScroll = programmaticScroll; m_scheduledScrollingLayerPositionAction = scrollingLayerPositionAction; m_updateMainFrameScrollPositionTimer.startOneShot(0); }
void ScrollingCoordinator::updateMainFrameScrollPositionTimerFired(Timer<ScrollingCoordinator>*) { updateMainFrameScrollPosition(m_scheduledUpdateScrollPosition, m_scheduledUpdateIsProgrammaticScroll, m_scheduledScrollingLayerPositionAction); }