OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/gpu/render_widget_compositor.h" | 5 #include "content/renderer/gpu/render_widget_compositor.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "cc/input/layer_selection_bound.h" | 31 #include "cc/input/layer_selection_bound.h" |
32 #include "cc/layers/layer.h" | 32 #include "cc/layers/layer.h" |
33 #include "cc/output/begin_frame_args.h" | 33 #include "cc/output/begin_frame_args.h" |
34 #include "cc/output/copy_output_request.h" | 34 #include "cc/output/copy_output_request.h" |
35 #include "cc/output/copy_output_result.h" | 35 #include "cc/output/copy_output_result.h" |
36 #include "cc/output/latency_info_swap_promise.h" | 36 #include "cc/output/latency_info_swap_promise.h" |
37 #include "cc/output/swap_promise.h" | 37 #include "cc/output/swap_promise.h" |
38 #include "cc/proto/compositor_message.pb.h" | 38 #include "cc/proto/compositor_message.pb.h" |
39 #include "cc/resources/single_release_callback.h" | 39 #include "cc/resources/single_release_callback.h" |
40 #include "cc/scheduler/begin_frame_source.h" | 40 #include "cc/scheduler/begin_frame_source.h" |
| 41 #include "cc/surfaces/surface_sequence_generator.h" |
41 #include "cc/trees/latency_info_swap_promise_monitor.h" | 42 #include "cc/trees/latency_info_swap_promise_monitor.h" |
42 #include "cc/trees/layer_tree_host.h" | 43 #include "cc/trees/layer_tree_host.h" |
43 #include "cc/trees/remote_proto_channel.h" | 44 #include "cc/trees/remote_proto_channel.h" |
| 45 #include "cc/trees/swap_promise_manager.h" |
44 #include "content/common/content_switches_internal.h" | 46 #include "content/common/content_switches_internal.h" |
45 #include "content/common/gpu/client/context_provider_command_buffer.h" | 47 #include "content/common/gpu/client/context_provider_command_buffer.h" |
46 #include "content/common/layer_tree_settings_factory.h" | 48 #include "content/common/layer_tree_settings_factory.h" |
47 #include "content/public/common/content_client.h" | 49 #include "content/public/common/content_client.h" |
48 #include "content/public/common/content_switches.h" | 50 #include "content/public/common/content_switches.h" |
49 #include "content/renderer/gpu/render_widget_compositor_delegate.h" | 51 #include "content/renderer/gpu/render_widget_compositor_delegate.h" |
50 #include "content/renderer/input/input_handler_manager.h" | 52 #include "content/renderer/input/input_handler_manager.h" |
51 #include "gpu/command_buffer/client/gles2_interface.h" | 53 #include "gpu/command_buffer/client/gles2_interface.h" |
52 #include "gpu/command_buffer/service/gpu_switches.h" | 54 #include "gpu/command_buffer/service/gpu_switches.h" |
53 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac
k.h" | 55 #include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallbac
k.h" |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 | 620 |
619 void RenderWidgetCompositor::SetNeedsForcedRedraw() { | 621 void RenderWidgetCompositor::SetNeedsForcedRedraw() { |
620 layer_tree_host_->SetNextCommitForcesRedraw(); | 622 layer_tree_host_->SetNextCommitForcesRedraw(); |
621 setNeedsAnimate(); | 623 setNeedsAnimate(); |
622 } | 624 } |
623 | 625 |
624 std::unique_ptr<cc::SwapPromiseMonitor> | 626 std::unique_ptr<cc::SwapPromiseMonitor> |
625 RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( | 627 RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( |
626 ui::LatencyInfo* latency) { | 628 ui::LatencyInfo* latency) { |
627 return std::unique_ptr<cc::SwapPromiseMonitor>( | 629 return std::unique_ptr<cc::SwapPromiseMonitor>( |
628 new cc::LatencyInfoSwapPromiseMonitor(latency, layer_tree_host_.get(), | 630 new cc::LatencyInfoSwapPromiseMonitor( |
629 NULL)); | 631 latency, layer_tree_host_->GetSwapPromiseManager(), NULL)); |
630 } | 632 } |
631 | 633 |
632 void RenderWidgetCompositor::QueueSwapPromise( | 634 void RenderWidgetCompositor::QueueSwapPromise( |
633 std::unique_ptr<cc::SwapPromise> swap_promise) { | 635 std::unique_ptr<cc::SwapPromise> swap_promise) { |
634 layer_tree_host_->QueueSwapPromise(std::move(swap_promise)); | 636 layer_tree_host_->GetSwapPromiseManager()->QueueSwapPromise( |
| 637 std::move(swap_promise)); |
635 } | 638 } |
636 | 639 |
637 int RenderWidgetCompositor::GetSourceFrameNumber() const { | 640 int RenderWidgetCompositor::GetSourceFrameNumber() const { |
638 return layer_tree_host_->SourceFrameNumber(); | 641 return layer_tree_host_->SourceFrameNumber(); |
639 } | 642 } |
640 | 643 |
641 void RenderWidgetCompositor::SetNeedsUpdateLayers() { | 644 void RenderWidgetCompositor::SetNeedsUpdateLayers() { |
642 layer_tree_host_->SetNeedsUpdateLayers(); | 645 layer_tree_host_->SetNeedsUpdateLayers(); |
643 } | 646 } |
644 | 647 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 std::unique_ptr<cc::CopyOutputRequest> request = | 926 std::unique_ptr<cc::CopyOutputRequest> request = |
924 cc::CopyOutputRequest::CreateBitmapRequest(base::Bind( | 927 cc::CopyOutputRequest::CreateBitmapRequest(base::Bind( |
925 [](blink::WebCompositeAndReadbackAsyncCallback* callback, | 928 [](blink::WebCompositeAndReadbackAsyncCallback* callback, |
926 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | 929 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
927 std::unique_ptr<cc::CopyOutputResult> result) { | 930 std::unique_ptr<cc::CopyOutputResult> result) { |
928 task_runner->PostTask(FROM_HERE, | 931 task_runner->PostTask(FROM_HERE, |
929 base::Bind(&CompositeAndReadbackAsyncCallback, | 932 base::Bind(&CompositeAndReadbackAsyncCallback, |
930 callback, base::Passed(&result))); | 933 callback, base::Passed(&result))); |
931 }, | 934 }, |
932 callback, base::Passed(&main_thread_task_runner))); | 935 callback, base::Passed(&main_thread_task_runner))); |
933 layer_tree_host_->QueueSwapPromise( | 936 layer_tree_host_->GetSwapPromiseManager()->QueueSwapPromise( |
934 delegate_->RequestCopyOfOutputForLayoutTest(std::move(request))); | 937 delegate_->RequestCopyOfOutputForLayoutTest(std::move(request))); |
935 | 938 |
936 // Force a commit to happen. The temporary copy output request will | 939 // Force a commit to happen. The temporary copy output request will |
937 // be installed after layout which will happen as a part of the commit, for | 940 // be installed after layout which will happen as a part of the commit, for |
938 // widgets that delay the creation of their output surface. | 941 // widgets that delay the creation of their output surface. |
939 if (CompositeIsSynchronous()) { | 942 if (CompositeIsSynchronous()) { |
940 base::ThreadTaskRunnerHandle::Get()->PostTask( | 943 base::ThreadTaskRunnerHandle::Get()->PostTask( |
941 FROM_HERE, base::Bind(&RenderWidgetCompositor::SynchronouslyComposite, | 944 FROM_HERE, base::Bind(&RenderWidgetCompositor::SynchronouslyComposite, |
942 weak_factory_.GetWeakPtr())); | 945 weak_factory_.GetWeakPtr())); |
943 } else { | 946 } else { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1117 void RenderWidgetCompositor::SendCompositorProto( | 1120 void RenderWidgetCompositor::SendCompositorProto( |
1118 const cc::proto::CompositorMessage& proto) { | 1121 const cc::proto::CompositorMessage& proto) { |
1119 int signed_size = proto.ByteSize(); | 1122 int signed_size = proto.ByteSize(); |
1120 size_t unsigned_size = base::checked_cast<size_t>(signed_size); | 1123 size_t unsigned_size = base::checked_cast<size_t>(signed_size); |
1121 std::vector<uint8_t> serialized(unsigned_size); | 1124 std::vector<uint8_t> serialized(unsigned_size); |
1122 proto.SerializeToArray(serialized.data(), signed_size); | 1125 proto.SerializeToArray(serialized.data(), signed_size); |
1123 delegate_->ForwardCompositorProto(serialized); | 1126 delegate_->ForwardCompositorProto(serialized); |
1124 } | 1127 } |
1125 | 1128 |
1126 void RenderWidgetCompositor::SetSurfaceClientId(uint32_t surface_client_id) { | 1129 void RenderWidgetCompositor::SetSurfaceClientId(uint32_t surface_client_id) { |
1127 layer_tree_host_->SetSurfaceClientId(surface_client_id); | 1130 layer_tree_host_->GetSurfaceSequenceGenerator()->set_surface_client_id( |
| 1131 surface_client_id); |
1128 } | 1132 } |
1129 | 1133 |
1130 void RenderWidgetCompositor::OnHandleCompositorProto( | 1134 void RenderWidgetCompositor::OnHandleCompositorProto( |
1131 const std::vector<uint8_t>& proto) { | 1135 const std::vector<uint8_t>& proto) { |
1132 DCHECK(remote_proto_channel_receiver_); | 1136 DCHECK(remote_proto_channel_receiver_); |
1133 | 1137 |
1134 std::unique_ptr<cc::proto::CompositorMessage> deserialized( | 1138 std::unique_ptr<cc::proto::CompositorMessage> deserialized( |
1135 new cc::proto::CompositorMessage); | 1139 new cc::proto::CompositorMessage); |
1136 int signed_size = base::checked_cast<int>(proto.size()); | 1140 int signed_size = base::checked_cast<int>(proto.size()); |
1137 if (!deserialized->ParseFromArray(proto.data(), signed_size)) { | 1141 if (!deserialized->ParseFromArray(proto.data(), signed_size)) { |
1138 LOG(ERROR) << "Unable to parse compositor proto."; | 1142 LOG(ERROR) << "Unable to parse compositor proto."; |
1139 return; | 1143 return; |
1140 } | 1144 } |
1141 | 1145 |
1142 remote_proto_channel_receiver_->OnProtoReceived(std::move(deserialized)); | 1146 remote_proto_channel_receiver_->OnProtoReceived(std::move(deserialized)); |
1143 } | 1147 } |
1144 | 1148 |
1145 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor( | 1149 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor( |
1146 float device_scale) { | 1150 float device_scale) { |
1147 layer_tree_host_->GetLayerTree()->SetPaintedDeviceScaleFactor(device_scale); | 1151 layer_tree_host_->GetLayerTree()->SetPaintedDeviceScaleFactor(device_scale); |
1148 } | 1152 } |
1149 | 1153 |
1150 } // namespace content | 1154 } // namespace content |
OLD | NEW |