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_; |