diff options
Diffstat (limited to 'cc/scheduler.h')
-rw-r--r-- | cc/scheduler.h | 108 |
1 files changed, 107 insertions, 1 deletions
diff --git a/cc/scheduler.h b/cc/scheduler.h index 638cbb2..1b48307 100644 --- a/cc/scheduler.h +++ b/cc/scheduler.h @@ -1,3 +1,109 @@ -// Copyright 2012 The Chromium Authors. All rights reserved. +// Copyright 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + +#ifndef CCScheduler_h +#define CCScheduler_h + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" +#include "base/time.h" +#include "CCFrameRateController.h" +#include "CCSchedulerStateMachine.h" +#include <wtf/PassOwnPtr.h> + +namespace cc { + +class CCThread; + +struct CCScheduledActionDrawAndSwapResult { + CCScheduledActionDrawAndSwapResult() + : didDraw(false) + , didSwap(false) + { + } + CCScheduledActionDrawAndSwapResult(bool didDraw, bool didSwap) + : didDraw(didDraw) + , didSwap(didSwap) + { + } + bool didDraw; + bool didSwap; +}; + +class CCSchedulerClient { +public: + virtual void scheduledActionBeginFrame() = 0; + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() = 0; + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() = 0; + virtual void scheduledActionCommit() = 0; + virtual void scheduledActionBeginContextRecreation() = 0; + virtual void scheduledActionAcquireLayerTexturesForMainThread() = 0; + virtual void didAnticipatedDrawTimeChange(base::TimeTicks) = 0; + +protected: + virtual ~CCSchedulerClient() { } +}; + +class CCScheduler : CCFrameRateControllerClient { +public: + static PassOwnPtr<CCScheduler> create(CCSchedulerClient* client, scoped_ptr<CCFrameRateController> frameRateController) + { + return adoptPtr(new CCScheduler(client, frameRateController.Pass())); + } + + virtual ~CCScheduler(); + + void setCanBeginFrame(bool); + + void setVisible(bool); + void setCanDraw(bool); + + void setNeedsCommit(); + + // Like setNeedsCommit(), but ensures a commit will definitely happen even if we are not visible. + void setNeedsForcedCommit(); + + void setNeedsRedraw(); + + void setMainThreadNeedsLayerTextures(); + + // Like setNeedsRedraw(), but ensures the draw will definitely happen even if we are not visible. + void setNeedsForcedRedraw(); + + void beginFrameComplete(); + void beginFrameAborted(); + + void setMaxFramesPending(int); + void setSwapBuffersCompleteSupported(bool); + void didSwapBuffersComplete(); + + void didLoseContext(); + void didRecreateContext(); + + bool commitPending() const { return m_stateMachine.commitPending(); } + bool redrawPending() const { return m_stateMachine.redrawPending(); } + + void setTimebaseAndInterval(base::TimeTicks timebase, base::TimeDelta interval); + + base::TimeTicks anticipatedDrawTime(); + + // CCFrameRateControllerClient implementation + virtual void vsyncTick(bool throttled) OVERRIDE; + +private: + CCScheduler(CCSchedulerClient*, scoped_ptr<CCFrameRateController>); + + void processScheduledActions(); + + CCSchedulerClient* m_client; + scoped_ptr<CCFrameRateController> m_frameRateController; + CCSchedulerStateMachine m_stateMachine; + bool m_insideProcessScheduledActions; + + DISALLOW_COPY_AND_ASSIGN(CCScheduler); +}; + +} // namespace cc + +#endif // CCScheduler_h |