Index: cc/output/swap_promise.h |
diff --git a/cc/output/swap_promise.h b/cc/output/swap_promise.h |
index 1d6dabcbaa3366f127d87998b3c8f1555cffeb3f..45deee834018bdca7b1f7e2d104ab725ea54bee3 100644 |
--- a/cc/output/swap_promise.h |
+++ b/cc/output/swap_promise.h |
@@ -15,30 +15,43 @@ namespace cc { |
// completed in the compositor, i.e. the compositor knows it has been sent |
// to its output or not. |
// |
+// If the commit results in a successful activation of the pending layer tree, |
+// SwapPromise::DidActivate() will be called. |
+// |
// If the new compositor state is sent to the output, SwapPromise::DidSwap() |
-// will be called, and if the compositor fails to send its new state to the |
-// output, SwapPromise::DidNotSwap() will be called. |
+// will be called. |
+// |
+// If the scheduler fails to activate the pending tree, or the compositor |
+// fails to send its new state to the output, SwapPromise::DidNotSwap() will |
+// be called. Note that it is possible to activate, and subsequently not swap. |
+// |
+// Promises complete afer either DidSwap() or DidNotSwap() is called, thus |
+// there are three possible call sequences: |
+// DidNotSwap() |
+// DidActivate() ; DidSwap() |
+// DidActivate() ; DidNotSwap() |
// |
-// Client wishes to use SwapPromise should have a subclass that defines |
-// the behavior of DidSwap() and DidNotSwap(). Notice that the promise can |
-// be broken at either main or impl thread, e.g. commit fails on main thread, |
-// new frame data has no actual damage so LayerTreeHostImpl::SwapBuffers() |
-// bails out early on impl thread, so don't assume that DidSwap() and |
-// DidNotSwap() are called at a particular thread. It is better to let the |
-// subclass carry thread-safe member data and operate on that member data in |
-// DidSwap() and DidNotSwap(). |
+// Clients that wish to use SwapPromise should have a subclass that defines |
+// the behavior of DidActivate(), DidSwap() and DidNotSwap(). Notice that the |
+// promise can be broken at either main or impl thread, e.g. commit fails on |
+// main thread, new frame data has no actual damage so |
+// LayerTreeHostImpl::SwapBuffers() bails out early on impl thread, so don't |
+// assume that Did*() methods are called at a particular thread. It is better |
+// to let the subclass carry thread-safe member data and operate on that |
+// member data in Did*(). |
class CC_EXPORT SwapPromise { |
public: |
enum DidNotSwapReason { |
- DID_NOT_SWAP_UNKNOWN, |
SWAP_FAILS, |
COMMIT_FAILS, |
COMMIT_NO_UPDATE, |
+ ACTIVATION_FAILS, |
}; |
SwapPromise() {} |
virtual ~SwapPromise() {} |
+ virtual void DidActivate() = 0; |
virtual void DidSwap(CompositorFrameMetadata* metadata) = 0; |
virtual void DidNotSwap(DidNotSwapReason reason) = 0; |