Index: cc/scheduler/scheduler.h |
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h |
index 230f20d0ec9f31a6c9134a7941ed8eb38ef7164f..d7129813248bed524d0a670ff4829c89c7028103 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,34 +21,35 @@ namespace cc { |
class Thread; |
-struct ScheduledActionDrawAndSwapResult { |
- ScheduledActionDrawAndSwapResult() |
- : did_draw(false), |
- did_swap(false) {} |
- ScheduledActionDrawAndSwapResult(bool did_draw, bool did_swap) |
- : did_draw(did_draw), |
- did_swap(did_swap) {} |
+struct DrawSwapReadbackResult { |
+ DrawSwapReadbackResult() |
+ : did_draw(false), 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_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 ScheduledActionUpdateVisibleTiles() = 0; |
- virtual void ScheduledActionActivatePendingTreeIfNeeded() = 0; |
+ virtual void ScheduledActionActivatePendingTree() = 0; |
virtual void ScheduledActionBeginOutputSurfaceCreation() = 0; |
virtual void ScheduledActionAcquireLayerTexturesForMainThread() = 0; |
virtual void DidAnticipatedDrawTimeChange(base::TimeTicks time) = 0; |
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 +69,20 @@ class CC_EXPORT Scheduler { |
void SetVisible(bool visible); |
void SetCanDraw(bool can_draw); |
- void SetHasPendingTree(bool has_pending_tree); |
+ |
+ void NotifyReadyToActivate(); |
+ 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(); |
- |
void DidSwapUseIncompleteTile(); |
void FinishCommit(); |
@@ -104,6 +104,7 @@ class CC_EXPORT Scheduler { |
base::TimeTicks LastBeginFrameOnImplThreadTime(); |
void BeginFrame(const BeginFrameArgs& args); |
+ void OnBeginFrameDeadline(); |
std::string StateAsStringForTesting() { return state_machine_.ToString(); } |
@@ -111,6 +112,7 @@ class CC_EXPORT Scheduler { |
Scheduler(SchedulerClient* client, |
const SchedulerSettings& scheduler_settings); |
+ void PostBeginFrameDeadline(base::TimeTicks deadline); |
void SetupNextBeginFrameIfNeeded(); |
void DrawAndSwapIfPossible(); |
void DrawAndSwapForced(); |
@@ -126,6 +128,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_; |