| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "blimp/client/core/compositor/blimp_compositor.h" | 5 #include "blimp/client/core/compositor/blimp_compositor.h" |
| 6 | 6 |
| 7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/numerics/safe_conversions.h" | 10 #include "base/numerics/safe_conversions.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 | 56 |
| 57 } // namespace | 57 } // namespace |
| 58 | 58 |
| 59 BlimpCompositor::BlimpCompositor( | 59 BlimpCompositor::BlimpCompositor( |
| 60 int render_widget_id, | 60 int render_widget_id, |
| 61 BlimpCompositorDependencies* compositor_dependencies, | 61 BlimpCompositorDependencies* compositor_dependencies, |
| 62 BlimpCompositorClient* client) | 62 BlimpCompositorClient* client) |
| 63 : render_widget_id_(render_widget_id), | 63 : render_widget_id_(render_widget_id), |
| 64 client_(client), | 64 client_(client), |
| 65 compositor_dependencies_(compositor_dependencies), | 65 compositor_dependencies_(compositor_dependencies), |
| 66 host_should_be_visible_(false), | |
| 67 output_surface_(nullptr), | 66 output_surface_(nullptr), |
| 68 output_surface_request_pending_(false), | 67 output_surface_request_pending_(false), |
| 69 layer_(cc::Layer::Create()), | 68 layer_(cc::Layer::Create()), |
| 70 remote_proto_channel_receiver_(nullptr), | 69 remote_proto_channel_receiver_(nullptr), |
| 71 weak_ptr_factory_(this) { | 70 weak_ptr_factory_(this) { |
| 72 DCHECK(thread_checker_.CalledOnValidThread()); | 71 DCHECK(thread_checker_.CalledOnValidThread()); |
| 73 | 72 |
| 74 surface_id_allocator_ = base::MakeUnique<cc::SurfaceIdAllocator>( | 73 surface_id_allocator_ = base::MakeUnique<cc::SurfaceIdAllocator>( |
| 75 GetEmbedderDeps()->AllocateSurfaceClientId()); | 74 GetEmbedderDeps()->AllocateSurfaceClientId()); |
| 76 GetEmbedderDeps()->GetSurfaceManager()->RegisterSurfaceClientId( | 75 GetEmbedderDeps()->GetSurfaceManager()->RegisterSurfaceClientId( |
| 77 surface_id_allocator_->client_id()); | 76 surface_id_allocator_->client_id()); |
| 77 CreateLayerTreeHost(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 BlimpCompositor::~BlimpCompositor() { | 80 BlimpCompositor::~BlimpCompositor() { |
| 81 DCHECK(thread_checker_.CalledOnValidThread()); | 81 DCHECK(thread_checker_.CalledOnValidThread()); |
| 82 | 82 |
| 83 if (host_) | 83 DestroyLayerTreeHost(); |
| 84 DestroyLayerTreeHost(); | |
| 85 | |
| 86 GetEmbedderDeps()->GetSurfaceManager()->InvalidateSurfaceClientId( | 84 GetEmbedderDeps()->GetSurfaceManager()->InvalidateSurfaceClientId( |
| 87 surface_id_allocator_->client_id()); | 85 surface_id_allocator_->client_id()); |
| 88 } | 86 } |
| 89 | 87 |
| 90 void BlimpCompositor::SetVisible(bool visible) { | 88 void BlimpCompositor::SetVisible(bool visible) { |
| 91 host_should_be_visible_ = visible; | 89 host_->SetVisible(visible); |
| 92 if (host_) | |
| 93 host_->SetVisible(host_should_be_visible_); | |
| 94 } | 90 } |
| 95 | 91 |
| 96 bool BlimpCompositor::OnTouchEvent(const ui::MotionEvent& motion_event) { | 92 bool BlimpCompositor::OnTouchEvent(const ui::MotionEvent& motion_event) { |
| 97 if (input_manager_) | 93 if (input_manager_) |
| 98 return input_manager_->OnTouchEvent(motion_event); | 94 return input_manager_->OnTouchEvent(motion_event); |
| 99 return false; | 95 return false; |
| 100 } | 96 } |
| 101 | 97 |
| 102 void BlimpCompositor::RequestNewOutputSurface() { | 98 void BlimpCompositor::RequestNewOutputSurface() { |
| 103 DCHECK(!surface_factory_); | 99 DCHECK(!surface_factory_); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 129 void BlimpCompositor::OnCompositorMessageReceived( | 125 void BlimpCompositor::OnCompositorMessageReceived( |
| 130 std::unique_ptr<cc::proto::CompositorMessage> message) { | 126 std::unique_ptr<cc::proto::CompositorMessage> message) { |
| 131 DCHECK(message->has_to_impl()); | 127 DCHECK(message->has_to_impl()); |
| 132 const cc::proto::CompositorMessageToImpl& to_impl_proto = message->to_impl(); | 128 const cc::proto::CompositorMessageToImpl& to_impl_proto = message->to_impl(); |
| 133 | 129 |
| 134 DCHECK(to_impl_proto.has_message_type()); | 130 DCHECK(to_impl_proto.has_message_type()); |
| 135 switch (to_impl_proto.message_type()) { | 131 switch (to_impl_proto.message_type()) { |
| 136 case cc::proto::CompositorMessageToImpl::UNKNOWN: | 132 case cc::proto::CompositorMessageToImpl::UNKNOWN: |
| 137 NOTIMPLEMENTED() << "Ignoring message of UNKNOWN type"; | 133 NOTIMPLEMENTED() << "Ignoring message of UNKNOWN type"; |
| 138 break; | 134 break; |
| 139 case cc::proto::CompositorMessageToImpl::INITIALIZE_IMPL: | |
| 140 DCHECK(!host_); | |
| 141 | |
| 142 // Create the remote client LayerTreeHost for the compositor. | |
| 143 CreateLayerTreeHost(); | |
| 144 break; | |
| 145 case cc::proto::CompositorMessageToImpl::CLOSE_IMPL: | |
| 146 DCHECK(host_); | |
| 147 | |
| 148 // Destroy the remote client LayerTreeHost for the compositor. | |
| 149 DestroyLayerTreeHost(); | |
| 150 break; | |
| 151 default: | 135 default: |
| 152 // We should have a receiver if we're getting compositor messages that | 136 // We should have a receiver if we're getting compositor messages that |
| 153 // are not INITIALIZE_IMPL or CLOSE_IMPL. | 137 // are not INITIALIZE_IMPL or CLOSE_IMPL. |
| 154 DCHECK(remote_proto_channel_receiver_); | 138 DCHECK(remote_proto_channel_receiver_); |
| 155 remote_proto_channel_receiver_->OnProtoReceived(std::move(message)); | 139 remote_proto_channel_receiver_->OnProtoReceived(std::move(message)); |
| 156 } | 140 } |
| 157 } | 141 } |
| 158 | 142 |
| 159 void BlimpCompositor::OnContextProvidersCreated( | 143 void BlimpCompositor::OnContextProvidersCreated( |
| 160 const scoped_refptr<cc::ContextProvider>& compositor_context_provider, | 144 const scoped_refptr<cc::ContextProvider>& compositor_context_provider, |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 settings->abort_commit_before_output_surface_creation = false; | 270 settings->abort_commit_before_output_surface_creation = false; |
| 287 params.settings = settings; | 271 params.settings = settings; |
| 288 | 272 |
| 289 params.animation_host = cc::AnimationHost::CreateMainInstance(); | 273 params.animation_host = cc::AnimationHost::CreateMainInstance(); |
| 290 | 274 |
| 291 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = | 275 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = |
| 292 compositor_dependencies_->GetCompositorTaskRunner(); | 276 compositor_dependencies_->GetCompositorTaskRunner(); |
| 293 | 277 |
| 294 host_ = cc::LayerTreeHost::CreateRemoteClient( | 278 host_ = cc::LayerTreeHost::CreateRemoteClient( |
| 295 this /* remote_proto_channel */, compositor_task_runner, ¶ms); | 279 this /* remote_proto_channel */, compositor_task_runner, ¶ms); |
| 296 host_->SetVisible(host_should_be_visible_); | |
| 297 | 280 |
| 298 DCHECK(!input_manager_); | 281 DCHECK(!input_manager_); |
| 299 input_manager_ = BlimpInputManager::Create( | 282 input_manager_ = BlimpInputManager::Create( |
| 300 this, base::ThreadTaskRunnerHandle::Get(), compositor_task_runner, | 283 this, base::ThreadTaskRunnerHandle::Get(), compositor_task_runner, |
| 301 host_->GetInputHandler()); | 284 host_->GetInputHandler()); |
| 302 } | 285 } |
| 303 | 286 |
| 304 void BlimpCompositor::DestroyLayerTreeHost() { | 287 void BlimpCompositor::DestroyLayerTreeHost() { |
| 305 DCHECK(host_); | 288 DCHECK(host_); |
| 306 VLOG(1) << "Destroying LayerTreeHost for render widget: " | 289 VLOG(1) << "Destroying LayerTreeHost for render widget: " |
| (...skipping 15 matching lines...) Expand all Loading... |
| 322 // Cancel any outstanding OutputSurface requests. That way if we get an async | 305 // Cancel any outstanding OutputSurface requests. That way if we get an async |
| 323 // callback related to the old request we know to drop it. | 306 // callback related to the old request we know to drop it. |
| 324 output_surface_request_pending_ = false; | 307 output_surface_request_pending_ = false; |
| 325 | 308 |
| 326 // Make sure we don't have a receiver at this point. | 309 // Make sure we don't have a receiver at this point. |
| 327 DCHECK(!remote_proto_channel_receiver_); | 310 DCHECK(!remote_proto_channel_receiver_); |
| 328 } | 311 } |
| 329 | 312 |
| 330 } // namespace client | 313 } // namespace client |
| 331 } // namespace blimp | 314 } // namespace blimp |
| OLD | NEW |