| 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 |