ThreadedScrollingTree.h [plain text]
#pragma once
#if ENABLE(ASYNC_SCROLLING)
#include "ScrollingStateTree.h"
#include "ScrollingTree.h"
#include <wtf/Condition.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class AsyncScrollingCoordinator;
class ThreadedScrollingTree : public ScrollingTree {
public:
virtual ~ThreadedScrollingTree();
void commitTreeState(std::unique_ptr<ScrollingStateTree>) override;
ScrollingEventResult handleWheelEvent(const PlatformWheelEvent&) override;
ScrollingEventResult tryToHandleWheelEvent(const PlatformWheelEvent&) override;
void invalidate() override;
void incrementPendingCommitCount();
void decrementPendingCommitCount();
protected:
explicit ThreadedScrollingTree(AsyncScrollingCoordinator&);
void scrollingTreeNodeDidScroll(ScrollingTreeScrollingNode&, ScrollingLayerPositionAction = ScrollingLayerPositionAction::Sync) override;
#if PLATFORM(MAC)
void handleWheelEventPhase(PlatformWheelEventPhase) override;
void setActiveScrollSnapIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex) override;
void deferWheelEventTestCompletionForReason(WheelEventTestMonitor::ScrollableAreaIdentifier, WheelEventTestMonitor::DeferReason) override;
void removeWheelEventTestCompletionDeferralForReason(WheelEventTestMonitor::ScrollableAreaIdentifier, WheelEventTestMonitor::DeferReason) override;
#endif
#if PLATFORM(COCOA)
void currentSnapPointIndicesDidChange(ScrollingNodeID, unsigned horizontal, unsigned vertical) override;
#endif
void reportExposedUnfilledArea(MonotonicTime, unsigned unfilledArea) override;
void reportSynchronousScrollingReasonsChanged(MonotonicTime, SynchronousScrollingReasons) override;
private:
bool isThreadedScrollingTree() const override { return true; }
void applyLayerPositions() override;
RefPtr<AsyncScrollingCoordinator> m_scrollingCoordinator;
void waitForPendingCommits();
Lock m_pendingCommitCountMutex;
unsigned m_pendingCommitCount { 0 };
Condition m_commitCondition;
};
}
SPECIALIZE_TYPE_TRAITS_SCROLLING_TREE(WebCore::ThreadedScrollingTree, isThreadedScrollingTree())
#endif // ENABLE(ASYNC_SCROLLING)