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 641946864ca300aa16117880873e619d7d43443a..98e11b17a67f2225de212a0cca2697f0b00ba283 100644 |
--- a/content/renderer/gpu/render_widget_compositor.cc |
+++ b/content/renderer/gpu/render_widget_compositor.cc |
@@ -10,6 +10,7 @@ |
#include "base/command_line.h" |
#include "base/location.h" |
#include "base/logging.h" |
+#include "base/numerics/safe_conversions.h" |
#include "base/single_thread_task_runner.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/synchronization/lock.h" |
@@ -31,10 +32,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 +218,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 +972,18 @@ void RenderWidgetCompositor::DidAbortSwapBuffers() { |
widget_->OnSwapBuffersAborted(); |
} |
+void RenderWidgetCompositor::SetProtoReceiver(ProtoReceiver* receiver) { |
+ remote_proto_channel_receiver_ = receiver; |
+} |
+ |
+void RenderWidgetCompositor::SendCompositorProto( |
+ const cc::proto::CompositorMessage& proto) { |
+ size_t size = base::checked_cast<size_t>(proto.ByteSize()); |
+ std::vector<uint8_t> serialized(size); |
+ proto.SerializeToArray(serialized.data(), serialized.size()); |
David Trainor- moved to gerrit
2015/11/17 00:58:34
Hmm I should probably make this use proto.ByteSize
palmer
2015/11/17 01:25:32
Yep, checked_cast will CHECK if there is a problem
David Trainor- moved to gerrit
2015/11/17 04:52:26
Ah okay thanks! I tweaked this a bit to just make
|
+ widget_->ForwardCompositorProto(serialized); |
+} |
+ |
void RenderWidgetCompositor::RecordFrameTimingEvents( |
scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, |
scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { |
@@ -1005,6 +1021,21 @@ void RenderWidgetCompositor::SetSurfaceIdNamespace( |
layer_tree_host_->set_surface_id_namespace(surface_id_namespace); |
} |
+void RenderWidgetCompositor::OnHandleCompositorProto( |
+ const std::vector<uint8_t>& proto) { |
+ DCHECK(remote_proto_channel_receiver_); |
+ |
+ scoped_ptr<cc::proto::CompositorMessage> deserialized( |
+ new cc::proto::CompositorMessage); |
+ int size = base::checked_cast<int>(proto.size()); |
+ if (!deserialized->ParseFromArray(proto.data(), size)) { |
+ LOG(ERROR) << "Unable to parse compositor proto."; |
+ return; |
+ } |
+ |
+ remote_proto_channel_receiver_->OnProtoReceived(deserialized.Pass()); |
+} |
+ |
cc::ManagedMemoryPolicy RenderWidgetCompositor::GetGpuMemoryPolicy( |
const cc::ManagedMemoryPolicy& policy) { |
cc::ManagedMemoryPolicy actual = policy; |