summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-05 22:08:21 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-05 22:08:21 +0000
commit8db2213c07f4d0bf8bc31ec6a3c68ea95b2d5177 (patch)
treef984b0e45461f8de5156be1ff6492a989f6369de /cc
parent24302549a7ab93baed7dd4e9af470b3255c6cdbf (diff)
downloadchromium_src-8db2213c07f4d0bf8bc31ec6a3c68ea95b2d5177.zip
chromium_src-8db2213c07f4d0bf8bc31ec6a3c68ea95b2d5177.tar.gz
chromium_src-8db2213c07f4d0bf8bc31ec6a3c68ea95b2d5177.tar.bz2
Roll cc snapshot up to 127605
TBR=nduca@chromium.org BUG= Review URL: https://chromiumcodereview.appspot.com/10907075 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155034 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/CCFrameRateController.cpp32
-rw-r--r--cc/CCFrameRateController.h2
-rw-r--r--cc/CCLayerTreeHost.cpp2
-rw-r--r--cc/CCLayerTreeHostImpl.cpp17
-rw-r--r--cc/CCLayerTreeHostImpl.h3
-rw-r--r--cc/CCLayerTreeHostImplTest.cpp52
-rw-r--r--cc/CCLayerTreeHostTest.cpp14
-rw-r--r--cc/CCScheduler.cpp25
-rw-r--r--cc/CCScheduler.h4
-rw-r--r--cc/CCSchedulerStateMachine.cpp43
-rw-r--r--cc/CCSchedulerStateMachine.h3
-rw-r--r--cc/CCSchedulerStateMachineTest.cpp46
-rw-r--r--cc/CCSchedulerTest.cpp14
-rw-r--r--cc/CCSingleThreadProxy.h1
-rw-r--r--cc/CCThreadProxy.cpp24
-rw-r--r--cc/CCThreadProxy.h3
-rw-r--r--cc/LayerChromium.cpp13
-rw-r--r--cc/LayerChromium.h15
18 files changed, 246 insertions, 67 deletions
diff --git a/cc/CCFrameRateController.cpp b/cc/CCFrameRateController.cpp
index b264bc2..15ff94c 100644
--- a/cc/CCFrameRateController.cpp
+++ b/cc/CCFrameRateController.cpp
@@ -11,6 +11,14 @@
#include "TraceEvent.h"
#include <wtf/CurrentTime.h>
+namespace {
+
+// This will be the maximum number of pending frames unless
+// CCFrameRateController::setMaxFramesPending is called.
+const int defaultMaxFramesPending = 2;
+
+}
+
namespace WebCore {
class CCFrameRateControllerTimeSourceAdapter : public CCTimeSourceClient {
@@ -32,9 +40,10 @@ private:
CCFrameRateController::CCFrameRateController(PassRefPtr<CCTimeSource> timer)
: m_client(0)
, m_numFramesPending(0)
- , m_maxFramesPending(0)
+ , m_maxFramesPending(defaultMaxFramesPending)
, m_timeSource(timer)
, m_active(false)
+ , m_swapBuffersCompleteSupported(true)
, m_isTimeSourceThrottling(true)
{
m_timeSourceClientAdapter = CCFrameRateControllerTimeSourceAdapter::create(this);
@@ -44,8 +53,9 @@ CCFrameRateController::CCFrameRateController(PassRefPtr<CCTimeSource> timer)
CCFrameRateController::CCFrameRateController(CCThread* thread)
: m_client(0)
, m_numFramesPending(0)
- , m_maxFramesPending(0)
+ , m_maxFramesPending(defaultMaxFramesPending)
, m_active(false)
+ , m_swapBuffersCompleteSupported(true)
, m_isTimeSourceThrottling(false)
{
m_manualTicker = adoptPtr(new CCTimer(thread, this));
@@ -76,6 +86,7 @@ void CCFrameRateController::setActive(bool active)
void CCFrameRateController::setMaxFramesPending(int maxFramesPending)
{
+ ASSERT(maxFramesPending > 0);
m_maxFramesPending = maxFramesPending;
}
@@ -85,12 +96,17 @@ void CCFrameRateController::setTimebaseAndInterval(double timebase, double inter
m_timeSource->setTimebaseAndInterval(timebase, intervalSeconds);
}
+void CCFrameRateController::setSwapBuffersCompleteSupported(bool supported)
+{
+ m_swapBuffersCompleteSupported = supported;
+}
+
void CCFrameRateController::onTimerTick()
{
ASSERT(m_active);
// Don't forward the tick if we have too many frames in flight.
- if (m_maxFramesPending && m_numFramesPending >= m_maxFramesPending) {
+ if (m_numFramesPending >= m_maxFramesPending) {
TRACE_EVENT0("cc", "CCFrameRateController::onTimerTickButMaxFramesPending");
return;
}
@@ -98,8 +114,7 @@ void CCFrameRateController::onTimerTick()
if (m_client)
m_client->vsyncTick();
- if (!m_isTimeSourceThrottling
- && (!m_maxFramesPending || m_numFramesPending < m_maxFramesPending))
+ if (m_swapBuffersCompleteSupported && !m_isTimeSourceThrottling && m_numFramesPending < m_maxFramesPending)
postManualTick();
}
@@ -116,11 +131,16 @@ void CCFrameRateController::onTimerFired()
void CCFrameRateController::didBeginFrame()
{
- m_numFramesPending++;
+ if (m_swapBuffersCompleteSupported)
+ m_numFramesPending++;
+ else if (!m_isTimeSourceThrottling)
+ postManualTick();
}
void CCFrameRateController::didFinishFrame()
{
+ ASSERT(m_swapBuffersCompleteSupported);
+
m_numFramesPending--;
if (!m_isTimeSourceThrottling)
postManualTick();
diff --git a/cc/CCFrameRateController.h b/cc/CCFrameRateController.h
index 0aa3fdf..a609c38 100644
--- a/cc/CCFrameRateController.h
+++ b/cc/CCFrameRateController.h
@@ -50,6 +50,7 @@ public:
double nextTickTimeIfActivated();
void setTimebaseAndInterval(double timebase, double intervalSeconds);
+ void setSwapBuffersCompleteSupported(bool);
protected:
friend class CCFrameRateControllerTimeSourceAdapter;
@@ -66,6 +67,7 @@ protected:
RefPtr<CCTimeSource> m_timeSource;
OwnPtr<CCFrameRateControllerTimeSourceAdapter> m_timeSourceClientAdapter;
bool m_active;
+ bool m_swapBuffersCompleteSupported;
// Members for unthrottled frame-rate.
bool m_isTimeSourceThrottling;
diff --git a/cc/CCLayerTreeHost.cpp b/cc/CCLayerTreeHost.cpp
index f236963..e126f15 100644
--- a/cc/CCLayerTreeHost.cpp
+++ b/cc/CCLayerTreeHost.cpp
@@ -638,7 +638,7 @@ void CCLayerTreeHost::applyScrollAndScale(const CCScrollAndScaleSet& info)
if (layer == rootScrollLayer)
rootScrollDelta += info.scrolls[i].scrollDelta;
else
- layer->scrollBy(info.scrolls[i].scrollDelta);
+ layer->setScrollPosition(layer->scrollPosition() + info.scrolls[i].scrollDelta);
}
if (!rootScrollDelta.isZero() || info.pageScaleDelta != 1)
m_client->applyScrollAndScale(rootScrollDelta, info.pageScaleDelta);
diff --git a/cc/CCLayerTreeHostImpl.cpp b/cc/CCLayerTreeHostImpl.cpp
index a06bff9..9c78cff 100644
--- a/cc/CCLayerTreeHostImpl.cpp
+++ b/cc/CCLayerTreeHostImpl.cpp
@@ -148,6 +148,10 @@ void CCLayerTreeHostImpl::commitComplete()
bool CCLayerTreeHostImpl::canDraw()
{
+ // Note: If you are changing this function or any other function that might
+ // affect the result of canDraw, make sure to call m_client->onCanDrawStateChanged
+ // in the proper places and update the notifyIfCanDrawChanged test.
+
if (!m_rootLayerImpl) {
TRACE_EVENT_INSTANT0("cc", "CCLayerTreeHostImpl::canDraw no root layer");
return false;
@@ -510,6 +514,7 @@ void CCLayerTreeHostImpl::releaseContentsTextures()
m_resourceProvider->deleteOwnedResources(CCRenderer::ContentPool);
m_contentsTexturesPurged = true;
m_client->setNeedsCommitOnImplThread();
+ m_client->onCanDrawStateChanged(canDraw());
}
void CCLayerTreeHostImpl::setMemoryAllocationLimitBytes(size_t bytes)
@@ -649,6 +654,8 @@ void CCLayerTreeHostImpl::setRootLayer(PassOwnPtr<CCLayerImpl> layer)
m_currentlyScrollingLayerImpl = CCLayerTreeHostCommon::findLayerInSubtree(m_rootLayerImpl.get(), m_scrollingLayerIdFromPreviousTree);
m_scrollingLayerIdFromPreviousTree = -1;
+
+ m_client->onCanDrawStateChanged(canDraw());
}
PassOwnPtr<CCLayerImpl> CCLayerTreeHostImpl::detachLayerTree()
@@ -711,9 +718,17 @@ bool CCLayerTreeHostImpl::initializeRenderer(PassOwnPtr<CCGraphicsContext> conte
if (!m_visible && m_renderer)
m_renderer->setVisible(m_visible);
+ m_client->onCanDrawStateChanged(canDraw());
+
return m_renderer;
}
+void CCLayerTreeHostImpl::resetContentsTexturesPurged()
+{
+ m_contentsTexturesPurged = false;
+ m_client->onCanDrawStateChanged(canDraw());
+}
+
void CCLayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, const IntSize& deviceViewportSize)
{
if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_deviceViewportSize)
@@ -726,6 +741,8 @@ void CCLayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, con
if (m_renderer)
m_renderer->viewportChanged();
+
+ m_client->onCanDrawStateChanged(canDraw());
}
static void adjustScrollsForPageScaleChange(CCLayerImpl* layerImpl, float pageScaleChange)
diff --git a/cc/CCLayerTreeHostImpl.h b/cc/CCLayerTreeHostImpl.h
index 44a3cae..4061d11 100644
--- a/cc/CCLayerTreeHostImpl.h
+++ b/cc/CCLayerTreeHostImpl.h
@@ -37,6 +37,7 @@ public:
virtual void didLoseContextOnImplThread() = 0;
virtual void onSwapBuffersCompleteOnImplThread() = 0;
virtual void onVSyncParametersChanged(double monotonicTimebase, double intervalInSeconds) = 0;
+ virtual void onCanDrawStateChanged(bool canDraw) = 0;
virtual void setNeedsRedrawOnImplThread() = 0;
virtual void setNeedsCommitOnImplThread() = 0;
virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr<CCAnimationEventsVector>, double wallClockTime) = 0;
@@ -140,7 +141,7 @@ public:
void setSourceFrameNumber(int frameNumber) { m_sourceFrameNumber = frameNumber; }
bool contentsTexturesPurged() const { return m_contentsTexturesPurged; }
- void resetContentsTexturesPurged() { m_contentsTexturesPurged = false; }
+ void resetContentsTexturesPurged();
size_t memoryAllocationLimitBytes() const { return m_memoryAllocationLimitBytes; }
void setViewportSize(const IntSize& layoutViewportSize, const IntSize& deviceViewportSize);
diff --git a/cc/CCLayerTreeHostImplTest.cpp b/cc/CCLayerTreeHostImplTest.cpp
index f46cfda..8dc6752 100644
--- a/cc/CCLayerTreeHostImplTest.cpp
+++ b/cc/CCLayerTreeHostImplTest.cpp
@@ -50,7 +50,8 @@ namespace {
class CCLayerTreeHostImplTest : public testing::Test, public CCLayerTreeHostImplClient {
public:
CCLayerTreeHostImplTest()
- : m_didRequestCommit(false)
+ : m_onCanDrawStateChangedCalled(false)
+ , m_didRequestCommit(false)
, m_didRequestRedraw(false)
{
CCLayerTreeSettings settings;
@@ -64,6 +65,7 @@ public:
virtual void didLoseContextOnImplThread() OVERRIDE { }
virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { }
virtual void onVSyncParametersChanged(double, double) OVERRIDE { }
+ virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawStateChangedCalled = true; }
virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = true; }
virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = true; }
virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr<CCAnimationEventsVector>, double wallClockTime) OVERRIDE { }
@@ -165,6 +167,7 @@ protected:
DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked;
OwnPtr<CCLayerTreeHostImpl> m_hostImpl;
+ bool m_onCanDrawStateChangedCalled;
bool m_didRequestCommit;
bool m_didRequestRedraw;
CCScopedSettings m_scopedSettings;
@@ -175,6 +178,53 @@ public:
virtual bool makeContextCurrent() { return false; }
};
+TEST_F(CCLayerTreeHostImplTest, notifyIfCanDrawChanged)
+{
+ // Note: It is not possible to disable the renderer once it has been set,
+ // so we do not need to test that disabling the renderer notifies us
+ // that canDraw changed.
+ EXPECT_FALSE(m_hostImpl->canDraw());
+ m_onCanDrawStateChangedCalled = false;
+
+ setupScrollAndContentsLayers(IntSize(100, 100));
+ EXPECT_TRUE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+
+ // Toggle the root layer to make sure it toggles canDraw
+ m_hostImpl->setRootLayer(adoptPtr<CCLayerImpl>(0));
+ EXPECT_FALSE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+
+ setupScrollAndContentsLayers(IntSize(100, 100));
+ EXPECT_TRUE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+
+ // Toggle the device viewport size to make sure it toggles canDraw.
+ m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(0, 0));
+ EXPECT_FALSE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+
+ m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100));
+ EXPECT_TRUE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+
+ // Toggle contents textures purged to make sure it toggles canDraw
+ m_hostImpl->releaseContentsTextures();
+ EXPECT_FALSE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+
+ m_hostImpl->resetContentsTexturesPurged();
+ EXPECT_TRUE(m_hostImpl->canDraw());
+ EXPECT_TRUE(m_onCanDrawStateChangedCalled);
+ m_onCanDrawStateChangedCalled = false;
+}
+
TEST_F(CCLayerTreeHostImplTest, scrollDeltaNoLayers)
{
ASSERT_FALSE(m_hostImpl->rootLayer());
diff --git a/cc/CCLayerTreeHostTest.cpp b/cc/CCLayerTreeHostTest.cpp
index 4debcb1..489de86 100644
--- a/cc/CCLayerTreeHostTest.cpp
+++ b/cc/CCLayerTreeHostTest.cpp
@@ -21,6 +21,8 @@
#include "FakeWebCompositorOutputSurface.h"
#include <gmock/gmock.h>
#include <public/Platform.h>
+#include <public/WebLayerScrollClient.h>
+#include <public/WebSize.h>
#include <wtf/MainThread.h>
#include <wtf/OwnArrayPtr.h>
@@ -2192,7 +2194,7 @@ private:
SINGLE_AND_MULTI_THREAD_TEST_F(CCLayerTreeHostTestLayerAddedWithAnimation)
-class CCLayerTreeHostTestScrollChildLayer : public CCLayerTreeHostTest, public LayerChromiumScrollDelegate {
+class CCLayerTreeHostTestScrollChildLayer : public CCLayerTreeHostTest, public WebLayerScrollClient {
public:
CCLayerTreeHostTestScrollChildLayer()
: m_scrollAmount(2, 1)
@@ -2215,7 +2217,7 @@ public:
m_rootScrollLayer->setMaxScrollPosition(IntSize(100, 100));
m_layerTreeHost->rootLayer()->addChild(m_rootScrollLayer);
m_childLayer = ContentLayerChromium::create(&m_mockDelegate);
- m_childLayer->setLayerScrollDelegate(this);
+ m_childLayer->setLayerScrollClient(this);
m_childLayer->setBounds(IntSize(50, 50));
m_childLayer->setIsDrawable(true);
m_childLayer->setScrollable(true);
@@ -2228,9 +2230,9 @@ public:
postSetNeedsCommitToMainThread();
}
- virtual void didScroll(const IntSize& scrollDelta) OVERRIDE
+ virtual void didScroll() OVERRIDE
{
- m_reportedScrollAmount = scrollDelta;
+ m_finalScrollPosition = m_childLayer->scrollPosition();
}
virtual void applyScrollAndScale(const IntSize& scrollDelta, float) OVERRIDE
@@ -2260,12 +2262,12 @@ public:
virtual void afterTest() OVERRIDE
{
- EXPECT_EQ(m_scrollAmount, m_reportedScrollAmount);
+ EXPECT_EQ(IntPoint(m_scrollAmount), m_finalScrollPosition);
}
private:
const IntSize m_scrollAmount;
- IntSize m_reportedScrollAmount;
+ IntPoint m_finalScrollPosition;
MockContentLayerChromiumClient m_mockDelegate;
RefPtr<LayerChromium> m_childLayer;
RefPtr<LayerChromium> m_rootScrollLayer;
diff --git a/cc/CCScheduler.cpp b/cc/CCScheduler.cpp
index 1840b4a..457cf05 100644
--- a/cc/CCScheduler.cpp
+++ b/cc/CCScheduler.cpp
@@ -37,6 +37,16 @@ void CCScheduler::setVisible(bool visible)
processScheduledActions();
}
+void CCScheduler::setCanDraw(bool canDraw)
+{
+ m_stateMachine.setCanDraw(canDraw);
+
+ // Defer processScheduleActions so we don't recurse and commit/draw
+ // multiple frames. We can call processScheduledActions directly
+ // once it is no longer re-entrant.
+ m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded());
+}
+
void CCScheduler::setNeedsCommit()
{
m_stateMachine.setNeedsCommit();
@@ -86,6 +96,11 @@ void CCScheduler::setMaxFramesPending(int maxFramesPending)
m_frameRateController->setMaxFramesPending(maxFramesPending);
}
+void CCScheduler::setSwapBuffersCompleteSupported(bool supported)
+{
+ m_frameRateController->setSwapBuffersCompleteSupported(supported);
+}
+
void CCScheduler::didSwapBuffersComplete()
{
TRACE_EVENT0("cc", "CCScheduler::didSwapBuffersComplete");
@@ -125,16 +140,10 @@ void CCScheduler::vsyncTick()
m_stateMachine.didLeaveVSync();
}
-CCSchedulerStateMachine::Action CCScheduler::nextAction()
-{
- m_stateMachine.setCanDraw(m_client->canDraw());
- return m_stateMachine.nextAction();
-}
-
void CCScheduler::processScheduledActions()
{
// Early out so we don't spam TRACE_EVENTS with useless processScheduledActions.
- if (nextAction() == CCSchedulerStateMachine::ACTION_NONE) {
+ if (m_stateMachine.nextAction() == CCSchedulerStateMachine::ACTION_NONE) {
m_frameRateController->setActive(m_stateMachine.vsyncCallbackNeeded());
return;
}
@@ -143,7 +152,7 @@ void CCScheduler::processScheduledActions()
// setNeedsCommit. Proceeed with caution.
CCSchedulerStateMachine::Action action;
do {
- action = nextAction();
+ action = m_stateMachine.nextAction();
m_stateMachine.updateState(action);
TRACE_EVENT1("cc", "CCScheduler::processScheduledActions()", "action", action);
diff --git a/cc/CCScheduler.h b/cc/CCScheduler.h
index 10fce73..fb043ac 100644
--- a/cc/CCScheduler.h
+++ b/cc/CCScheduler.h
@@ -32,7 +32,6 @@ struct CCScheduledActionDrawAndSwapResult {
class CCSchedulerClient {
public:
- virtual bool canDraw() = 0;
virtual bool hasMoreResourceUpdates() const = 0;
virtual void scheduledActionBeginFrame() = 0;
@@ -60,6 +59,7 @@ public:
void setCanBeginFrame(bool);
void setVisible(bool);
+ void setCanDraw(bool);
void setNeedsCommit();
@@ -77,6 +77,7 @@ public:
void beginFrameAborted();
void setMaxFramesPending(int);
+ void setSwapBuffersCompleteSupported(bool);
void didSwapBuffersComplete();
void didLoseContext();
@@ -93,7 +94,6 @@ public:
private:
CCScheduler(CCSchedulerClient*, PassOwnPtr<CCFrameRateController>);
- CCSchedulerStateMachine::Action nextAction();
void processScheduledActions();
CCSchedulerClient* m_client;
diff --git a/cc/CCSchedulerStateMachine.cpp b/cc/CCSchedulerStateMachine.cpp
index 323a188..94f755c 100644
--- a/cc/CCSchedulerStateMachine.cpp
+++ b/cc/CCSchedulerStateMachine.cpp
@@ -5,6 +5,8 @@
#include "config.h"
#include "CCSchedulerStateMachine.h"
+#include "TextStream.h"
+
namespace WebCore {
@@ -24,13 +26,38 @@ CCSchedulerStateMachine::CCSchedulerStateMachine()
, m_insideVSync(false)
, m_visible(false)
, m_canBeginFrame(false)
- , m_canDraw(true)
+ , m_canDraw(false)
, m_drawIfPossibleFailed(false)
, m_textureState(LAYER_TEXTURE_STATE_UNLOCKED)
, m_contextState(CONTEXT_ACTIVE)
{
}
+String CCSchedulerStateMachine::toString()
+{
+ TextStream ts;
+ ts << "m_commitState = " << m_commitState << "; ";
+ ts << "m_currentFrameNumber = " << m_currentFrameNumber << "; ";
+ ts << "m_lastFrameNumberWhereDrawWasCalled = " << m_lastFrameNumberWhereDrawWasCalled << "; ";
+ ts << "m_consecutiveFailedDraws = " << m_consecutiveFailedDraws << "; ";
+ ts << "m_maximumNumberOfFailedDrawsBeforeDrawIsForced = " << m_maximumNumberOfFailedDrawsBeforeDrawIsForced << "; ";
+ ts << "m_needsRedraw = " << m_needsRedraw << "; ";
+ ts << "m_needsForcedRedraw = " << m_needsForcedRedraw << "; ";
+ ts << "m_needsForcedRedrawAfterNextCommit = " << m_needsForcedRedrawAfterNextCommit << "; ";
+ ts << "m_needsCommit = " << m_needsCommit << "; ";
+ ts << "m_needsForcedCommit = " << m_needsForcedCommit << "; ";
+ ts << "m_mainThreadNeedsLayerTextures = " << m_mainThreadNeedsLayerTextures << "; ";
+ ts << "m_updateMoreResourcesPending = " << m_updateMoreResourcesPending << "; ";
+ ts << "m_insideVSync = " << m_insideVSync << "; ";
+ ts << "m_visible = " << m_visible << "; ";
+ ts << "m_canBeginFrame = " << m_canBeginFrame << "; ";
+ ts << "m_canDraw = " << m_canDraw << "; ";
+ ts << "m_drawIfPossibleFailed = " << m_drawIfPossibleFailed << "; ";
+ ts << "m_textureState = " << m_textureState << "; ";
+ ts << "m_contextState = " << m_contextState << "; ";
+ return ts.release();
+}
+
bool CCSchedulerStateMachine::hasDrawnThisFrame() const
{
return m_currentFrameNumber == m_lastFrameNumberWhereDrawWasCalled;
@@ -210,14 +237,18 @@ void CCSchedulerStateMachine::setMainThreadNeedsLayerTextures()
bool CCSchedulerStateMachine::vsyncCallbackNeeded() const
{
- if (!m_visible || m_contextState != CONTEXT_ACTIVE) {
- if (m_needsForcedRedraw || m_commitState == COMMIT_STATE_UPDATING_RESOURCES)
- return true;
+ // To prevent live-lock, we must always tick when updating resources.
+ if (m_updateMoreResourcesPending || m_commitState == COMMIT_STATE_UPDATING_RESOURCES)
+ return true;
+ // If we can't draw, don't tick until we are notified that we can draw again.
+ if (!m_canDraw)
return false;
- }
- return m_needsRedraw || m_needsForcedRedraw || m_commitState == COMMIT_STATE_UPDATING_RESOURCES;
+ if (m_needsForcedRedraw)
+ return true;
+
+ return m_needsRedraw && m_visible && m_contextState == CONTEXT_ACTIVE;
}
void CCSchedulerStateMachine::didEnterVSync()
diff --git a/cc/CCSchedulerStateMachine.h b/cc/CCSchedulerStateMachine.h
index 279b716..5cd46a7 100644
--- a/cc/CCSchedulerStateMachine.h
+++ b/cc/CCSchedulerStateMachine.h
@@ -6,6 +6,7 @@
#define CCSchedulerStateMachine_h
#include <wtf/Noncopyable.h>
+#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -128,6 +129,8 @@ public:
// Exposed for testing purposes.
void setMaximumNumberOfFailedDrawsBeforeDrawIsForced(int);
+ String toString();
+
protected:
bool shouldDrawForced() const;
bool drawSuspendedUntilCommit() const;
diff --git a/cc/CCSchedulerStateMachineTest.cpp b/cc/CCSchedulerStateMachineTest.cpp
index cc2165a..1342b5b 100644
--- a/cc/CCSchedulerStateMachineTest.cpp
+++ b/cc/CCSchedulerStateMachineTest.cpp
@@ -116,6 +116,7 @@ TEST(CCSchedulerStateMachineTest, TestNextActionBeginsFrameIfNeeded)
TEST(CCSchedulerStateMachineTest, TestSetForcedRedrawDoesNotSetsNormalRedraw)
{
CCSchedulerStateMachine state;
+ state.setCanDraw(true);
state.setNeedsForcedRedraw();
EXPECT_FALSE(state.redrawPending());
EXPECT_TRUE(state.vsyncCallbackNeeded());
@@ -126,6 +127,7 @@ TEST(CCSchedulerStateMachineTest, TestFailedDrawSetsNeedsCommitAndDoesNotDrawAga
CCSchedulerStateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
state.setNeedsRedraw();
EXPECT_TRUE(state.redrawPending());
EXPECT_TRUE(state.vsyncCallbackNeeded());
@@ -151,6 +153,7 @@ TEST(CCSchedulerStateMachineTest, TestSetNeedsRedrawDuringFailedDrawDoesNotRemov
CCSchedulerStateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
state.setNeedsRedraw();
EXPECT_TRUE(state.redrawPending());
EXPECT_TRUE(state.vsyncCallbackNeeded());
@@ -179,6 +182,7 @@ TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedDrawAllowsDrawInSameFrame
CCSchedulerStateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Start a commit.
state.setNeedsCommit();
@@ -219,6 +223,7 @@ TEST(CCSchedulerStateMachineTest, TestCommitAfterFailedAndSuccessfulDrawDoesNotA
CCSchedulerStateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Start a commit.
state.setNeedsCommit();
@@ -270,6 +275,7 @@ TEST(CCSchedulerStateMachineTest, TestFailedDrawsWillEventuallyForceADrawAfterTh
CCSchedulerStateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
state.setMaximumNumberOfFailedDrawsBeforeDrawIsForced(1);
// Start a commit.
@@ -312,6 +318,7 @@ TEST(CCSchedulerStateMachineTest, TestFailedDrawIsRetriedNextVSync)
CCSchedulerStateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Start a draw.
state.setNeedsRedraw();
@@ -341,6 +348,7 @@ TEST(CCSchedulerStateMachineTest, TestDoestDrawTwiceInSameFrame)
{
CCSchedulerStateMachine state;
state.setVisible(true);
+ state.setCanDraw(true);
state.setNeedsRedraw();
EXPECT_TRUE(state.vsyncCallbackNeeded());
state.didEnterVSync();
@@ -393,6 +401,7 @@ TEST(CCSchedulerStateMachineTest, TestNextActionDrawsOnVSync)
for (size_t i = 0; i < numCommitStates; ++i) {
for (unsigned j = 0; j < 2; ++j) {
StateMachine state;
+ state.setCanDraw(true);
state.setCommitState(allCommitStates[i]);
bool forcedDraw = j;
if (!forcedDraw) {
@@ -505,6 +514,28 @@ TEST(CCSchedulerStateMachineTest, TestCanRedrawWithWaitingForFirstDrawMakesProgr
EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
}
+TEST(CCSchedulerStateMachineTest, TestVsyncCallbackNeededOnCanDrawAndResourceUpdates)
+{
+ StateMachine state;
+ state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_WAITING_FOR_FIRST_DRAW);
+ state.setCanBeginFrame(true);
+ state.setNeedsCommit(true);
+ state.setNeedsRedraw(true);
+ state.setUpdateMoreResourcesPending(false);
+ state.setVisible(true);
+ state.setCanDraw(false);
+ EXPECT_FALSE(state.vsyncCallbackNeeded());
+
+ state.setUpdateMoreResourcesPending(true);
+ EXPECT_TRUE(state.vsyncCallbackNeeded());
+
+ state.setUpdateMoreResourcesPending(false);
+ EXPECT_FALSE(state.vsyncCallbackNeeded());
+
+ state.setCanDraw(true);
+ EXPECT_TRUE(state.vsyncCallbackNeeded());
+}
+
TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_OneRoundOfUpdates)
{
StateMachine state;
@@ -512,6 +543,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_OneRoundOfUpdates)
state.setNeedsRedraw(false);
state.setUpdateMoreResourcesPending(false);
state.setVisible(true);
+ state.setCanDraw(true);
// Verify we begin update, both for vsync and not vsync.
EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state.nextAction());
@@ -540,6 +572,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates)
state.setNeedsRedraw(false);
state.setUpdateMoreResourcesPending(false);
state.setVisible(true);
+ state.setCanDraw(true);
// Verify the update begins, both for vsync and not vsync.
state.didEnterVSync();
@@ -579,6 +612,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_NoRedraw_TwoRoundsOfUpdates)
TEST(CCSchedulerStateMachineTest, TestVSyncNeededWhenUpdatesPendingButInvisible)
{
StateMachine state;
+ state.setCanDraw(true);
state.setCommitState(CCSchedulerStateMachine::COMMIT_STATE_UPDATING_RESOURCES);
state.setNeedsRedraw(false);
state.setVisible(false);
@@ -596,6 +630,7 @@ TEST(CCSchedulerStateMachineTest, TestUpdates_WithRedraw_OneRoundOfUpdates)
state.setNeedsRedraw(true);
state.setUpdateMoreResourcesPending(false);
state.setVisible(true);
+ state.setCanDraw(true);
EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_UPDATE_MORE_RESOURCES, state.nextAction());
// Begin an update.
@@ -643,6 +678,7 @@ TEST(CCSchedulerStateMachineTest, TestSetNeedsCommitIsNotLost)
state.setCanBeginFrame(true);
state.setNeedsCommit(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Begin the frame.
EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
@@ -685,6 +721,7 @@ TEST(CCSchedulerStateMachineTest, TestFullCycle)
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Start clean and set commit.
state.setNeedsCommit(true);
@@ -733,6 +770,7 @@ TEST(CCSchedulerStateMachineTest, TestFullCycleWithCommitRequestInbetween)
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Start clean and set commit.
state.setNeedsCommit(true);
@@ -792,6 +830,7 @@ TEST(CCSchedulerStateMachineTest, TestGoesInvisibleBeforeBeginFrameCompletes)
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Start clean and set commit.
state.setNeedsCommit(true);
@@ -830,6 +869,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhenCompletelyIdle)
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
state.didLoseContext();
@@ -852,6 +892,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhenIdleAndCommitRequestedWhile
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
state.didLoseContext();
@@ -888,6 +929,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgress)
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Get a commit in flight.
state.setNeedsCommit(true);
@@ -929,6 +971,7 @@ TEST(CCSchedulerStateMachineTest, TestContextLostWhileCommitInProgressAndAnother
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
// Get a commit in flight.
state.setNeedsCommit(true);
@@ -979,6 +1022,7 @@ TEST(CCSchedulerStateMachineTest, TestFinishAllRenderingWhileContextLost)
{
StateMachine state;
state.setVisible(true);
+ state.setCanDraw(true);
// Cause a lost context lost.
state.didLoseContext();
@@ -1017,6 +1061,7 @@ TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenCanBeginFrameFalseAndForceCo
{
StateMachine state;
state.setVisible(true);
+ state.setCanDraw(true);
state.setNeedsCommit(true);
state.setNeedsForcedCommit(true);
EXPECT_EQ(CCSchedulerStateMachine::ACTION_BEGIN_FRAME, state.nextAction());
@@ -1049,6 +1094,7 @@ TEST(CCSchedulerStateMachineTest, TestBeginFrameWhenContextLost)
StateMachine state;
state.setCanBeginFrame(true);
state.setVisible(true);
+ state.setCanDraw(true);
state.setNeedsCommit(true);
state.setNeedsForcedCommit(true);
state.didLoseContext();
diff --git a/cc/CCSchedulerTest.cpp b/cc/CCSchedulerTest.cpp
index ec68c71..ebd86dd 100644
--- a/cc/CCSchedulerTest.cpp
+++ b/cc/CCSchedulerTest.cpp
@@ -24,14 +24,12 @@ public:
{
m_actions.clear();
m_hasMoreResourceUpdates = false;
- m_canDraw = true;
m_drawWillHappen = true;
m_swapWillHappenIfDrawHappens = true;
m_numDraws = 0;
}
void setHasMoreResourceUpdates(bool b) { m_hasMoreResourceUpdates = b; }
- void setCanDraw(bool b) { m_canDraw = b; }
int numDraws() const { return m_numDraws; }
int numActions() const { return static_cast<int>(m_actions.size()); }
@@ -45,8 +43,8 @@ public:
return false;
}
- virtual bool canDraw() OVERRIDE { return m_canDraw; }
virtual bool hasMoreResourceUpdates() const OVERRIDE { return m_hasMoreResourceUpdates; }
+
virtual void scheduledActionBeginFrame() OVERRIDE { m_actions.push_back("scheduledActionBeginFrame"); }
virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() OVERRIDE
{
@@ -71,7 +69,6 @@ public:
protected:
bool m_hasMoreResourceUpdates;
- bool m_canDraw;
bool m_drawWillHappen;
bool m_swapWillHappenIfDrawHappens;
int m_numDraws;
@@ -85,6 +82,7 @@ TEST(CCSchedulerTest, RequestCommit)
OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, adoptPtr(new CCFrameRateController(timeSource)));
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
// SetNeedsCommit should begin the frame.
scheduler->setNeedsCommit();
@@ -119,6 +117,7 @@ TEST(CCSchedulerTest, RequestCommitAfterBeginFrame)
OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, adoptPtr(new CCFrameRateController(timeSource)));
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
// SetNedsCommit should begin the frame.
scheduler->setNeedsCommit();
@@ -152,6 +151,7 @@ TEST(CCSchedulerTest, TextureAcquisitionCollision)
OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, adoptPtr(new CCFrameRateController(timeSource)));
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
scheduler->setNeedsCommit();
scheduler->setMainThreadNeedsLayerTextures();
@@ -190,6 +190,7 @@ TEST(CCSchedulerTest, VisibilitySwitchWithTextureAcquisition)
OwnPtr<CCScheduler> scheduler = CCScheduler::create(&client, adoptPtr(new CCFrameRateController(timeSource)));
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
scheduler->setNeedsCommit();
scheduler->beginFrameComplete();
@@ -253,6 +254,7 @@ TEST(CCSchedulerTest, RequestRedrawInsideDraw)
client.setScheduler(scheduler.get());
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
scheduler->setNeedsRedraw();
EXPECT_TRUE(scheduler->redrawPending());
@@ -279,6 +281,7 @@ TEST(CCSchedulerTest, RequestRedrawInsideFailedDraw)
client.setScheduler(scheduler.get());
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
client.setDrawWillHappen(false);
scheduler->setNeedsRedraw();
@@ -351,6 +354,7 @@ TEST(CCSchedulerTest, RequestCommitInsideDraw)
client.setScheduler(scheduler.get());
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
scheduler->setNeedsRedraw();
EXPECT_TRUE(scheduler->redrawPending());
@@ -378,6 +382,7 @@ TEST(CCSchedulerTest, RequestCommitInsideFailedDraw)
client.setScheduler(scheduler.get());
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
client.setDrawWillHappen(false);
scheduler->setNeedsRedraw();
@@ -420,6 +425,7 @@ TEST(CCSchedulerTest, NoBeginFrameWhenDrawFails)
client.setScheduler(scheduler.get());
scheduler->setCanBeginFrame(true);
scheduler->setVisible(true);
+ scheduler->setCanDraw(true);
EXPECT_EQ(0, controllerPtr->numFramesPending());
diff --git a/cc/CCSingleThreadProxy.h b/cc/CCSingleThreadProxy.h
index 02981d1..95f8743 100644
--- a/cc/CCSingleThreadProxy.h
+++ b/cc/CCSingleThreadProxy.h
@@ -49,6 +49,7 @@ public:
virtual void didLoseContextOnImplThread() OVERRIDE { }
virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { ASSERT_NOT_REACHED(); }
virtual void onVSyncParametersChanged(double monotonicTimebase, double intervalInSeconds) OVERRIDE { }
+ virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { }
virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_layerTreeHost->scheduleComposite(); }
virtual void setNeedsCommitOnImplThread() OVERRIDE { m_layerTreeHost->scheduleComposite(); }
virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr<CCAnimationEventsVector>, double wallClockTime) OVERRIDE;
diff --git a/cc/CCThreadProxy.cpp b/cc/CCThreadProxy.cpp
index 9255010..184ec51 100644
--- a/cc/CCThreadProxy.cpp
+++ b/cc/CCThreadProxy.cpp
@@ -332,6 +332,13 @@ void CCThreadProxy::onVSyncParametersChanged(double monotonicTimebase, double in
m_schedulerOnImplThread->setTimebaseAndInterval(monotonicTimebase, intervalInSeconds);
}
+void CCThreadProxy::onCanDrawStateChanged(bool canDraw)
+{
+ ASSERT(isImplThread());
+ TRACE_EVENT1("cc", "CCThreadProxy::onCanDrawStateChanged", "canDraw", canDraw);
+ m_schedulerOnImplThread->setCanDraw(canDraw);
+}
+
void CCThreadProxy::setNeedsCommitOnImplThread()
{
ASSERT(isImplThread());
@@ -522,8 +529,10 @@ void CCThreadProxy::beginFrame()
m_commitRequestSentToImplThread = false;
m_forcedCommitRequested = false;
- if (!m_layerTreeHost->initializeRendererIfNeeded())
+ if (!m_layerTreeHost->initializeRendererIfNeeded()) {
+ TRACE_EVENT0("cc", "EarlyOut_InitializeFailed");
return;
+ }
if (request->contentsTexturesWereDeleted)
m_layerTreeHost->evictAllContentTextures();
@@ -573,6 +582,7 @@ void CCThreadProxy::beginFrameCompleteOnImplThread(CCCompletionEvent* completion
ASSERT(m_schedulerOnImplThread->commitPending());
if (!m_layerTreeHostImpl) {
+ TRACE_EVENT0("cc", "EarlyOut_NoLayerTree");
completion->signal();
return;
}
@@ -610,14 +620,6 @@ bool CCThreadProxy::hasMoreResourceUpdates() const
return m_currentTextureUpdateControllerOnImplThread->hasMoreUpdates();
}
-bool CCThreadProxy::canDraw()
-{
- ASSERT(isImplThread());
- if (!m_layerTreeHostImpl)
- return false;
- return m_layerTreeHostImpl->canDraw();
-}
-
void CCThreadProxy::scheduledActionUpdateMoreResources(double monotonicTimeLimit)
{
TRACE_EVENT0("cc", "CCThreadProxy::scheduledActionUpdateMoreResources");
@@ -868,8 +870,8 @@ void CCThreadProxy::initializeRendererOnImplThread(CCCompletionEvent* completion
*initializeSucceeded = m_layerTreeHostImpl->initializeRenderer(m_contextBeforeInitializationOnImplThread.release(), textureUploader);
if (*initializeSucceeded) {
*capabilities = m_layerTreeHostImpl->rendererCapabilities();
- if (capabilities->usingSwapCompleteCallback)
- m_schedulerOnImplThread->setMaxFramesPending(2);
+ m_schedulerOnImplThread->setSwapBuffersCompleteSupported(
+ capabilities->usingSwapCompleteCallback);
}
completion->signal();
diff --git a/cc/CCThreadProxy.h b/cc/CCThreadProxy.h
index c488dcb..bf9c378 100644
--- a/cc/CCThreadProxy.h
+++ b/cc/CCThreadProxy.h
@@ -58,13 +58,14 @@ public:
virtual void didLoseContextOnImplThread() OVERRIDE;
virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE;
virtual void onVSyncParametersChanged(double monotonicTimebase, double intervalInSeconds) OVERRIDE;
+ virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE;
virtual void setNeedsRedrawOnImplThread() OVERRIDE;
virtual void setNeedsCommitOnImplThread() OVERRIDE;
virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr<CCAnimationEventsVector>, double wallClockTime) OVERRIDE;
// CCSchedulerClient implementation
- virtual bool canDraw() OVERRIDE;
virtual bool hasMoreResourceUpdates() const OVERRIDE;
+
virtual void scheduledActionBeginFrame() OVERRIDE;
virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() OVERRIDE;
virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() OVERRIDE;
diff --git a/cc/LayerChromium.cpp b/cc/LayerChromium.cpp
index 8dc15ad..da4b002 100644
--- a/cc/LayerChromium.cpp
+++ b/cc/LayerChromium.cpp
@@ -16,6 +16,8 @@
#include "TextStream.h"
#include <public/WebAnimationDelegate.h>
+#include <public/WebLayerScrollClient.h>
+#include <public/WebSize.h>
using namespace std;
using WebKit::WebTransformationMatrix;
@@ -65,7 +67,7 @@ LayerChromium::LayerChromium()
, m_screenSpaceTransformIsAnimating(false)
, m_contentsScale(1.0)
, m_layerAnimationDelegate(0)
- , m_layerScrollDelegate(0)
+ , m_layerScrollClient(0)
{
if (m_layerId < 0) {
s_nextLayerId = 1;
@@ -369,6 +371,8 @@ void LayerChromium::setScrollPosition(const IntPoint& scrollPosition)
if (m_scrollPosition == scrollPosition)
return;
m_scrollPosition = scrollPosition;
+ if (m_layerScrollClient)
+ m_layerScrollClient->didScroll();
setNeedsCommit();
}
@@ -413,13 +417,6 @@ void LayerChromium::setNonFastScrollableRegion(const Region& region)
setNeedsCommit();
}
-void LayerChromium::scrollBy(const IntSize& scrollDelta)
-{
- setScrollPosition(scrollPosition() + scrollDelta);
- if (m_layerScrollDelegate)
- m_layerScrollDelegate->didScroll(scrollDelta);
-}
-
void LayerChromium::setDrawCheckerboardForMissingTiles(bool checkerboard)
{
if (m_drawCheckerboardForMissingTiles == checkerboard)
diff --git a/cc/LayerChromium.h b/cc/LayerChromium.h
index 273bf8e..aad1fe2 100644
--- a/cc/LayerChromium.h
+++ b/cc/LayerChromium.h
@@ -28,6 +28,7 @@
namespace WebKit {
class WebAnimationDelegate;
+class WebLayerScrollClient;
}
namespace WebCore {
@@ -42,15 +43,6 @@ class ScrollbarLayerChromium;
struct CCAnimationEvent;
struct CCRenderingStats;
-// Delegate for handling scroll input for a LayerChromium.
-class LayerChromiumScrollDelegate {
-public:
- virtual void didScroll(const IntSize&) = 0;
-
-protected:
- virtual ~LayerChromiumScrollDelegate() { }
-};
-
// Base class for composited layers. Special layer types are derived from
// this class.
class LayerChromium : public RefCounted<LayerChromium>, public CCLayerAnimationControllerClient {
@@ -149,8 +141,7 @@ public:
const Region& nonFastScrollableRegion() { return m_nonFastScrollableRegion; }
void setNonFastScrollableRegion(const Region&);
void setNonFastScrollableRegionChanged() { m_nonFastScrollableRegionChanged = true; }
- void setLayerScrollDelegate(LayerChromiumScrollDelegate* layerScrollDelegate) { m_layerScrollDelegate = layerScrollDelegate; }
- void scrollBy(const IntSize&);
+ void setLayerScrollClient(WebKit::WebLayerScrollClient* layerScrollClient) { m_layerScrollClient = layerScrollClient; }
void setDrawCheckerboardForMissingTiles(bool);
bool drawCheckerboardForMissingTiles() const { return m_drawCheckerboardForMissingTiles; }
@@ -370,7 +361,7 @@ private:
float m_contentsScale;
WebKit::WebAnimationDelegate* m_layerAnimationDelegate;
- LayerChromiumScrollDelegate* m_layerScrollDelegate;
+ WebKit::WebLayerScrollClient* m_layerScrollClient;
};
void sortLayers(Vector<RefPtr<LayerChromium> >::iterator, Vector<RefPtr<LayerChromium> >::iterator, void*);