Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 5b4a19dd07b6edded6032d615ca38bdcd42fd2ab..c2998ae3c5d3c981933cbbe9ea2ce9810b8c89f5 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -1343,6 +1343,38 @@ void RenderWidget::DidCommitCompositorFrame() { |
DidCommitCompositorFrame()); |
} |
+namespace { |
+ |
+class RWSwapPromise: public cc::SwapPromise { |
+ public: |
+ RWSwapPromise(IPC::Sender* sender, int routing_id, IPC::Message msg): |
+ fallback_sender_(sender), |
+ fallback_routing_id_(routing_id), |
+ msg_(msg) {} |
+ virtual void DidSwap(cc::CompositorFrameMetadata* metadata) OVERRIDE { |
+ metadata->payload.push_back(msg); |
+ } |
+ virtual void DidNotSwap(DidNotSwapReason reason) OVERRIDE { |
+ fallback_sender_->Send( |
+ new ViewHostMsg_DeliverPayload(fallback_routing_id_, msg)); |
piman
2014/05/07 01:21:46
How about fallback_sender_->Send(msg)? Is there a
piman
2014/05/07 01:21:46
Also, beware, DidNotSwap can be called on either t
mkosiba (inactive)
2014/05/07 18:27:20
thanks for pointing that out!
|
+ } |
+ private: |
+ IPC::Sender* fallback_sender_; |
+ int fallback_routing_id_; |
+ IPC::Message msg_; |
+}; |
+ |
+} // namespace |
+ |
+void RenderWidget::QueueMessage(const IPC::Message& msg) { |
mkosiba (inactive)
2014/05/06 22:30:33
so this would be the entry point
|
+ if (!compositor_->commitRequested()) { |
piman
2014/05/07 01:21:46
I'm not sure if that isn't racy.
I think the cont
mkosiba (inactive)
2014/05/07 18:27:20
oh.. I assumed that this tracks whether the Blink
|
+ Send(ViewHostMsg_DeliverPayload(routing_id_, msg); |
+ } else { |
+ scoped_ptr<cc::SwapPromise> promise(new RWSwapPromise()); |
+ compositor_->QueueSwapPromise(promise.Pass()); |
+ } |
+} |
+ |
void RenderWidget::didCommitAndDrawCompositorFrame() { |
TRACE_EVENT0("gpu", "RenderWidget::didCommitAndDrawCompositorFrame"); |
// Accelerated FPS tick for performance tests. See |