Index: content/renderer/gpu/render_widget_compositor.cc |
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc |
index ee42edfff958bae6efe0786bf2dcebd99a548fee..184e51504c8e2a0181624fc035a87dd92fe74eb4 100644 |
--- a/content/renderer/gpu/render_widget_compositor.cc |
+++ b/content/renderer/gpu/render_widget_compositor.cc |
@@ -31,10 +31,12 @@ |
#include "cc/output/copy_output_result.h" |
#include "cc/output/latency_info_swap_promise.h" |
#include "cc/output/swap_promise.h" |
+#include "cc/proto/compositor_message.pb.h" |
#include "cc/resources/single_release_callback.h" |
#include "cc/scheduler/begin_frame_source.h" |
#include "cc/trees/latency_info_swap_promise_monitor.h" |
#include "cc/trees/layer_tree_host.h" |
+#include "cc/trees/remote_proto_channel.h" |
#include "components/scheduler/renderer/renderer_scheduler.h" |
#include "content/common/content_switches_internal.h" |
#include "content/common/gpu/client/context_provider_command_buffer.h" |
@@ -215,6 +217,7 @@ RenderWidgetCompositor::RenderWidgetCompositor( |
compositor_deps_(compositor_deps), |
never_visible_(false), |
layout_and_paint_async_callback_(nullptr), |
+ remote_proto_channel_receiver_(nullptr), |
weak_factory_(this) { |
} |
@@ -968,6 +971,17 @@ void RenderWidgetCompositor::DidAbortSwapBuffers() { |
widget_->OnSwapBuffersAborted(); |
} |
+void RenderWidgetCompositor::SetReceiver(Receiver* receiver) { |
+ remote_proto_channel_receiver_ = receiver; |
+} |
+ |
+void RenderWidgetCompositor::SendCompositorProto( |
+ const cc::proto::CompositorMessage& proto) { |
+ std::vector<char> serialized(proto.ByteSize()); |
+ proto.SerializeToArray(serialized.data(), serialized.size()); |
+ widget_->SendCompositorProto(serialized); |
+} |
+ |
void RenderWidgetCompositor::RecordFrameTimingEvents( |
scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, |
scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { |
@@ -1005,6 +1019,20 @@ void RenderWidgetCompositor::SetSurfaceIdNamespace( |
layer_tree_host_->set_surface_id_namespace(surface_id_namespace); |
} |
+void RenderWidgetCompositor::OnHandleCompositorProto( |
+ const std::vector<char>& proto) { |
+ if (!remote_proto_channel_receiver_) |
+ return; |
+ |
+ cc::proto::CompositorMessage deserialized; |
+ if (!deserialized.ParseFromArray(proto.data(), proto.size())) { |
+ LOG(ERROR) << "Unable to parse compositor proto."; |
+ return; |
+ } |
+ |
+ remote_proto_channel_receiver_->OnProtoReceived(deserialized); |
+} |
+ |
cc::ManagedMemoryPolicy RenderWidgetCompositor::GetGpuMemoryPolicy( |
const cc::ManagedMemoryPolicy& policy) { |
cc::ManagedMemoryPolicy actual = policy; |