Chromium Code Reviews| Index: cc/scheduler/scheduler.h |
| diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h |
| index 772c88029500c496807699f09fe71ada1f9d71cd..454d05004e60ba2cb547c3d8e9c2e100589f6b3e 100644 |
| --- a/cc/scheduler/scheduler.h |
| +++ b/cc/scheduler/scheduler.h |
| @@ -8,6 +8,7 @@ |
| #include <string> |
| #include "base/basictypes.h" |
| +#include "base/cancelable_callback.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/time/time.h" |
| #include "cc/base/cc_export.h" |
| @@ -20,25 +21,27 @@ namespace cc { |
| class Thread; |
| -struct ScheduledActionDrawAndSwapResult { |
| - ScheduledActionDrawAndSwapResult() |
| +struct DrawSwapReadbackResult { |
| + DrawSwapReadbackResult() |
| : did_draw(false), |
| - did_swap(false) {} |
| - ScheduledActionDrawAndSwapResult(bool did_draw, bool did_swap) |
| + did_swap(false), |
| + did_readback(false) {} |
| + DrawSwapReadbackResult(bool did_draw, bool did_swap, bool did_readback) |
| : did_draw(did_draw), |
| - did_swap(did_swap) {} |
| + did_swap(did_swap), |
| + did_readback(did_readback) {} |
| bool did_draw; |
| bool did_swap; |
| + bool did_readback; |
| }; |
| class SchedulerClient { |
| public: |
| virtual void SetNeedsBeginFrameOnImplThread(bool enable) = 0; |
| virtual void ScheduledActionSendBeginFrameToMainThread() = 0; |
| - virtual ScheduledActionDrawAndSwapResult |
| - ScheduledActionDrawAndSwapIfPossible() = 0; |
| - virtual ScheduledActionDrawAndSwapResult |
| - ScheduledActionDrawAndSwapForced() = 0; |
| + virtual DrawSwapReadbackResult ScheduledActionDrawAndSwapIfPossible() = 0; |
| + virtual DrawSwapReadbackResult ScheduledActionDrawAndSwapForced() = 0; |
| + virtual DrawSwapReadbackResult ScheduledActionDrawAndReadback() = 0; |
| virtual void ScheduledActionCommit() = 0; |
| virtual void ScheduledActionCheckForCompletedTileUploads() = 0; |
| virtual void ScheduledActionActivatePendingTreeIfNeeded() = 0; |
| @@ -48,6 +51,9 @@ class SchedulerClient { |
| virtual base::TimeDelta DrawDurationEstimate() = 0; |
| virtual base::TimeDelta BeginFrameToCommitDurationEstimate() = 0; |
| virtual base::TimeDelta CommitToActivateDurationEstimate() = 0; |
| + virtual void PostBeginFrameDeadline(const base::Closure& closure, |
| + base::TimeTicks deadline) = 0; |
| + virtual void DidBeginFrameDeadlineOnImplThread() = 0; |
| protected: |
| virtual ~SchedulerClient() {} |
| @@ -67,22 +73,18 @@ class CC_EXPORT Scheduler { |
| void SetVisible(bool visible); |
| void SetCanDraw(bool can_draw); |
| - void SetHasPendingTree(bool has_pending_tree); |
| + void SetHasTrees(bool has_pending_tree, bool active_tree_is_null); |
| void SetNeedsCommit(); |
| // Like SetNeedsCommit(), but ensures a commit will definitely happen even if |
| - // we are not visible. |
| - void SetNeedsForcedCommit(); |
| + // we are not visible. Will eventually result in a forced draw internally. |
| + void SetNeedsForcedCommitForReadback(); |
| void SetNeedsRedraw(); |
| void SetMainThreadNeedsLayerTextures(); |
| - // Like SetNeedsRedraw(), but ensures the draw will definitely happen even if |
| - // we are not visible. |
| - void SetNeedsForcedRedraw(); |
|
brianderson
2013/07/18 02:02:49
I got rid of this method because the state machine
|
| - |
| void DidSwapUseIncompleteTile(); |
| void FinishCommit(); |
| @@ -104,6 +106,7 @@ class CC_EXPORT Scheduler { |
| base::TimeTicks LastBeginFrameOnImplThreadTime(); |
| void BeginFrame(const BeginFrameArgs& args); |
| + void OnBeginFrameDeadline(); |
| std::string StateAsStringForTesting() { return state_machine_.ToString(); } |
| @@ -111,9 +114,11 @@ class CC_EXPORT Scheduler { |
| Scheduler(SchedulerClient* client, |
| const SchedulerSettings& scheduler_settings); |
| + void PostBeginFrameDeadline(base::TimeTicks deadline); |
| void SetupNextBeginFrameIfNeeded(); |
| void DrawAndSwapIfPossible(); |
| void DrawAndSwapForced(); |
| + void DrawAndReadback(); |
| void ProcessScheduledActions(); |
| const SchedulerSettings settings_; |
| @@ -126,6 +131,7 @@ class CC_EXPORT Scheduler { |
| // workaround. |
| bool safe_to_expect_begin_frame_; |
| BeginFrameArgs last_begin_frame_args_; |
| + base::CancelableClosure begin_frame_deadline_closure_; |
| SchedulerStateMachine state_machine_; |
| bool inside_process_scheduled_actions_; |