Chromium Code Reviews| 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; |