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

Unified Diff: Source/WebCore/page/scrolling/ScrollingCoordinator.h

Issue 13665002: Fold ScrollingCoordinatorChromium into ScrollingCoordinator and devirtualize (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/page/scrolling/ScrollingCoordinator.h
diff --git a/Source/WebCore/page/scrolling/ScrollingCoordinator.h b/Source/WebCore/page/scrolling/ScrollingCoordinator.h
index 2ecb46463b3cb1ef2c0756ce4ba6673fd8884988..382c6d7f20f43b97a9a29fe6dec18f1fe0ba377a 100644
--- a/Source/WebCore/page/scrolling/ScrollingCoordinator.h
+++ b/Source/WebCore/page/scrolling/ScrollingCoordinator.h
@@ -31,25 +31,15 @@
#include "PlatformWheelEvent.h"
#include "RenderObject.h"
#include "ScrollTypes.h"
-#include "Timer.h"
-#include <wtf/Forward.h>
-#if ENABLE(THREADED_SCROLLING)
-#include <wtf/HashMap.h>
-#include <wtf/ThreadSafeRefCounted.h>
-#include <wtf/Threading.h>
-#endif
-
-#if PLATFORM(MAC)
-#include <wtf/RetainPtr.h>
-#endif
+namespace WebKit {
+class WebLayer;
+class WebScrollbarLayer;
+}
namespace WebCore {
typedef unsigned MainThreadScrollingReasons;
-typedef uint64_t ScrollingNodeID;
-
-enum ScrollingNodeType { ScrollingNode, FixedNode, StickyNode };
class Document;
class Frame;
@@ -60,31 +50,18 @@ class Region;
class ScrollableArea;
class ViewportConstraints;
-#if ENABLE(THREADED_SCROLLING)
-class ScrollingTree;
-#endif
-
-enum SetOrSyncScrollingLayerPosition {
- SetScrollingLayerPosition,
- SyncScrollingLayerPosition
-};
-
-class ScrollingCoordinator : public ThreadSafeRefCounted<ScrollingCoordinator> {
+class ScrollingCoordinator : public RefCounted<ScrollingCoordinator> {
public:
static PassRefPtr<ScrollingCoordinator> create(Page*);
- virtual ~ScrollingCoordinator();
-
- virtual void pageDestroyed();
+ ~ScrollingCoordinator();
-#if ENABLE(THREADED_SCROLLING)
- virtual ScrollingTree* scrollingTree() const { return 0; }
-#endif
+ void pageDestroyed();
// Return whether this scrolling coordinator handles scrolling for the given frame view.
bool coordinatesScrollingForFrameView(FrameView*) const;
// Should be called whenever the given frame view has been laid out.
- virtual void frameViewLayoutUpdated(FrameView*) { }
+ void frameViewLayoutUpdated(FrameView*);
// Should be called whenever a wheel event handler is added or removed in the
// frame view's underlying document.
@@ -97,64 +74,33 @@ public:
void frameViewFixedObjectsDidChange(FrameView*);
// Should be called whenever the root layer for the given frame view changes.
- virtual void frameViewRootLayerDidChange(FrameView*);
+ void frameViewRootLayerDidChange(FrameView*);
// Return whether this scrolling coordinator can keep fixed position layers fixed to their
// containers while scrolling.
- virtual bool supportsFixedPositionLayers() const { return false; }
+ bool supportsFixedPositionLayers() const { return true; }
-#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
+#if OS(DARWIN)
// Dispatched by the scrolling tree during handleWheelEvent. This is required as long as scrollbars are painted on the main thread.
void handleWheelEventPhase(PlatformWheelEventPhase);
#endif
- // Force all scroll layer position updates to happen on the main thread.
- void setForceMainThreadScrollLayerPositionUpdates(bool);
-
- // These virtual functions are currently unique to the threaded scrolling architecture.
- // Their meaningful implementations are in ScrollingCoordinatorMac.
- virtual void commitTreeStateIfNeeded() { }
- virtual bool requestScrollPositionUpdate(FrameView*, const IntPoint&) { return false; }
- virtual bool handleWheelEvent(FrameView*, const PlatformWheelEvent&) { return true; }
- virtual ScrollingNodeID attachToStateTree(ScrollingNodeType, ScrollingNodeID newNodeID, ScrollingNodeID /*parentID*/) { return newNodeID; }
- virtual void detachFromStateTree(ScrollingNodeID) { }
- virtual void clearStateTree() { }
- virtual void updateViewportConstrainedNode(ScrollingNodeID, const ViewportConstraints&, GraphicsLayer*) { }
- virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*counterScrollingLayer*/) { }
- virtual void syncChildPositions(const LayoutRect&) { }
- virtual String scrollingStateTreeAsText() const;
- virtual bool isRubberBandInProgress() const { return false; }
- virtual bool rubberBandsAtBottom() const { return false; }
- virtual void setRubberBandsAtBottom(bool) { }
- virtual bool rubberBandsAtTop() const { return false; }
- virtual void setRubberBandsAtTop(bool) { }
-
- // Generated a unique id for scroll layers.
- ScrollingNodeID uniqueScrollLayerID();
-
- // Dispatched by the scrolling tree whenever the main frame scroll position changes.
- void scheduleUpdateMainFrameScrollPosition(const IntPoint&, bool programmaticScroll, SetOrSyncScrollingLayerPosition);
- void updateMainFrameScrollPosition(const IntPoint&, bool programmaticScroll, SetOrSyncScrollingLayerPosition);
-
enum MainThreadScrollingReasonFlags {
- ForcedOnMainThread = 1 << 0,
- HasSlowRepaintObjects = 1 << 1,
- HasViewportConstrainedObjectsWithoutSupportingFixedLayers = 1 << 2,
- HasNonLayerViewportConstrainedObjects = 1 << 3,
- IsImageDocument = 1 << 4
+ HasSlowRepaintObjects = 1 << 0,
+ HasViewportConstrainedObjectsWithoutSupportingFixedLayers = 1 << 1,
+ HasNonLayerViewportConstrainedObjects = 1 << 2,
+ IsImageDocument = 1 << 3
};
MainThreadScrollingReasons mainThreadScrollingReasons() const;
bool shouldUpdateScrollLayerPositionOnMainThread() const { return mainThreadScrollingReasons() != 0; }
- // These virtual functions are currently unique to Chromium's WebLayer approach. Their meaningful
- // implementations are in ScrollingCoordinatorChromium.
- virtual void willDestroyScrollableArea(ScrollableArea*) { }
- virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*) { }
- virtual void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation) { }
- virtual void setLayerIsContainerForFixedPositionLayers(GraphicsLayer*, bool) { }
- virtual void updateLayerPositionConstraint(RenderLayer*) { }
- virtual void touchEventTargetRectsDidChange(const Document*) { }
+ void willDestroyScrollableArea(ScrollableArea*);
+ void scrollableAreaScrollLayerDidChange(ScrollableArea*);
+ void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation);
+ void setLayerIsContainerForFixedPositionLayers(GraphicsLayer*, bool);
+ void updateLayerPositionConstraint(RenderLayer*);
+ void touchEventTargetRectsDidChange(const Document*);
#if ENABLE(TOUCH_EVENT_TRACKING)
void computeAbsoluteTouchEventTargetRects(const Document*, Vector<IntRect>&);
@@ -168,11 +114,9 @@ public:
protected:
explicit ScrollingCoordinator(Page*);
-#if USE(ACCELERATED_COMPOSITING)
static GraphicsLayer* scrollLayerForScrollableArea(ScrollableArea*);
static GraphicsLayer* horizontalScrollbarLayerForScrollableArea(ScrollableArea*);
static GraphicsLayer* verticalScrollbarLayerForScrollableArea(ScrollableArea*);
-#endif
unsigned computeCurrentWheelEventHandlerCount();
GraphicsLayer* scrollLayerForFrameView(FrameView*);
@@ -181,20 +125,26 @@ protected:
Page* m_page;
private:
- virtual void recomputeWheelEventHandlerCountForFrameView(FrameView*) { }
- virtual void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons) { }
+ void recomputeWheelEventHandlerCountForFrameView(FrameView*);
+ void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons);
- virtual bool hasVisibleSlowRepaintViewportConstrainedObjects(FrameView*) const;
+ bool hasVisibleSlowRepaintViewportConstrainedObjects(FrameView*) const;
void updateShouldUpdateScrollLayerPositionOnMainThread();
- void updateMainFrameScrollPositionTimerFired(Timer<ScrollingCoordinator>*);
+ static WebKit::WebLayer* scrollingWebLayerForScrollableArea(ScrollableArea*);
+
+ void setNonFastScrollableRegion(const Region&);
+ void setTouchEventTargetRects(const Vector<IntRect>&);
+ void setWheelEventHandlerCount(unsigned);
+
+ WebKit::WebScrollbarLayer* addWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation, PassOwnPtr<WebKit::WebScrollbarLayer>);
+ WebKit::WebScrollbarLayer* getWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation);
+ void removeWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation);
- Timer<ScrollingCoordinator> m_updateMainFrameScrollPositionTimer;
- IntPoint m_scheduledUpdateScrollPosition;
- bool m_scheduledUpdateIsProgrammaticScroll;
- SetOrSyncScrollingLayerPosition m_scheduledScrollingLayerPositionAction;
+ typedef HashMap<ScrollableArea*, OwnPtr<WebKit::WebScrollbarLayer> > ScrollbarMap;
+ ScrollbarMap m_horizontalScrollbars;
+ ScrollbarMap m_verticalScrollbars;
- bool m_forceMainThreadScrollLayerPositionUpdates;
};
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698