Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: content/renderer/render_frame_proxy.cc

Issue 345823002: Move ownership of ChildFrameCompositingHelper from frame to proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes based on Ken's review and fix for Android. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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, &param))
+ 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

Powered by Google App Engine
This is Rietveld 408576698