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 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 "mismatching enums: SHOWN"); | 197 "mismatching enums: SHOWN"); |
198 | 198 |
199 static cc::TopControlsState ConvertTopControlsState( | 199 static cc::TopControlsState ConvertTopControlsState( |
200 WebTopControlsState state) { | 200 WebTopControlsState state) { |
201 return static_cast<cc::TopControlsState>(state); | 201 return static_cast<cc::TopControlsState>(state); |
202 } | 202 } |
203 | 203 |
204 } // namespace | 204 } // namespace |
205 | 205 |
206 // static | 206 // static |
207 scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( | 207 std::unique_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( |
208 RenderWidgetCompositorDelegate* delegate, | 208 RenderWidgetCompositorDelegate* delegate, |
209 float device_scale_factor, | 209 float device_scale_factor, |
210 CompositorDependencies* compositor_deps) { | 210 CompositorDependencies* compositor_deps) { |
211 scoped_ptr<RenderWidgetCompositor> compositor( | 211 std::unique_ptr<RenderWidgetCompositor> compositor( |
212 new RenderWidgetCompositor(delegate, compositor_deps)); | 212 new RenderWidgetCompositor(delegate, compositor_deps)); |
213 compositor->Initialize(device_scale_factor); | 213 compositor->Initialize(device_scale_factor); |
214 return compositor; | 214 return compositor; |
215 } | 215 } |
216 | 216 |
217 RenderWidgetCompositor::RenderWidgetCompositor( | 217 RenderWidgetCompositor::RenderWidgetCompositor( |
218 RenderWidgetCompositorDelegate* delegate, | 218 RenderWidgetCompositorDelegate* delegate, |
219 CompositorDependencies* compositor_deps) | 219 CompositorDependencies* compositor_deps) |
220 : num_failed_recreate_attempts_(0), | 220 : num_failed_recreate_attempts_(0), |
221 delegate_(delegate), | 221 delegate_(delegate), |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = | 476 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = |
477 compositor_deps_->GetGpuMemoryBufferManager(); | 477 compositor_deps_->GetGpuMemoryBufferManager(); |
478 cc::TaskGraphRunner* task_graph_runner = | 478 cc::TaskGraphRunner* task_graph_runner = |
479 compositor_deps_->GetTaskGraphRunner(); | 479 compositor_deps_->GetTaskGraphRunner(); |
480 | 480 |
481 bool use_remote_compositing = cmd->HasSwitch(switches::kUseRemoteCompositing); | 481 bool use_remote_compositing = cmd->HasSwitch(switches::kUseRemoteCompositing); |
482 | 482 |
483 if (use_remote_compositing) | 483 if (use_remote_compositing) |
484 settings.use_external_begin_frame_source = false; | 484 settings.use_external_begin_frame_source = false; |
485 | 485 |
486 scoped_ptr<cc::BeginFrameSource> external_begin_frame_source; | 486 std::unique_ptr<cc::BeginFrameSource> external_begin_frame_source; |
487 if (settings.use_external_begin_frame_source) { | 487 if (settings.use_external_begin_frame_source) { |
488 external_begin_frame_source = delegate_->CreateExternalBeginFrameSource(); | 488 external_begin_frame_source = delegate_->CreateExternalBeginFrameSource(); |
489 } | 489 } |
490 | 490 |
491 cc::LayerTreeHost::InitParams params; | 491 cc::LayerTreeHost::InitParams params; |
492 params.client = this; | 492 params.client = this; |
493 params.shared_bitmap_manager = shared_bitmap_manager; | 493 params.shared_bitmap_manager = shared_bitmap_manager; |
494 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; | 494 params.gpu_memory_buffer_manager = gpu_memory_buffer_manager; |
495 params.settings = &settings; | 495 params.settings = &settings; |
496 params.task_graph_runner = task_graph_runner; | 496 params.task_graph_runner = task_graph_runner; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 | 538 |
539 void RenderWidgetCompositor::SetNeedsRedrawRect(gfx::Rect damage_rect) { | 539 void RenderWidgetCompositor::SetNeedsRedrawRect(gfx::Rect damage_rect) { |
540 layer_tree_host_->SetNeedsRedrawRect(damage_rect); | 540 layer_tree_host_->SetNeedsRedrawRect(damage_rect); |
541 } | 541 } |
542 | 542 |
543 void RenderWidgetCompositor::SetNeedsForcedRedraw() { | 543 void RenderWidgetCompositor::SetNeedsForcedRedraw() { |
544 layer_tree_host_->SetNextCommitForcesRedraw(); | 544 layer_tree_host_->SetNextCommitForcesRedraw(); |
545 setNeedsAnimate(); | 545 setNeedsAnimate(); |
546 } | 546 } |
547 | 547 |
548 scoped_ptr<cc::SwapPromiseMonitor> | 548 std::unique_ptr<cc::SwapPromiseMonitor> |
549 RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( | 549 RenderWidgetCompositor::CreateLatencyInfoSwapPromiseMonitor( |
550 ui::LatencyInfo* latency) { | 550 ui::LatencyInfo* latency) { |
551 return scoped_ptr<cc::SwapPromiseMonitor>( | 551 return std::unique_ptr<cc::SwapPromiseMonitor>( |
552 new cc::LatencyInfoSwapPromiseMonitor( | 552 new cc::LatencyInfoSwapPromiseMonitor(latency, layer_tree_host_.get(), |
553 latency, layer_tree_host_.get(), NULL)); | 553 NULL)); |
554 } | 554 } |
555 | 555 |
556 void RenderWidgetCompositor::QueueSwapPromise( | 556 void RenderWidgetCompositor::QueueSwapPromise( |
557 scoped_ptr<cc::SwapPromise> swap_promise) { | 557 std::unique_ptr<cc::SwapPromise> swap_promise) { |
558 layer_tree_host_->QueueSwapPromise(std::move(swap_promise)); | 558 layer_tree_host_->QueueSwapPromise(std::move(swap_promise)); |
559 } | 559 } |
560 | 560 |
561 int RenderWidgetCompositor::GetSourceFrameNumber() const { | 561 int RenderWidgetCompositor::GetSourceFrameNumber() const { |
562 return layer_tree_host_->source_frame_number(); | 562 return layer_tree_host_->source_frame_number(); |
563 } | 563 } |
564 | 564 |
565 void RenderWidgetCompositor::SetNeedsUpdateLayers() { | 565 void RenderWidgetCompositor::SetNeedsUpdateLayers() { |
566 layer_tree_host_->SetNeedsUpdateLayers(); | 566 layer_tree_host_->SetNeedsUpdateLayers(); |
567 } | 567 } |
568 | 568 |
569 void RenderWidgetCompositor::SetNeedsCommit() { | 569 void RenderWidgetCompositor::SetNeedsCommit() { |
570 layer_tree_host_->SetNeedsCommit(); | 570 layer_tree_host_->SetNeedsCommit(); |
571 } | 571 } |
572 | 572 |
573 void RenderWidgetCompositor::NotifyInputThrottledUntilCommit() { | 573 void RenderWidgetCompositor::NotifyInputThrottledUntilCommit() { |
574 layer_tree_host_->NotifyInputThrottledUntilCommit(); | 574 layer_tree_host_->NotifyInputThrottledUntilCommit(); |
575 } | 575 } |
576 | 576 |
577 const cc::Layer* RenderWidgetCompositor::GetRootLayer() const { | 577 const cc::Layer* RenderWidgetCompositor::GetRootLayer() const { |
578 return layer_tree_host_->root_layer(); | 578 return layer_tree_host_->root_layer(); |
579 } | 579 } |
580 | 580 |
581 int RenderWidgetCompositor::ScheduleMicroBenchmark( | 581 int RenderWidgetCompositor::ScheduleMicroBenchmark( |
582 const std::string& name, | 582 const std::string& name, |
583 scoped_ptr<base::Value> value, | 583 std::unique_ptr<base::Value> value, |
584 const base::Callback<void(scoped_ptr<base::Value>)>& callback) { | 584 const base::Callback<void(std::unique_ptr<base::Value>)>& callback) { |
585 return layer_tree_host_->ScheduleMicroBenchmark(name, std::move(value), | 585 return layer_tree_host_->ScheduleMicroBenchmark(name, std::move(value), |
586 callback); | 586 callback); |
587 } | 587 } |
588 | 588 |
589 bool RenderWidgetCompositor::SendMessageToMicroBenchmark( | 589 bool RenderWidgetCompositor::SendMessageToMicroBenchmark( |
590 int id, | 590 int id, |
591 scoped_ptr<base::Value> value) { | 591 std::unique_ptr<base::Value> value) { |
592 return layer_tree_host_->SendMessageToMicroBenchmark(id, std::move(value)); | 592 return layer_tree_host_->SendMessageToMicroBenchmark(id, std::move(value)); |
593 } | 593 } |
594 | 594 |
595 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { | 595 void RenderWidgetCompositor::setRootLayer(const blink::WebLayer& layer) { |
596 layer_tree_host_->SetRootLayer( | 596 layer_tree_host_->SetRootLayer( |
597 static_cast<const cc_blink::WebLayerImpl*>(&layer)->layer()); | 597 static_cast<const cc_blink::WebLayerImpl*>(&layer)->layer()); |
598 } | 598 } |
599 | 599 |
600 void RenderWidgetCompositor::clearRootLayer() { | 600 void RenderWidgetCompositor::clearRootLayer() { |
601 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); | 601 layer_tree_host_->SetRootLayer(scoped_refptr<cc::Layer>()); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 void RenderWidgetCompositor::setHaveScrollEventHandlers(bool has_handlers) { | 775 void RenderWidgetCompositor::setHaveScrollEventHandlers(bool has_handlers) { |
776 layer_tree_host_->SetHaveScrollEventHandlers(has_handlers); | 776 layer_tree_host_->SetHaveScrollEventHandlers(has_handlers); |
777 } | 777 } |
778 | 778 |
779 bool RenderWidgetCompositor::haveScrollEventHandlers() const { | 779 bool RenderWidgetCompositor::haveScrollEventHandlers() const { |
780 return layer_tree_host_->have_scroll_event_handlers(); | 780 return layer_tree_host_->have_scroll_event_handlers(); |
781 } | 781 } |
782 | 782 |
783 void CompositeAndReadbackAsyncCallback( | 783 void CompositeAndReadbackAsyncCallback( |
784 blink::WebCompositeAndReadbackAsyncCallback* callback, | 784 blink::WebCompositeAndReadbackAsyncCallback* callback, |
785 scoped_ptr<cc::CopyOutputResult> result) { | 785 std::unique_ptr<cc::CopyOutputResult> result) { |
786 if (result->HasBitmap()) { | 786 if (result->HasBitmap()) { |
787 scoped_ptr<SkBitmap> result_bitmap = result->TakeBitmap(); | 787 std::unique_ptr<SkBitmap> result_bitmap = result->TakeBitmap(); |
788 callback->didCompositeAndReadback(*result_bitmap); | 788 callback->didCompositeAndReadback(*result_bitmap); |
789 } else { | 789 } else { |
790 callback->didCompositeAndReadback(SkBitmap()); | 790 callback->didCompositeAndReadback(SkBitmap()); |
791 } | 791 } |
792 } | 792 } |
793 | 793 |
794 bool RenderWidgetCompositor::CompositeIsSynchronous() const { | 794 bool RenderWidgetCompositor::CompositeIsSynchronous() const { |
795 return !compositor_deps_->GetCompositorImplThreadTaskRunner().get() && | 795 return !compositor_deps_->GetCompositorImplThreadTaskRunner().get() && |
796 !layer_tree_host_->settings().single_thread_proxy_scheduler; | 796 !layer_tree_host_->settings().single_thread_proxy_scheduler; |
797 } | 797 } |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 | 943 |
944 void RenderWidgetCompositor::RequestNewOutputSurface() { | 944 void RenderWidgetCompositor::RequestNewOutputSurface() { |
945 // If the host is closing, then no more compositing is possible. This | 945 // If the host is closing, then no more compositing is possible. This |
946 // prevents shutdown races between handling the close message and | 946 // prevents shutdown races between handling the close message and |
947 // the CreateOutputSurface task. | 947 // the CreateOutputSurface task. |
948 if (delegate_->IsClosing()) | 948 if (delegate_->IsClosing()) |
949 return; | 949 return; |
950 | 950 |
951 bool fallback = | 951 bool fallback = |
952 num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK; | 952 num_failed_recreate_attempts_ >= OUTPUT_SURFACE_RETRIES_BEFORE_FALLBACK; |
953 scoped_ptr<cc::OutputSurface> surface( | 953 std::unique_ptr<cc::OutputSurface> surface( |
954 delegate_->CreateOutputSurface(fallback)); | 954 delegate_->CreateOutputSurface(fallback)); |
955 | 955 |
956 if (!surface) { | 956 if (!surface) { |
957 DidFailToInitializeOutputSurface(); | 957 DidFailToInitializeOutputSurface(); |
958 return; | 958 return; |
959 } | 959 } |
960 | 960 |
961 DCHECK_EQ(surface->capabilities().max_frames_pending, 1); | 961 DCHECK_EQ(surface->capabilities().max_frames_pending, 1); |
962 | 962 |
963 layer_tree_host_->SetOutputSurface(std::move(surface)); | 963 layer_tree_host_->SetOutputSurface(std::move(surface)); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 void RenderWidgetCompositor::SendCompositorProto( | 1023 void RenderWidgetCompositor::SendCompositorProto( |
1024 const cc::proto::CompositorMessage& proto) { | 1024 const cc::proto::CompositorMessage& proto) { |
1025 int signed_size = proto.ByteSize(); | 1025 int signed_size = proto.ByteSize(); |
1026 size_t unsigned_size = base::checked_cast<size_t>(signed_size); | 1026 size_t unsigned_size = base::checked_cast<size_t>(signed_size); |
1027 std::vector<uint8_t> serialized(unsigned_size); | 1027 std::vector<uint8_t> serialized(unsigned_size); |
1028 proto.SerializeToArray(serialized.data(), signed_size); | 1028 proto.SerializeToArray(serialized.data(), signed_size); |
1029 delegate_->ForwardCompositorProto(serialized); | 1029 delegate_->ForwardCompositorProto(serialized); |
1030 } | 1030 } |
1031 | 1031 |
1032 void RenderWidgetCompositor::RecordFrameTimingEvents( | 1032 void RenderWidgetCompositor::RecordFrameTimingEvents( |
1033 scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, | 1033 std::unique_ptr<cc::FrameTimingTracker::CompositeTimingSet> |
1034 scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) { | 1034 composite_events, |
| 1035 std::unique_ptr<cc::FrameTimingTracker::MainFrameTimingSet> |
| 1036 main_frame_events) { |
1035 delegate_->RecordFrameTimingEvents(std::move(composite_events), | 1037 delegate_->RecordFrameTimingEvents(std::move(composite_events), |
1036 std::move(main_frame_events)); | 1038 std::move(main_frame_events)); |
1037 } | 1039 } |
1038 | 1040 |
1039 void RenderWidgetCompositor::SetSurfaceIdNamespace( | 1041 void RenderWidgetCompositor::SetSurfaceIdNamespace( |
1040 uint32_t surface_id_namespace) { | 1042 uint32_t surface_id_namespace) { |
1041 layer_tree_host_->set_surface_id_namespace(surface_id_namespace); | 1043 layer_tree_host_->set_surface_id_namespace(surface_id_namespace); |
1042 } | 1044 } |
1043 | 1045 |
1044 void RenderWidgetCompositor::OnHandleCompositorProto( | 1046 void RenderWidgetCompositor::OnHandleCompositorProto( |
1045 const std::vector<uint8_t>& proto) { | 1047 const std::vector<uint8_t>& proto) { |
1046 DCHECK(remote_proto_channel_receiver_); | 1048 DCHECK(remote_proto_channel_receiver_); |
1047 | 1049 |
1048 scoped_ptr<cc::proto::CompositorMessage> deserialized( | 1050 std::unique_ptr<cc::proto::CompositorMessage> deserialized( |
1049 new cc::proto::CompositorMessage); | 1051 new cc::proto::CompositorMessage); |
1050 int signed_size = base::checked_cast<int>(proto.size()); | 1052 int signed_size = base::checked_cast<int>(proto.size()); |
1051 if (!deserialized->ParseFromArray(proto.data(), signed_size)) { | 1053 if (!deserialized->ParseFromArray(proto.data(), signed_size)) { |
1052 LOG(ERROR) << "Unable to parse compositor proto."; | 1054 LOG(ERROR) << "Unable to parse compositor proto."; |
1053 return; | 1055 return; |
1054 } | 1056 } |
1055 | 1057 |
1056 remote_proto_channel_receiver_->OnProtoReceived(std::move(deserialized)); | 1058 remote_proto_channel_receiver_->OnProtoReceived(std::move(deserialized)); |
1057 } | 1059 } |
1058 | 1060 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1135 #endif | 1137 #endif |
1136 return actual; | 1138 return actual; |
1137 } | 1139 } |
1138 | 1140 |
1139 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor( | 1141 void RenderWidgetCompositor::SetPaintedDeviceScaleFactor( |
1140 float device_scale) { | 1142 float device_scale) { |
1141 layer_tree_host_->SetPaintedDeviceScaleFactor(device_scale); | 1143 layer_tree_host_->SetPaintedDeviceScaleFactor(device_scale); |
1142 } | 1144 } |
1143 | 1145 |
1144 } // namespace content | 1146 } // namespace content |
OLD | NEW |