| Index: content/renderer/render_frame_proxy.cc
|
| diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
|
| index f9643248a0bb2be36520df23e6c98936aa8084dc..2e85a52ded03a713ed2fb61dc4909dccaa32566c 100644
|
| --- a/content/renderer/render_frame_proxy.cc
|
| +++ b/content/renderer/render_frame_proxy.cc
|
| @@ -9,9 +9,11 @@
|
| #include "base/lazy_instance.h"
|
| #include "content/common/frame_messages.h"
|
| #include "content/common/swapped_out_messages.h"
|
| +#include "content/renderer/child_frame_compositing_helper.h"
|
| #include "content/renderer/render_frame_impl.h"
|
| #include "content/renderer/render_thread_impl.h"
|
| #include "content/renderer/render_view_impl.h"
|
| +#include "third_party/WebKit/public/web/WebView.h"
|
|
|
| namespace content {
|
|
|
| @@ -48,17 +50,32 @@ RenderFrameProxy::RenderFrameProxy(int routing_id, int frame_routing_id)
|
|
|
| render_frame_ = RenderFrameImpl::FromRoutingID(frame_routing_id);
|
| CHECK(render_frame_);
|
| + render_frame_->render_view()->RegisterRenderFrameProxy(this);
|
| }
|
|
|
| RenderFrameProxy::~RenderFrameProxy() {
|
| + render_frame_->render_view()->UnregisterRenderFrameProxy(this);
|
| RenderThread::Get()->RemoveRoute(routing_id_);
|
| g_routing_id_proxy_map.Get().erase(routing_id_);
|
| }
|
|
|
| +blink::WebFrame* RenderFrameProxy::GetWebFrame() {
|
| + return render_frame_->GetWebFrame();
|
| +}
|
| +
|
| +void RenderFrameProxy::DidCommitCompositorFrame() {
|
| + if (compositing_helper_)
|
| + compositing_helper_->DidCommitCompositorFrame();
|
| +}
|
| +
|
| bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) {
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(RenderFrameProxy, msg)
|
| IPC_MESSAGE_HANDLER(FrameMsg_DeleteProxy, OnDeleteProxy)
|
| + IPC_MESSAGE_HANDLER(FrameMsg_ChildFrameProcessGone, OnChildFrameProcessGone)
|
| + IPC_MESSAGE_HANDLER(FrameMsg_BuffersSwapped, OnBuffersSwapped)
|
| + IPC_MESSAGE_HANDLER_GENERIC(FrameMsg_CompositorFrameSwapped,
|
| + OnCompositorFrameSwapped(msg))
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
|
|
| @@ -86,4 +103,46 @@ void RenderFrameProxy::OnDeleteProxy() {
|
| delete this;
|
| }
|
|
|
| +void RenderFrameProxy::OnChildFrameProcessGone() {
|
| + if (compositing_helper_)
|
| + compositing_helper_->ChildFrameGone();
|
| +}
|
| +
|
| +void RenderFrameProxy::OnBuffersSwapped(
|
| + const FrameMsg_BuffersSwapped_Params& params) {
|
| + if (!compositing_helper_.get()) {
|
| + compositing_helper_ =
|
| + ChildFrameCompositingHelper::CreateCompositingHelperForRenderFrame(
|
| + GetWebFrame(), this, routing_id_);
|
| + compositing_helper_->EnableCompositing(true);
|
| + }
|
| + compositing_helper_->OnBuffersSwapped(
|
| + params.size,
|
| + params.mailbox,
|
| + params.gpu_route_id,
|
| + params.gpu_host_id,
|
| + render_frame_->render_view()->GetWebView()->deviceScaleFactor());
|
| +}
|
| +
|
| +void RenderFrameProxy::OnCompositorFrameSwapped(const IPC::Message& message) {
|
| + FrameMsg_CompositorFrameSwapped::Param param;
|
| + if (!FrameMsg_CompositorFrameSwapped::Read(&message, ¶m))
|
| + return;
|
| +
|
| + scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
|
| + param.a.frame.AssignTo(frame.get());
|
| +
|
| + if (!compositing_helper_.get()) {
|
| + compositing_helper_ =
|
| + ChildFrameCompositingHelper::CreateCompositingHelperForRenderFrame(
|
| + GetWebFrame(), this, routing_id_);
|
| + compositing_helper_->EnableCompositing(true);
|
| + }
|
| + compositing_helper_->OnCompositorFrameSwapped(frame.Pass(),
|
| + param.a.producing_route_id,
|
| + param.a.output_surface_id,
|
| + param.a.producing_host_id,
|
| + param.a.shared_memory_handle);
|
| +}
|
| +
|
| } // namespace
|
|
|