| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host_in_process.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <stack> | 12 #include <stack> |
| 13 #include <string> | 13 #include <string> |
| 14 #include <unordered_map> | 14 #include <unordered_map> |
| 15 | 15 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 picture_layer_properties_size.ValueOrDefault(-1)); | 117 picture_layer_properties_size.ValueOrDefault(-1)); |
| 118 value->SetInteger("DisplayItemListSize", | 118 value->SetInteger("DisplayItemListSize", |
| 119 display_item_list_size.ValueOrDefault(-1)); | 119 display_item_list_size.ValueOrDefault(-1)); |
| 120 value->SetInteger("DrawingDisplayItemsSize", | 120 value->SetInteger("DrawingDisplayItemsSize", |
| 121 drawing_display_items_size.ValueOrDefault(-1)); | 121 drawing_display_items_size.ValueOrDefault(-1)); |
| 122 return value; | 122 return value; |
| 123 } | 123 } |
| 124 | 124 |
| 125 } // namespace | 125 } // namespace |
| 126 | 126 |
| 127 LayerTreeHost::InitParams::InitParams() { | 127 LayerTreeHostInProcess::InitParams::InitParams() {} |
| 128 } | |
| 129 | 128 |
| 130 LayerTreeHost::InitParams::~InitParams() { | 129 LayerTreeHostInProcess::InitParams::~InitParams() {} |
| 131 } | |
| 132 | 130 |
| 133 std::unique_ptr<LayerTreeHostInterface> LayerTreeHost::CreateThreaded( | 131 std::unique_ptr<LayerTreeHostInProcess> LayerTreeHostInProcess::CreateThreaded( |
| 134 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 132 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| 135 InitParams* params) { | 133 InitParams* params) { |
| 136 DCHECK(params->main_task_runner.get()); | 134 DCHECK(params->main_task_runner.get()); |
| 137 DCHECK(impl_task_runner.get()); | 135 DCHECK(impl_task_runner.get()); |
| 138 DCHECK(params->settings); | 136 DCHECK(params->settings); |
| 139 std::unique_ptr<LayerTreeHost> layer_tree_host( | 137 std::unique_ptr<LayerTreeHostInProcess> layer_tree_host( |
| 140 new LayerTreeHost(params, CompositorMode::THREADED)); | 138 new LayerTreeHostInProcess(params, CompositorMode::THREADED)); |
| 141 layer_tree_host->InitializeThreaded( | 139 layer_tree_host->InitializeThreaded( |
| 142 params->main_task_runner, impl_task_runner, | 140 params->main_task_runner, impl_task_runner, |
| 143 std::move(params->external_begin_frame_source)); | 141 std::move(params->external_begin_frame_source)); |
| 144 return std::move(layer_tree_host); | 142 return layer_tree_host; |
| 145 } | 143 } |
| 146 | 144 |
| 147 std::unique_ptr<LayerTreeHost> LayerTreeHost::CreateSingleThreaded( | 145 std::unique_ptr<LayerTreeHostInProcess> |
| 146 LayerTreeHostInProcess::CreateSingleThreaded( |
| 148 LayerTreeHostSingleThreadClient* single_thread_client, | 147 LayerTreeHostSingleThreadClient* single_thread_client, |
| 149 InitParams* params) { | 148 InitParams* params) { |
| 150 DCHECK(params->settings); | 149 DCHECK(params->settings); |
| 151 std::unique_ptr<LayerTreeHost> layer_tree_host( | 150 std::unique_ptr<LayerTreeHostInProcess> layer_tree_host( |
| 152 new LayerTreeHost(params, CompositorMode::SINGLE_THREADED)); | 151 new LayerTreeHostInProcess(params, CompositorMode::SINGLE_THREADED)); |
| 153 layer_tree_host->InitializeSingleThreaded( | 152 layer_tree_host->InitializeSingleThreaded( |
| 154 single_thread_client, params->main_task_runner, | 153 single_thread_client, params->main_task_runner, |
| 155 std::move(params->external_begin_frame_source)); | 154 std::move(params->external_begin_frame_source)); |
| 156 return layer_tree_host; | 155 return layer_tree_host; |
| 157 } | 156 } |
| 158 | 157 |
| 159 std::unique_ptr<LayerTreeHostInterface> LayerTreeHost::CreateRemoteServer( | 158 std::unique_ptr<LayerTreeHostInProcess> |
| 159 LayerTreeHostInProcess::CreateRemoteServer( |
| 160 RemoteProtoChannel* remote_proto_channel, | 160 RemoteProtoChannel* remote_proto_channel, |
| 161 InitParams* params) { | 161 InitParams* params) { |
| 162 DCHECK(params->main_task_runner.get()); | 162 DCHECK(params->main_task_runner.get()); |
| 163 DCHECK(params->settings); | 163 DCHECK(params->settings); |
| 164 DCHECK(remote_proto_channel); | 164 DCHECK(remote_proto_channel); |
| 165 TRACE_EVENT0("cc.remote", "LayerTreeHost::CreateRemoteServer"); | 165 TRACE_EVENT0("cc.remote", "LayerTreeHostInProcess::CreateRemoteServer"); |
| 166 | 166 |
| 167 // Using an external begin frame source is not supported on the server in | 167 // Using an external begin frame source is not supported on the server in |
| 168 // remote mode. | 168 // remote mode. |
| 169 DCHECK(!params->settings->use_external_begin_frame_source); | 169 DCHECK(!params->settings->use_external_begin_frame_source); |
| 170 DCHECK(!params->external_begin_frame_source); | 170 DCHECK(!params->external_begin_frame_source); |
| 171 DCHECK(params->image_serialization_processor); | 171 DCHECK(params->image_serialization_processor); |
| 172 | 172 |
| 173 std::unique_ptr<LayerTreeHost> layer_tree_host( | 173 std::unique_ptr<LayerTreeHostInProcess> layer_tree_host( |
| 174 new LayerTreeHost(params, CompositorMode::REMOTE)); | 174 new LayerTreeHostInProcess(params, CompositorMode::REMOTE)); |
| 175 layer_tree_host->InitializeRemoteServer(remote_proto_channel, | 175 layer_tree_host->InitializeRemoteServer(remote_proto_channel, |
| 176 params->main_task_runner); | 176 params->main_task_runner); |
| 177 return std::move(layer_tree_host); | 177 return layer_tree_host; |
| 178 } | 178 } |
| 179 | 179 |
| 180 std::unique_ptr<LayerTreeHostInterface> LayerTreeHost::CreateRemoteClient( | 180 std::unique_ptr<LayerTreeHostInProcess> |
| 181 LayerTreeHostInProcess::CreateRemoteClient( |
| 181 RemoteProtoChannel* remote_proto_channel, | 182 RemoteProtoChannel* remote_proto_channel, |
| 182 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 183 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| 183 InitParams* params) { | 184 InitParams* params) { |
| 184 DCHECK(params->main_task_runner.get()); | 185 DCHECK(params->main_task_runner.get()); |
| 185 DCHECK(params->settings); | 186 DCHECK(params->settings); |
| 186 DCHECK(remote_proto_channel); | 187 DCHECK(remote_proto_channel); |
| 187 | 188 |
| 188 // Using an external begin frame source is not supported in remote mode. | 189 // Using an external begin frame source is not supported in remote mode. |
| 189 // TODO(khushalsagar): Add support for providing an external begin frame | 190 // TODO(khushalsagar): Add support for providing an external begin frame |
| 190 // source on the client LayerTreeHost. crbug/576962 | 191 // source on the client LayerTreeHostInProcess. crbug/576962 |
| 191 DCHECK(!params->settings->use_external_begin_frame_source); | 192 DCHECK(!params->settings->use_external_begin_frame_source); |
| 192 DCHECK(!params->external_begin_frame_source); | 193 DCHECK(!params->external_begin_frame_source); |
| 193 DCHECK(params->image_serialization_processor); | 194 DCHECK(params->image_serialization_processor); |
| 194 | 195 |
| 195 std::unique_ptr<LayerTreeHost> layer_tree_host( | 196 std::unique_ptr<LayerTreeHostInProcess> layer_tree_host( |
| 196 new LayerTreeHost(params, CompositorMode::REMOTE)); | 197 new LayerTreeHostInProcess(params, CompositorMode::REMOTE)); |
| 197 layer_tree_host->InitializeRemoteClient( | 198 layer_tree_host->InitializeRemoteClient( |
| 198 remote_proto_channel, params->main_task_runner, impl_task_runner); | 199 remote_proto_channel, params->main_task_runner, impl_task_runner); |
| 199 return std::move(layer_tree_host); | 200 return layer_tree_host; |
| 200 } | 201 } |
| 201 | 202 |
| 202 LayerTreeHost::LayerTreeHost(InitParams* params, CompositorMode mode) | 203 LayerTreeHostInProcess::LayerTreeHostInProcess(InitParams* params, |
| 203 : LayerTreeHost( | 204 CompositorMode mode) |
| 205 : LayerTreeHostInProcess( |
| 204 params, | 206 params, |
| 205 mode, | 207 mode, |
| 206 base::MakeUnique<LayerTree>(std::move(params->animation_host), | 208 base::MakeUnique<LayerTree>(std::move(params->animation_host), |
| 207 this)) {} | 209 this)) {} |
| 208 | 210 |
| 209 LayerTreeHost::LayerTreeHost(InitParams* params, | 211 LayerTreeHostInProcess::LayerTreeHostInProcess( |
| 210 CompositorMode mode, | 212 InitParams* params, |
| 211 std::unique_ptr<LayerTree> layer_tree) | 213 CompositorMode mode, |
| 214 std::unique_ptr<LayerTree> layer_tree) |
| 212 : micro_benchmark_controller_(this), | 215 : micro_benchmark_controller_(this), |
| 213 layer_tree_(std::move(layer_tree)), | 216 layer_tree_(std::move(layer_tree)), |
| 214 compositor_mode_(mode), | 217 compositor_mode_(mode), |
| 215 ui_resource_manager_(base::MakeUnique<UIResourceManager>()), | 218 ui_resource_manager_(base::MakeUnique<UIResourceManager>()), |
| 216 client_(params->client), | 219 client_(params->client), |
| 217 source_frame_number_(0), | 220 source_frame_number_(0), |
| 218 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()), | 221 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()), |
| 219 settings_(*params->settings), | 222 settings_(*params->settings), |
| 220 debug_state_(settings_.initial_debug_state), | 223 debug_state_(settings_.initial_debug_state), |
| 221 visible_(false), | 224 visible_(false), |
| 222 has_gpu_rasterization_trigger_(false), | 225 has_gpu_rasterization_trigger_(false), |
| 223 content_is_suitable_for_gpu_rasterization_(true), | 226 content_is_suitable_for_gpu_rasterization_(true), |
| 224 gpu_rasterization_histogram_recorded_(false), | 227 gpu_rasterization_histogram_recorded_(false), |
| 225 did_complete_scale_animation_(false), | 228 did_complete_scale_animation_(false), |
| 226 id_(s_layer_tree_host_sequence_number.GetNext() + 1), | 229 id_(s_layer_tree_host_sequence_number.GetNext() + 1), |
| 227 next_commit_forces_redraw_(false), | 230 next_commit_forces_redraw_(false), |
| 228 shared_bitmap_manager_(params->shared_bitmap_manager), | 231 shared_bitmap_manager_(params->shared_bitmap_manager), |
| 229 gpu_memory_buffer_manager_(params->gpu_memory_buffer_manager), | 232 gpu_memory_buffer_manager_(params->gpu_memory_buffer_manager), |
| 230 task_graph_runner_(params->task_graph_runner), | 233 task_graph_runner_(params->task_graph_runner), |
| 231 image_serialization_processor_(params->image_serialization_processor) { | 234 image_serialization_processor_(params->image_serialization_processor) { |
| 232 DCHECK(task_graph_runner_); | 235 DCHECK(task_graph_runner_); |
| 233 DCHECK(layer_tree_); | 236 DCHECK(layer_tree_); |
| 234 | 237 |
| 235 rendering_stats_instrumentation_->set_record_rendering_stats( | 238 rendering_stats_instrumentation_->set_record_rendering_stats( |
| 236 debug_state_.RecordRenderingStats()); | 239 debug_state_.RecordRenderingStats()); |
| 237 } | 240 } |
| 238 | 241 |
| 239 void LayerTreeHost::InitializeThreaded( | 242 void LayerTreeHostInProcess::InitializeThreaded( |
| 240 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 243 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| 241 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 244 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
| 242 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { | 245 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { |
| 243 task_runner_provider_ = | 246 task_runner_provider_ = |
| 244 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); | 247 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); |
| 245 std::unique_ptr<ProxyMain> proxy_main = | 248 std::unique_ptr<ProxyMain> proxy_main = |
| 246 ProxyMain::CreateThreaded(this, task_runner_provider_.get()); | 249 ProxyMain::CreateThreaded(this, task_runner_provider_.get()); |
| 247 InitializeProxy(std::move(proxy_main), | 250 InitializeProxy(std::move(proxy_main), |
| 248 std::move(external_begin_frame_source)); | 251 std::move(external_begin_frame_source)); |
| 249 } | 252 } |
| 250 | 253 |
| 251 void LayerTreeHost::InitializeSingleThreaded( | 254 void LayerTreeHostInProcess::InitializeSingleThreaded( |
| 252 LayerTreeHostSingleThreadClient* single_thread_client, | 255 LayerTreeHostSingleThreadClient* single_thread_client, |
| 253 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 256 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| 254 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { | 257 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { |
| 255 task_runner_provider_ = TaskRunnerProvider::Create(main_task_runner, nullptr); | 258 task_runner_provider_ = TaskRunnerProvider::Create(main_task_runner, nullptr); |
| 256 InitializeProxy(SingleThreadProxy::Create(this, single_thread_client, | 259 InitializeProxy(SingleThreadProxy::Create(this, single_thread_client, |
| 257 task_runner_provider_.get()), | 260 task_runner_provider_.get()), |
| 258 std::move(external_begin_frame_source)); | 261 std::move(external_begin_frame_source)); |
| 259 } | 262 } |
| 260 | 263 |
| 261 void LayerTreeHost::InitializeRemoteServer( | 264 void LayerTreeHostInProcess::InitializeRemoteServer( |
| 262 RemoteProtoChannel* remote_proto_channel, | 265 RemoteProtoChannel* remote_proto_channel, |
| 263 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner) { | 266 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner) { |
| 264 task_runner_provider_ = TaskRunnerProvider::Create(main_task_runner, nullptr); | 267 task_runner_provider_ = TaskRunnerProvider::Create(main_task_runner, nullptr); |
| 265 | 268 |
| 266 if (image_serialization_processor_) { | 269 if (image_serialization_processor_) { |
| 267 engine_picture_cache_ = | 270 engine_picture_cache_ = |
| 268 image_serialization_processor_->CreateEnginePictureCache(); | 271 image_serialization_processor_->CreateEnginePictureCache(); |
| 272 layer_tree_->set_engine_picture_cache(engine_picture_cache_.get()); |
| 269 } | 273 } |
| 270 InitializeProxy(ProxyMain::CreateRemote(remote_proto_channel, this, | 274 InitializeProxy(ProxyMain::CreateRemote(remote_proto_channel, this, |
| 271 task_runner_provider_.get()), | 275 task_runner_provider_.get()), |
| 272 nullptr); | 276 nullptr); |
| 273 } | 277 } |
| 274 | 278 |
| 275 void LayerTreeHost::InitializeRemoteClient( | 279 void LayerTreeHostInProcess::InitializeRemoteClient( |
| 276 RemoteProtoChannel* remote_proto_channel, | 280 RemoteProtoChannel* remote_proto_channel, |
| 277 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 281 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
| 278 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { | 282 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { |
| 279 task_runner_provider_ = | 283 task_runner_provider_ = |
| 280 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); | 284 TaskRunnerProvider::Create(main_task_runner, impl_task_runner); |
| 281 | 285 |
| 282 if (image_serialization_processor_) { | 286 if (image_serialization_processor_) { |
| 283 client_picture_cache_ = | 287 client_picture_cache_ = |
| 284 image_serialization_processor_->CreateClientPictureCache(); | 288 image_serialization_processor_->CreateClientPictureCache(); |
| 289 layer_tree_->set_client_picture_cache(client_picture_cache_.get()); |
| 285 } | 290 } |
| 286 | 291 |
| 287 // For the remote mode, the RemoteChannelImpl implements the Proxy, which is | 292 // For the remote mode, the RemoteChannelImpl implements the Proxy, which is |
| 288 // owned by the LayerTreeHost. The RemoteChannelImpl pipes requests which need | 293 // owned by the LayerTreeHostInProcess. The RemoteChannelImpl pipes requests |
| 289 // to handled locally, for instance the Output Surface creation to the | 294 // which need to handled locally, for instance the Output Surface creation to |
| 290 // LayerTreeHost on the client, while the other requests are sent to the | 295 // the LayerTreeHostInProcess on the client, while the other requests are sent |
| 291 // RemoteChannelMain on the server which directs them to ProxyMain and the | 296 // to the RemoteChannelMain on the server which directs them to ProxyMain and |
| 292 // remote server LayerTreeHost. | 297 // the remote server LayerTreeHostInProcess. |
| 293 InitializeProxy(base::MakeUnique<RemoteChannelImpl>( | 298 InitializeProxy(base::MakeUnique<RemoteChannelImpl>( |
| 294 this, remote_proto_channel, task_runner_provider_.get()), | 299 this, remote_proto_channel, task_runner_provider_.get()), |
| 295 nullptr); | 300 nullptr); |
| 296 } | 301 } |
| 297 | 302 |
| 298 void LayerTreeHost::InitializeForTesting( | 303 void LayerTreeHostInProcess::InitializeForTesting( |
| 299 std::unique_ptr<TaskRunnerProvider> task_runner_provider, | 304 std::unique_ptr<TaskRunnerProvider> task_runner_provider, |
| 300 std::unique_ptr<Proxy> proxy_for_testing, | 305 std::unique_ptr<Proxy> proxy_for_testing, |
| 301 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { | 306 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { |
| 302 task_runner_provider_ = std::move(task_runner_provider); | 307 task_runner_provider_ = std::move(task_runner_provider); |
| 303 | 308 |
| 304 InitializePictureCacheForTesting(); | 309 InitializePictureCacheForTesting(); |
| 305 | 310 |
| 306 InitializeProxy(std::move(proxy_for_testing), | 311 InitializeProxy(std::move(proxy_for_testing), |
| 307 std::move(external_begin_frame_source)); | 312 std::move(external_begin_frame_source)); |
| 308 } | 313 } |
| 309 | 314 |
| 310 void LayerTreeHost::InitializePictureCacheForTesting() { | 315 void LayerTreeHostInProcess::InitializePictureCacheForTesting() { |
| 311 if (!image_serialization_processor_) | 316 if (!image_serialization_processor_) |
| 312 return; | 317 return; |
| 313 | 318 |
| 314 // Initialize both engine and client cache to ensure serialization tests | 319 // Initialize both engine and client cache to ensure serialization tests |
| 315 // with a single LayerTreeHost can work correctly. | 320 // with a single LayerTreeHostInProcess can work correctly. |
| 316 engine_picture_cache_ = | 321 engine_picture_cache_ = |
| 317 image_serialization_processor_->CreateEnginePictureCache(); | 322 image_serialization_processor_->CreateEnginePictureCache(); |
| 323 layer_tree_->set_engine_picture_cache(engine_picture_cache_.get()); |
| 318 client_picture_cache_ = | 324 client_picture_cache_ = |
| 319 image_serialization_processor_->CreateClientPictureCache(); | 325 image_serialization_processor_->CreateClientPictureCache(); |
| 326 layer_tree_->set_client_picture_cache(client_picture_cache_.get()); |
| 320 } | 327 } |
| 321 | 328 |
| 322 void LayerTreeHost::SetTaskRunnerProviderForTesting( | 329 void LayerTreeHostInProcess::SetTaskRunnerProviderForTesting( |
| 323 std::unique_ptr<TaskRunnerProvider> task_runner_provider) { | 330 std::unique_ptr<TaskRunnerProvider> task_runner_provider) { |
| 324 DCHECK(!task_runner_provider_); | 331 DCHECK(!task_runner_provider_); |
| 325 task_runner_provider_ = std::move(task_runner_provider); | 332 task_runner_provider_ = std::move(task_runner_provider); |
| 326 } | 333 } |
| 327 | 334 |
| 328 void LayerTreeHost::SetUIResourceManagerForTesting( | 335 void LayerTreeHostInProcess::SetUIResourceManagerForTesting( |
| 329 std::unique_ptr<UIResourceManager> ui_resource_manager) { | 336 std::unique_ptr<UIResourceManager> ui_resource_manager) { |
| 330 ui_resource_manager_ = std::move(ui_resource_manager); | 337 ui_resource_manager_ = std::move(ui_resource_manager); |
| 331 } | 338 } |
| 332 | 339 |
| 333 void LayerTreeHost::InitializeProxy( | 340 void LayerTreeHostInProcess::InitializeProxy( |
| 334 std::unique_ptr<Proxy> proxy, | 341 std::unique_ptr<Proxy> proxy, |
| 335 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { | 342 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { |
| 336 TRACE_EVENT0("cc", "LayerTreeHost::InitializeForReal"); | 343 TRACE_EVENT0("cc", "LayerTreeHostInProcess::InitializeForReal"); |
| 337 DCHECK(task_runner_provider_); | 344 DCHECK(task_runner_provider_); |
| 338 | 345 |
| 339 proxy_ = std::move(proxy); | 346 proxy_ = std::move(proxy); |
| 340 proxy_->Start(std::move(external_begin_frame_source)); | 347 proxy_->Start(std::move(external_begin_frame_source)); |
| 341 | 348 |
| 342 layer_tree_->animation_host()->SetSupportsScrollAnimations( | 349 layer_tree_->animation_host()->SetSupportsScrollAnimations( |
| 343 proxy_->SupportsImplScrolling()); | 350 proxy_->SupportsImplScrolling()); |
| 344 } | 351 } |
| 345 | 352 |
| 346 LayerTreeHost::~LayerTreeHost() { | 353 LayerTreeHostInProcess::~LayerTreeHostInProcess() { |
| 347 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost"); | 354 TRACE_EVENT0("cc", "LayerTreeHostInProcess::~LayerTreeHostInProcess"); |
| 348 | 355 |
| 349 // Clear any references into the LayerTreeHost. | 356 // Clear any references into the LayerTreeHostInProcess. |
| 350 layer_tree_.reset(); | 357 layer_tree_.reset(); |
| 351 | 358 |
| 352 if (proxy_) { | 359 if (proxy_) { |
| 353 DCHECK(task_runner_provider_->IsMainThread()); | 360 DCHECK(task_runner_provider_->IsMainThread()); |
| 354 proxy_->Stop(); | 361 proxy_->Stop(); |
| 355 | 362 |
| 356 // Proxy must be destroyed before the Task Runner Provider. | 363 // Proxy must be destroyed before the Task Runner Provider. |
| 357 proxy_ = nullptr; | 364 proxy_ = nullptr; |
| 358 } | 365 } |
| 359 } | 366 } |
| 360 | 367 |
| 361 int LayerTreeHost::GetId() const { | 368 int LayerTreeHostInProcess::GetId() const { |
| 362 return id_; | 369 return id_; |
| 363 } | 370 } |
| 364 | 371 |
| 365 int LayerTreeHost::SourceFrameNumber() const { | 372 int LayerTreeHostInProcess::SourceFrameNumber() const { |
| 366 return source_frame_number_; | 373 return source_frame_number_; |
| 367 } | 374 } |
| 368 | 375 |
| 369 LayerTree* LayerTreeHost::GetLayerTree() { | 376 LayerTree* LayerTreeHostInProcess::GetLayerTree() { |
| 370 return layer_tree_.get(); | 377 return layer_tree_.get(); |
| 371 } | 378 } |
| 372 | 379 |
| 373 const LayerTree* LayerTreeHost::GetLayerTree() const { | 380 const LayerTree* LayerTreeHostInProcess::GetLayerTree() const { |
| 374 return layer_tree_.get(); | 381 return layer_tree_.get(); |
| 375 } | 382 } |
| 376 | 383 |
| 377 UIResourceManager* LayerTreeHost::GetUIResourceManager() const { | 384 UIResourceManager* LayerTreeHostInProcess::GetUIResourceManager() const { |
| 378 return ui_resource_manager_.get(); | 385 return ui_resource_manager_.get(); |
| 379 } | 386 } |
| 380 | 387 |
| 381 TaskRunnerProvider* LayerTreeHost::GetTaskRunnerProvider() const { | 388 TaskRunnerProvider* LayerTreeHostInProcess::GetTaskRunnerProvider() const { |
| 382 return task_runner_provider_.get(); | 389 return task_runner_provider_.get(); |
| 383 } | 390 } |
| 384 | 391 |
| 385 SwapPromiseManager* LayerTreeHost::GetSwapPromiseManager() { | 392 SwapPromiseManager* LayerTreeHostInProcess::GetSwapPromiseManager() { |
| 386 return &swap_promise_manager_; | 393 return &swap_promise_manager_; |
| 387 } | 394 } |
| 388 | 395 |
| 389 const LayerTreeSettings& LayerTreeHost::GetSettings() const { | 396 const LayerTreeSettings& LayerTreeHostInProcess::GetSettings() const { |
| 390 return settings_; | 397 return settings_; |
| 391 } | 398 } |
| 392 | 399 |
| 393 void LayerTreeHost::SetSurfaceClientId(uint32_t client_id) { | 400 void LayerTreeHostInProcess::SetSurfaceClientId(uint32_t client_id) { |
| 394 surface_sequence_generator_.set_surface_client_id(client_id); | 401 surface_sequence_generator_.set_surface_client_id(client_id); |
| 395 } | 402 } |
| 396 | 403 |
| 397 void LayerTreeHost::QueueSwapPromise( | 404 void LayerTreeHostInProcess::QueueSwapPromise( |
| 398 std::unique_ptr<SwapPromise> swap_promise) { | 405 std::unique_ptr<SwapPromise> swap_promise) { |
| 399 swap_promise_manager_.QueueSwapPromise(std::move(swap_promise)); | 406 swap_promise_manager_.QueueSwapPromise(std::move(swap_promise)); |
| 400 } | 407 } |
| 401 | 408 |
| 402 SurfaceSequenceGenerator* LayerTreeHost::GetSurfaceSequenceGenerator() { | 409 SurfaceSequenceGenerator* |
| 410 LayerTreeHostInProcess::GetSurfaceSequenceGenerator() { |
| 403 return &surface_sequence_generator_; | 411 return &surface_sequence_generator_; |
| 404 } | 412 } |
| 405 | 413 |
| 406 void LayerTreeHost::WillBeginMainFrame() { | 414 void LayerTreeHostInProcess::WillBeginMainFrame() { |
| 407 devtools_instrumentation::WillBeginMainThreadFrame(GetId(), | 415 devtools_instrumentation::WillBeginMainThreadFrame(GetId(), |
| 408 SourceFrameNumber()); | 416 SourceFrameNumber()); |
| 409 client_->WillBeginMainFrame(); | 417 client_->WillBeginMainFrame(); |
| 410 } | 418 } |
| 411 | 419 |
| 412 void LayerTreeHost::DidBeginMainFrame() { | 420 void LayerTreeHostInProcess::DidBeginMainFrame() { |
| 413 client_->DidBeginMainFrame(); | 421 client_->DidBeginMainFrame(); |
| 414 } | 422 } |
| 415 | 423 |
| 416 void LayerTreeHost::BeginMainFrameNotExpectedSoon() { | 424 void LayerTreeHostInProcess::BeginMainFrameNotExpectedSoon() { |
| 417 client_->BeginMainFrameNotExpectedSoon(); | 425 client_->BeginMainFrameNotExpectedSoon(); |
| 418 } | 426 } |
| 419 | 427 |
| 420 void LayerTreeHost::BeginMainFrame(const BeginFrameArgs& args) { | 428 void LayerTreeHostInProcess::BeginMainFrame(const BeginFrameArgs& args) { |
| 421 client_->BeginMainFrame(args); | 429 client_->BeginMainFrame(args); |
| 422 } | 430 } |
| 423 | 431 |
| 424 void LayerTreeHost::DidStopFlinging() { | 432 void LayerTreeHostInProcess::DidStopFlinging() { |
| 425 proxy_->MainThreadHasStoppedFlinging(); | 433 proxy_->MainThreadHasStoppedFlinging(); |
| 426 } | 434 } |
| 427 | 435 |
| 428 const LayerTreeDebugState& LayerTreeHost::GetDebugState() const { | 436 const LayerTreeDebugState& LayerTreeHostInProcess::GetDebugState() const { |
| 429 return debug_state_; | 437 return debug_state_; |
| 430 } | 438 } |
| 431 | 439 |
| 432 void LayerTreeHost::RequestMainFrameUpdate() { | 440 void LayerTreeHostInProcess::RequestMainFrameUpdate() { |
| 433 client_->UpdateLayerTreeHost(); | 441 client_->UpdateLayerTreeHost(); |
| 434 } | 442 } |
| 435 | 443 |
| 436 // This function commits the LayerTreeHost to an impl tree. When modifying | 444 // This function commits the LayerTreeHost to an impl tree. When modifying |
| 437 // this function, keep in mind that the function *runs* on the impl thread! Any | 445 // this function, keep in mind that the function *runs* on the impl thread! Any |
| 438 // code that is logically a main thread operation, e.g. deletion of a Layer, | 446 // code that is logically a main thread operation, e.g. deletion of a Layer, |
| 439 // should be delayed until the LayerTreeHost::CommitComplete, which will run | 447 // should be delayed until the LayerTreeHost::CommitComplete, which will run |
| 440 // after the commit, but on the main thread. | 448 // after the commit, but on the main thread. |
| 441 void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { | 449 void LayerTreeHostInProcess::FinishCommitOnImplThread( |
| 450 LayerTreeHostImpl* host_impl) { |
| 442 DCHECK(!IsRemoteServer()); | 451 DCHECK(!IsRemoteServer()); |
| 443 DCHECK(task_runner_provider_->IsImplThread()); | 452 DCHECK(task_runner_provider_->IsImplThread()); |
| 444 | 453 |
| 445 bool is_new_trace; | 454 bool is_new_trace; |
| 446 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); | 455 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); |
| 447 if (is_new_trace && | 456 if (is_new_trace && |
| 448 frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() && | 457 frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() && |
| 449 layer_tree_->root_layer()) { | 458 layer_tree_->root_layer()) { |
| 450 LayerTreeHostCommon::CallFunctionForEveryLayer( | 459 LayerTreeHostCommon::CallFunctionForEveryLayer( |
| 451 layer_tree_.get(), [](Layer* layer) { layer->DidBeginTracing(); }); | 460 layer_tree_.get(), [](Layer* layer) { layer->DidBeginTracing(); }); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 477 // happens before GPU rasterization properties are set, since those trigger an | 486 // happens before GPU rasterization properties are set, since those trigger an |
| 478 // update of GPU rasterization status, which depends on the device scale | 487 // update of GPU rasterization status, which depends on the device scale |
| 479 // factor. (crbug.com/535700) | 488 // factor. (crbug.com/535700) |
| 480 sync_tree->SetDeviceScaleFactor(layer_tree_->device_scale_factor()); | 489 sync_tree->SetDeviceScaleFactor(layer_tree_->device_scale_factor()); |
| 481 host_impl->SetDebugState(debug_state_); | 490 host_impl->SetDebugState(debug_state_); |
| 482 | 491 |
| 483 sync_tree->set_ui_resource_request_queue( | 492 sync_tree->set_ui_resource_request_queue( |
| 484 ui_resource_manager_->TakeUIResourcesRequests()); | 493 ui_resource_manager_->TakeUIResourcesRequests()); |
| 485 | 494 |
| 486 { | 495 { |
| 487 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); | 496 TRACE_EVENT0("cc", "LayerTreeHostInProcess::PushProperties"); |
| 488 | 497 |
| 489 TreeSynchronizer::PushLayerProperties(layer_tree_.get(), sync_tree); | 498 TreeSynchronizer::PushLayerProperties(layer_tree_.get(), sync_tree); |
| 490 | 499 |
| 491 // This must happen after synchronizing property trees and after push | 500 // This must happen after synchronizing property trees and after push |
| 492 // properties, which updates property tree indices, but before animation | 501 // properties, which updates property tree indices, but before animation |
| 493 // host pushes properties as animation host push properties can change | 502 // host pushes properties as animation host push properties can change |
| 494 // Animation::InEffect and we want the old InEffect value for updating | 503 // Animation::InEffect and we want the old InEffect value for updating |
| 495 // property tree scrolling and animation. | 504 // property tree scrolling and animation. |
| 496 sync_tree->UpdatePropertyTreeScrollingAndAnimationFromMainThread(); | 505 sync_tree->UpdatePropertyTreeScrollingAndAnimationFromMainThread(); |
| 497 | 506 |
| 498 TRACE_EVENT0("cc", "LayerTreeHost::AnimationHost::PushProperties"); | 507 TRACE_EVENT0("cc", "LayerTreeHostInProcess::AnimationHost::PushProperties"); |
| 499 DCHECK(host_impl->animation_host()); | 508 DCHECK(host_impl->animation_host()); |
| 500 layer_tree_->animation_host()->PushPropertiesTo( | 509 layer_tree_->animation_host()->PushPropertiesTo( |
| 501 host_impl->animation_host()); | 510 host_impl->animation_host()); |
| 502 } | 511 } |
| 503 | 512 |
| 504 // This must happen after synchronizing property trees and after pushing | 513 // This must happen after synchronizing property trees and after pushing |
| 505 // properties, which updates the clobber_active_value flag. | 514 // properties, which updates the clobber_active_value flag. |
| 506 sync_tree->UpdatePropertyTreeScrollOffset(layer_tree_->property_trees()); | 515 sync_tree->UpdatePropertyTreeScrollOffset(layer_tree_->property_trees()); |
| 507 | 516 |
| 508 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); | 517 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); |
| 509 layer_tree_->property_trees()->ResetAllChangeTracking(); | 518 layer_tree_->property_trees()->ResetAllChangeTracking(); |
| 510 } | 519 } |
| 511 | 520 |
| 512 void LayerTreeHost::WillCommit() { | 521 void LayerTreeHostInProcess::WillCommit() { |
| 513 swap_promise_manager_.WillCommit(); | 522 swap_promise_manager_.WillCommit(); |
| 514 client_->WillCommit(); | 523 client_->WillCommit(); |
| 515 } | 524 } |
| 516 | 525 |
| 517 void LayerTreeHost::UpdateHudLayer() { | 526 void LayerTreeHostInProcess::UpdateHudLayer() {} |
| 518 } | |
| 519 | 527 |
| 520 void LayerTreeHost::CommitComplete() { | 528 void LayerTreeHostInProcess::CommitComplete() { |
| 521 source_frame_number_++; | 529 source_frame_number_++; |
| 522 client_->DidCommit(); | 530 client_->DidCommit(); |
| 523 if (did_complete_scale_animation_) { | 531 if (did_complete_scale_animation_) { |
| 524 client_->DidCompletePageScaleAnimation(); | 532 client_->DidCompletePageScaleAnimation(); |
| 525 did_complete_scale_animation_ = false; | 533 did_complete_scale_animation_ = false; |
| 526 } | 534 } |
| 527 } | 535 } |
| 528 | 536 |
| 529 void LayerTreeHost::SetOutputSurface(std::unique_ptr<OutputSurface> surface) { | 537 void LayerTreeHostInProcess::SetOutputSurface( |
| 530 TRACE_EVENT0("cc", "LayerTreeHost::SetOutputSurface"); | 538 std::unique_ptr<OutputSurface> surface) { |
| 539 TRACE_EVENT0("cc", "LayerTreeHostInProcess::SetOutputSurface"); |
| 531 DCHECK(surface); | 540 DCHECK(surface); |
| 532 | 541 |
| 533 DCHECK(!new_output_surface_); | 542 DCHECK(!new_output_surface_); |
| 534 new_output_surface_ = std::move(surface); | 543 new_output_surface_ = std::move(surface); |
| 535 proxy_->SetOutputSurface(new_output_surface_.get()); | 544 proxy_->SetOutputSurface(new_output_surface_.get()); |
| 536 } | 545 } |
| 537 | 546 |
| 538 std::unique_ptr<OutputSurface> LayerTreeHost::ReleaseOutputSurface() { | 547 std::unique_ptr<OutputSurface> LayerTreeHostInProcess::ReleaseOutputSurface() { |
| 539 DCHECK(!visible_); | 548 DCHECK(!visible_); |
| 540 | 549 |
| 541 DidLoseOutputSurface(); | 550 DidLoseOutputSurface(); |
| 542 proxy_->ReleaseOutputSurface(); | 551 proxy_->ReleaseOutputSurface(); |
| 543 return std::move(current_output_surface_); | 552 return std::move(current_output_surface_); |
| 544 } | 553 } |
| 545 | 554 |
| 546 void LayerTreeHost::RequestNewOutputSurface() { | 555 void LayerTreeHostInProcess::RequestNewOutputSurface() { |
| 547 client_->RequestNewOutputSurface(); | 556 client_->RequestNewOutputSurface(); |
| 548 } | 557 } |
| 549 | 558 |
| 550 void LayerTreeHost::DidInitializeOutputSurface() { | 559 void LayerTreeHostInProcess::DidInitializeOutputSurface() { |
| 551 DCHECK(new_output_surface_); | 560 DCHECK(new_output_surface_); |
| 552 current_output_surface_ = std::move(new_output_surface_); | 561 current_output_surface_ = std::move(new_output_surface_); |
| 553 client_->DidInitializeOutputSurface(); | 562 client_->DidInitializeOutputSurface(); |
| 554 } | 563 } |
| 555 | 564 |
| 556 void LayerTreeHost::DidFailToInitializeOutputSurface() { | 565 void LayerTreeHostInProcess::DidFailToInitializeOutputSurface() { |
| 557 DCHECK(new_output_surface_); | 566 DCHECK(new_output_surface_); |
| 558 // Note: It is safe to drop all output surface references here as | 567 // Note: It is safe to drop all output surface references here as |
| 559 // LayerTreeHostImpl will not keep a pointer to either the old or | 568 // LayerTreeHostInProcessImpl will not keep a pointer to either the old or |
| 560 // new output surface after failing to initialize the new one. | 569 // new output surface after failing to initialize the new one. |
| 561 current_output_surface_ = nullptr; | 570 current_output_surface_ = nullptr; |
| 562 new_output_surface_ = nullptr; | 571 new_output_surface_ = nullptr; |
| 563 client_->DidFailToInitializeOutputSurface(); | 572 client_->DidFailToInitializeOutputSurface(); |
| 564 } | 573 } |
| 565 | 574 |
| 566 std::unique_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl( | 575 std::unique_ptr<LayerTreeHostImpl> |
| 576 LayerTreeHostInProcess::CreateLayerTreeHostImpl( |
| 567 LayerTreeHostImplClient* client) { | 577 LayerTreeHostImplClient* client) { |
| 568 DCHECK(!IsRemoteServer()); | 578 DCHECK(!IsRemoteServer()); |
| 569 DCHECK(task_runner_provider_->IsImplThread()); | 579 DCHECK(task_runner_provider_->IsImplThread()); |
| 570 | 580 |
| 571 const bool supports_impl_scrolling = task_runner_provider_->HasImplThread(); | 581 const bool supports_impl_scrolling = task_runner_provider_->HasImplThread(); |
| 572 std::unique_ptr<AnimationHost> animation_host_impl = | 582 std::unique_ptr<AnimationHost> animation_host_impl = |
| 573 layer_tree_->animation_host()->CreateImplInstance( | 583 layer_tree_->animation_host()->CreateImplInstance( |
| 574 supports_impl_scrolling); | 584 supports_impl_scrolling); |
| 575 | 585 |
| 576 std::unique_ptr<LayerTreeHostImpl> host_impl = LayerTreeHostImpl::Create( | 586 std::unique_ptr<LayerTreeHostImpl> host_impl = LayerTreeHostImpl::Create( |
| 577 settings_, client, task_runner_provider_.get(), | 587 settings_, client, task_runner_provider_.get(), |
| 578 rendering_stats_instrumentation_.get(), shared_bitmap_manager_, | 588 rendering_stats_instrumentation_.get(), shared_bitmap_manager_, |
| 579 gpu_memory_buffer_manager_, task_graph_runner_, | 589 gpu_memory_buffer_manager_, task_graph_runner_, |
| 580 std::move(animation_host_impl), id_); | 590 std::move(animation_host_impl), id_); |
| 581 host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_); | 591 host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_); |
| 582 host_impl->SetContentIsSuitableForGpuRasterization( | 592 host_impl->SetContentIsSuitableForGpuRasterization( |
| 583 content_is_suitable_for_gpu_rasterization_); | 593 content_is_suitable_for_gpu_rasterization_); |
| 584 shared_bitmap_manager_ = NULL; | 594 shared_bitmap_manager_ = NULL; |
| 585 gpu_memory_buffer_manager_ = NULL; | 595 gpu_memory_buffer_manager_ = NULL; |
| 586 task_graph_runner_ = NULL; | 596 task_graph_runner_ = NULL; |
| 587 input_handler_weak_ptr_ = host_impl->AsWeakPtr(); | 597 input_handler_weak_ptr_ = host_impl->AsWeakPtr(); |
| 588 return host_impl; | 598 return host_impl; |
| 589 } | 599 } |
| 590 | 600 |
| 591 void LayerTreeHost::DidLoseOutputSurface() { | 601 void LayerTreeHostInProcess::DidLoseOutputSurface() { |
| 592 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface"); | 602 TRACE_EVENT0("cc", "LayerTreeHostInProcess::DidLoseOutputSurface"); |
| 593 DCHECK(task_runner_provider_->IsMainThread()); | 603 DCHECK(task_runner_provider_->IsMainThread()); |
| 594 SetNeedsCommit(); | 604 SetNeedsCommit(); |
| 595 } | 605 } |
| 596 | 606 |
| 597 void LayerTreeHost::SetDeferCommits(bool defer_commits) { | 607 void LayerTreeHostInProcess::SetDeferCommits(bool defer_commits) { |
| 598 proxy_->SetDeferCommits(defer_commits); | 608 proxy_->SetDeferCommits(defer_commits); |
| 599 } | 609 } |
| 600 | 610 |
| 601 DISABLE_CFI_PERF | 611 DISABLE_CFI_PERF |
| 602 void LayerTreeHost::SetNeedsAnimate() { | 612 void LayerTreeHostInProcess::SetNeedsAnimate() { |
| 603 proxy_->SetNeedsAnimate(); | 613 proxy_->SetNeedsAnimate(); |
| 604 swap_promise_manager_.NotifySwapPromiseMonitorsOfSetNeedsCommit(); | 614 swap_promise_manager_.NotifySwapPromiseMonitorsOfSetNeedsCommit(); |
| 605 } | 615 } |
| 606 | 616 |
| 607 DISABLE_CFI_PERF | 617 DISABLE_CFI_PERF |
| 608 void LayerTreeHost::SetNeedsUpdateLayers() { | 618 void LayerTreeHostInProcess::SetNeedsUpdateLayers() { |
| 609 proxy_->SetNeedsUpdateLayers(); | 619 proxy_->SetNeedsUpdateLayers(); |
| 610 swap_promise_manager_.NotifySwapPromiseMonitorsOfSetNeedsCommit(); | 620 swap_promise_manager_.NotifySwapPromiseMonitorsOfSetNeedsCommit(); |
| 611 } | 621 } |
| 612 | 622 |
| 613 void LayerTreeHost::SetNeedsCommit() { | 623 void LayerTreeHostInProcess::SetNeedsCommit() { |
| 614 proxy_->SetNeedsCommit(); | 624 proxy_->SetNeedsCommit(); |
| 615 swap_promise_manager_.NotifySwapPromiseMonitorsOfSetNeedsCommit(); | 625 swap_promise_manager_.NotifySwapPromiseMonitorsOfSetNeedsCommit(); |
| 616 } | 626 } |
| 617 | 627 |
| 618 void LayerTreeHost::SetNeedsRedraw() { | 628 void LayerTreeHostInProcess::SetNeedsRedraw() { |
| 619 SetNeedsRedrawRect(gfx::Rect(layer_tree_->device_viewport_size())); | 629 SetNeedsRedrawRect(gfx::Rect(layer_tree_->device_viewport_size())); |
| 620 } | 630 } |
| 621 | 631 |
| 622 void LayerTreeHost::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { | 632 void LayerTreeHostInProcess::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { |
| 623 proxy_->SetNeedsRedraw(damage_rect); | 633 proxy_->SetNeedsRedraw(damage_rect); |
| 624 } | 634 } |
| 625 | 635 |
| 626 bool LayerTreeHost::CommitRequested() const { | 636 bool LayerTreeHostInProcess::CommitRequested() const { |
| 627 return proxy_->CommitRequested(); | 637 return proxy_->CommitRequested(); |
| 628 } | 638 } |
| 629 | 639 |
| 630 bool LayerTreeHost::BeginMainFrameRequested() const { | 640 bool LayerTreeHostInProcess::BeginMainFrameRequested() const { |
| 631 return proxy_->BeginMainFrameRequested(); | 641 return proxy_->BeginMainFrameRequested(); |
| 632 } | 642 } |
| 633 | 643 |
| 634 void LayerTreeHost::SetNextCommitWaitsForActivation() { | 644 void LayerTreeHostInProcess::SetNextCommitWaitsForActivation() { |
| 635 proxy_->SetNextCommitWaitsForActivation(); | 645 proxy_->SetNextCommitWaitsForActivation(); |
| 636 } | 646 } |
| 637 | 647 |
| 638 void LayerTreeHost::SetNextCommitForcesRedraw() { | 648 void LayerTreeHostInProcess::SetNextCommitForcesRedraw() { |
| 639 next_commit_forces_redraw_ = true; | 649 next_commit_forces_redraw_ = true; |
| 640 proxy_->SetNeedsUpdateLayers(); | 650 proxy_->SetNeedsUpdateLayers(); |
| 641 } | 651 } |
| 642 | 652 |
| 643 void LayerTreeHost::SetAnimationEvents( | 653 void LayerTreeHostInProcess::SetAnimationEvents( |
| 644 std::unique_ptr<AnimationEvents> events) { | 654 std::unique_ptr<AnimationEvents> events) { |
| 645 DCHECK(task_runner_provider_->IsMainThread()); | 655 DCHECK(task_runner_provider_->IsMainThread()); |
| 646 layer_tree_->animation_host()->SetAnimationEvents(std::move(events)); | 656 layer_tree_->animation_host()->SetAnimationEvents(std::move(events)); |
| 647 } | 657 } |
| 648 | 658 |
| 649 void LayerTreeHost::SetDebugState(const LayerTreeDebugState& debug_state) { | 659 void LayerTreeHostInProcess::SetDebugState( |
| 660 const LayerTreeDebugState& debug_state) { |
| 650 LayerTreeDebugState new_debug_state = | 661 LayerTreeDebugState new_debug_state = |
| 651 LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state); | 662 LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state); |
| 652 | 663 |
| 653 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) | 664 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) |
| 654 return; | 665 return; |
| 655 | 666 |
| 656 debug_state_ = new_debug_state; | 667 debug_state_ = new_debug_state; |
| 657 | 668 |
| 658 rendering_stats_instrumentation_->set_record_rendering_stats( | 669 rendering_stats_instrumentation_->set_record_rendering_stats( |
| 659 debug_state_.RecordRenderingStats()); | 670 debug_state_.RecordRenderingStats()); |
| 660 | 671 |
| 661 SetNeedsCommit(); | 672 SetNeedsCommit(); |
| 662 } | 673 } |
| 663 | 674 |
| 664 void LayerTreeHost::ResetGpuRasterizationTracking() { | 675 void LayerTreeHostInProcess::ResetGpuRasterizationTracking() { |
| 665 content_is_suitable_for_gpu_rasterization_ = true; | 676 content_is_suitable_for_gpu_rasterization_ = true; |
| 666 gpu_rasterization_histogram_recorded_ = false; | 677 gpu_rasterization_histogram_recorded_ = false; |
| 667 } | 678 } |
| 668 | 679 |
| 669 void LayerTreeHost::SetHasGpuRasterizationTrigger(bool has_trigger) { | 680 void LayerTreeHostInProcess::SetHasGpuRasterizationTrigger(bool has_trigger) { |
| 670 if (has_trigger == has_gpu_rasterization_trigger_) | 681 if (has_trigger == has_gpu_rasterization_trigger_) |
| 671 return; | 682 return; |
| 672 | 683 |
| 673 has_gpu_rasterization_trigger_ = has_trigger; | 684 has_gpu_rasterization_trigger_ = has_trigger; |
| 674 TRACE_EVENT_INSTANT1("cc", | 685 TRACE_EVENT_INSTANT1( |
| 675 "LayerTreeHost::SetHasGpuRasterizationTrigger", | 686 "cc", "LayerTreeHostInProcess::SetHasGpuRasterizationTrigger", |
| 676 TRACE_EVENT_SCOPE_THREAD, | 687 TRACE_EVENT_SCOPE_THREAD, "has_trigger", has_gpu_rasterization_trigger_); |
| 677 "has_trigger", | |
| 678 has_gpu_rasterization_trigger_); | |
| 679 } | 688 } |
| 680 | 689 |
| 681 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { | 690 void LayerTreeHostInProcess::ApplyPageScaleDeltaFromImplSide( |
| 691 float page_scale_delta) { |
| 682 DCHECK(CommitRequested()); | 692 DCHECK(CommitRequested()); |
| 683 if (page_scale_delta == 1.f) | 693 if (page_scale_delta == 1.f) |
| 684 return; | 694 return; |
| 685 float page_scale = layer_tree_->page_scale_factor() * page_scale_delta; | 695 float page_scale = layer_tree_->page_scale_factor() * page_scale_delta; |
| 686 layer_tree_->SetPageScaleFromImplSide(page_scale); | 696 layer_tree_->SetPageScaleFromImplSide(page_scale); |
| 687 } | 697 } |
| 688 | 698 |
| 689 void LayerTreeHost::SetVisible(bool visible) { | 699 void LayerTreeHostInProcess::SetVisible(bool visible) { |
| 690 if (visible_ == visible) | 700 if (visible_ == visible) |
| 691 return; | 701 return; |
| 692 visible_ = visible; | 702 visible_ = visible; |
| 693 proxy_->SetVisible(visible); | 703 proxy_->SetVisible(visible); |
| 694 } | 704 } |
| 695 | 705 |
| 696 bool LayerTreeHost::IsVisible() const { | 706 bool LayerTreeHostInProcess::IsVisible() const { |
| 697 return visible_; | 707 return visible_; |
| 698 } | 708 } |
| 699 | 709 |
| 700 void LayerTreeHost::NotifyInputThrottledUntilCommit() { | 710 void LayerTreeHostInProcess::NotifyInputThrottledUntilCommit() { |
| 701 proxy_->NotifyInputThrottledUntilCommit(); | 711 proxy_->NotifyInputThrottledUntilCommit(); |
| 702 } | 712 } |
| 703 | 713 |
| 704 void LayerTreeHost::LayoutAndUpdateLayers() { | 714 void LayerTreeHostInProcess::LayoutAndUpdateLayers() { |
| 705 DCHECK(IsSingleThreaded()); | 715 DCHECK(IsSingleThreaded()); |
| 706 // This function is only valid when not using the scheduler. | 716 // This function is only valid when not using the scheduler. |
| 707 DCHECK(!settings_.single_thread_proxy_scheduler); | 717 DCHECK(!settings_.single_thread_proxy_scheduler); |
| 708 RequestMainFrameUpdate(); | 718 RequestMainFrameUpdate(); |
| 709 UpdateLayers(); | 719 UpdateLayers(); |
| 710 } | 720 } |
| 711 | 721 |
| 712 void LayerTreeHost::Composite(base::TimeTicks frame_begin_time) { | 722 void LayerTreeHostInProcess::Composite(base::TimeTicks frame_begin_time) { |
| 713 DCHECK(IsSingleThreaded()); | 723 DCHECK(IsSingleThreaded()); |
| 714 // This function is only valid when not using the scheduler. | 724 // This function is only valid when not using the scheduler. |
| 715 DCHECK(!settings_.single_thread_proxy_scheduler); | 725 DCHECK(!settings_.single_thread_proxy_scheduler); |
| 716 SingleThreadProxy* proxy = static_cast<SingleThreadProxy*>(proxy_.get()); | 726 SingleThreadProxy* proxy = static_cast<SingleThreadProxy*>(proxy_.get()); |
| 717 | 727 |
| 718 proxy->CompositeImmediately(frame_begin_time); | 728 proxy->CompositeImmediately(frame_begin_time); |
| 719 } | 729 } |
| 720 | 730 |
| 721 bool LayerTreeHost::UpdateLayers() { | 731 bool LayerTreeHostInProcess::UpdateLayers() { |
| 722 if (!layer_tree_->root_layer()) | 732 if (!layer_tree_->root_layer()) |
| 723 return false; | 733 return false; |
| 724 DCHECK(!layer_tree_->root_layer()->parent()); | 734 DCHECK(!layer_tree_->root_layer()->parent()); |
| 725 bool result = DoUpdateLayers(layer_tree_->root_layer()); | 735 bool result = DoUpdateLayers(layer_tree_->root_layer()); |
| 726 micro_benchmark_controller_.DidUpdateLayers(); | 736 micro_benchmark_controller_.DidUpdateLayers(); |
| 727 return result || next_commit_forces_redraw_; | 737 return result || next_commit_forces_redraw_; |
| 728 } | 738 } |
| 729 | 739 |
| 730 void LayerTreeHost::DidCompletePageScaleAnimation() { | 740 void LayerTreeHostInProcess::DidCompletePageScaleAnimation() { |
| 731 did_complete_scale_animation_ = true; | 741 did_complete_scale_animation_ = true; |
| 732 } | 742 } |
| 733 | 743 |
| 734 void LayerTreeHost::RecordGpuRasterizationHistogram() { | 744 void LayerTreeHostInProcess::RecordGpuRasterizationHistogram() { |
| 735 // Gpu rasterization is only supported for Renderer compositors. | 745 // Gpu rasterization is only supported for Renderer compositors. |
| 736 // Checking for IsSingleThreaded() to exclude Browser compositors. | 746 // Checking for IsSingleThreaded() to exclude Browser compositors. |
| 737 if (gpu_rasterization_histogram_recorded_ || IsSingleThreaded()) | 747 if (gpu_rasterization_histogram_recorded_ || IsSingleThreaded()) |
| 738 return; | 748 return; |
| 739 | 749 |
| 740 // Record how widely gpu rasterization is enabled. | 750 // Record how widely gpu rasterization is enabled. |
| 741 // This number takes device/gpu whitelisting/backlisting into account. | 751 // This number takes device/gpu whitelisting/backlisting into account. |
| 742 // Note that we do not consider the forced gpu rasterization mode, which is | 752 // Note that we do not consider the forced gpu rasterization mode, which is |
| 743 // mostly used for debugging purposes. | 753 // mostly used for debugging purposes. |
| 744 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationEnabled", | 754 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationEnabled", |
| 745 settings_.gpu_rasterization_enabled); | 755 settings_.gpu_rasterization_enabled); |
| 746 if (settings_.gpu_rasterization_enabled) { | 756 if (settings_.gpu_rasterization_enabled) { |
| 747 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationTriggered", | 757 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationTriggered", |
| 748 has_gpu_rasterization_trigger_); | 758 has_gpu_rasterization_trigger_); |
| 749 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationSuitableContent", | 759 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationSuitableContent", |
| 750 content_is_suitable_for_gpu_rasterization_); | 760 content_is_suitable_for_gpu_rasterization_); |
| 751 // Record how many pages actually get gpu rasterization when enabled. | 761 // Record how many pages actually get gpu rasterization when enabled. |
| 752 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationUsed", | 762 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationUsed", |
| 753 (has_gpu_rasterization_trigger_ && | 763 (has_gpu_rasterization_trigger_ && |
| 754 content_is_suitable_for_gpu_rasterization_)); | 764 content_is_suitable_for_gpu_rasterization_)); |
| 755 } | 765 } |
| 756 | 766 |
| 757 gpu_rasterization_histogram_recorded_ = true; | 767 gpu_rasterization_histogram_recorded_ = true; |
| 758 } | 768 } |
| 759 | 769 |
| 760 bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) { | 770 bool LayerTreeHostInProcess::DoUpdateLayers(Layer* root_layer) { |
| 761 TRACE_EVENT1("cc", "LayerTreeHost::DoUpdateLayers", "source_frame_number", | 771 TRACE_EVENT1("cc", "LayerTreeHostInProcess::DoUpdateLayers", |
| 762 SourceFrameNumber()); | 772 "source_frame_number", SourceFrameNumber()); |
| 763 | 773 |
| 764 layer_tree_->UpdateHudLayer(debug_state_.ShowHudInfo()); | 774 layer_tree_->UpdateHudLayer(debug_state_.ShowHudInfo()); |
| 765 UpdateHudLayer(); | 775 UpdateHudLayer(); |
| 766 | 776 |
| 767 Layer* root_scroll = | 777 Layer* root_scroll = |
| 768 PropertyTreeBuilder::FindFirstScrollableLayer(root_layer); | 778 PropertyTreeBuilder::FindFirstScrollableLayer(root_layer); |
| 769 Layer* page_scale_layer = layer_tree_->page_scale_layer(); | 779 Layer* page_scale_layer = layer_tree_->page_scale_layer(); |
| 770 if (!page_scale_layer && root_scroll) | 780 if (!page_scale_layer && root_scroll) |
| 771 page_scale_layer = root_scroll->parent(); | 781 page_scale_layer = root_scroll->parent(); |
| 772 | 782 |
| 773 if (layer_tree_->hud_layer()) { | 783 if (layer_tree_->hud_layer()) { |
| 774 layer_tree_->hud_layer()->PrepareForCalculateDrawProperties( | 784 layer_tree_->hud_layer()->PrepareForCalculateDrawProperties( |
| 775 layer_tree_->device_viewport_size(), | 785 layer_tree_->device_viewport_size(), |
| 776 layer_tree_->device_scale_factor()); | 786 layer_tree_->device_scale_factor()); |
| 777 } | 787 } |
| 778 | 788 |
| 779 gfx::Transform identity_transform; | 789 gfx::Transform identity_transform; |
| 780 LayerList update_layer_list; | 790 LayerList update_layer_list; |
| 781 | 791 |
| 782 { | 792 { |
| 783 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::BuildPropertyTrees"); | 793 TRACE_EVENT0("cc", |
| 784 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), | 794 "LayerTreeHostInProcess::UpdateLayers::BuildPropertyTrees"); |
| 785 "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees"); | 795 TRACE_EVENT0( |
| 796 TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), |
| 797 "LayerTreeHostInProcessCommon::ComputeVisibleRectsWithPropertyTrees"); |
| 786 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer); | 798 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer); |
| 787 bool can_render_to_separate_surface = true; | 799 bool can_render_to_separate_surface = true; |
| 788 PropertyTrees* property_trees = layer_tree_->property_trees(); | 800 PropertyTrees* property_trees = layer_tree_->property_trees(); |
| 789 if (!settings_.use_layer_lists) { | 801 if (!settings_.use_layer_lists) { |
| 790 // If use_layer_lists is set, then the property trees should have been | 802 // If use_layer_lists is set, then the property trees should have been |
| 791 // built by the client already. | 803 // built by the client already. |
| 792 PropertyTreeBuilder::BuildPropertyTrees( | 804 PropertyTreeBuilder::BuildPropertyTrees( |
| 793 root_layer, page_scale_layer, | 805 root_layer, page_scale_layer, |
| 794 layer_tree_->inner_viewport_scroll_layer(), | 806 layer_tree_->inner_viewport_scroll_layer(), |
| 795 layer_tree_->outer_viewport_scroll_layer(), | 807 layer_tree_->outer_viewport_scroll_layer(), |
| 796 layer_tree_->overscroll_elasticity_layer(), | 808 layer_tree_->overscroll_elasticity_layer(), |
| 797 layer_tree_->elastic_overscroll(), layer_tree_->page_scale_factor(), | 809 layer_tree_->elastic_overscroll(), layer_tree_->page_scale_factor(), |
| 798 layer_tree_->device_scale_factor(), | 810 layer_tree_->device_scale_factor(), |
| 799 gfx::Rect(layer_tree_->device_viewport_size()), identity_transform, | 811 gfx::Rect(layer_tree_->device_viewport_size()), identity_transform, |
| 800 property_trees); | 812 property_trees); |
| 801 TRACE_EVENT_INSTANT1("cc", | 813 TRACE_EVENT_INSTANT1( |
| 802 "LayerTreeHost::UpdateLayers_BuiltPropertyTrees", | 814 "cc", "LayerTreeHostInProcess::UpdateLayers_BuiltPropertyTrees", |
| 803 TRACE_EVENT_SCOPE_THREAD, "property_trees", | 815 TRACE_EVENT_SCOPE_THREAD, "property_trees", |
| 804 property_trees->AsTracedValue()); | 816 property_trees->AsTracedValue()); |
| 805 } else { | 817 } else { |
| 806 TRACE_EVENT_INSTANT1("cc", | 818 TRACE_EVENT_INSTANT1( |
| 807 "LayerTreeHost::UpdateLayers_ReceivedPropertyTrees", | 819 "cc", "LayerTreeHostInProcess::UpdateLayers_ReceivedPropertyTrees", |
| 808 TRACE_EVENT_SCOPE_THREAD, "property_trees", | 820 TRACE_EVENT_SCOPE_THREAD, "property_trees", |
| 809 property_trees->AsTracedValue()); | 821 property_trees->AsTracedValue()); |
| 810 } | 822 } |
| 811 draw_property_utils::UpdatePropertyTrees(property_trees, | 823 draw_property_utils::UpdatePropertyTrees(property_trees, |
| 812 can_render_to_separate_surface); | 824 can_render_to_separate_surface); |
| 813 draw_property_utils::FindLayersThatNeedUpdates( | 825 draw_property_utils::FindLayersThatNeedUpdates( |
| 814 layer_tree_.get(), property_trees->transform_tree, | 826 layer_tree_.get(), property_trees->transform_tree, |
| 815 property_trees->effect_tree, &update_layer_list); | 827 property_trees->effect_tree, &update_layer_list); |
| 816 } | 828 } |
| 817 | 829 |
| 818 for (const auto& layer : update_layer_list) | 830 for (const auto& layer : update_layer_list) |
| 819 layer->SavePaintProperties(); | 831 layer->SavePaintProperties(); |
| 820 | 832 |
| 821 bool content_is_suitable_for_gpu = true; | 833 bool content_is_suitable_for_gpu = true; |
| 822 bool did_paint_content = layer_tree_->UpdateLayers( | 834 bool did_paint_content = layer_tree_->UpdateLayers( |
| 823 update_layer_list, &content_is_suitable_for_gpu); | 835 update_layer_list, &content_is_suitable_for_gpu); |
| 824 | 836 |
| 825 if (content_is_suitable_for_gpu) { | 837 if (content_is_suitable_for_gpu) { |
| 826 ++num_consecutive_frames_suitable_for_gpu_; | 838 ++num_consecutive_frames_suitable_for_gpu_; |
| 827 if (num_consecutive_frames_suitable_for_gpu_ >= | 839 if (num_consecutive_frames_suitable_for_gpu_ >= |
| 828 kNumFramesToConsiderBeforeGpuRasterization) { | 840 kNumFramesToConsiderBeforeGpuRasterization) { |
| 829 content_is_suitable_for_gpu_rasterization_ = true; | 841 content_is_suitable_for_gpu_rasterization_ = true; |
| 830 } | 842 } |
| 831 } else { | 843 } else { |
| 832 num_consecutive_frames_suitable_for_gpu_ = 0; | 844 num_consecutive_frames_suitable_for_gpu_ = 0; |
| 833 content_is_suitable_for_gpu_rasterization_ = false; | 845 content_is_suitable_for_gpu_rasterization_ = false; |
| 834 } | 846 } |
| 835 return did_paint_content; | 847 return did_paint_content; |
| 836 } | 848 } |
| 837 | 849 |
| 838 void LayerTreeHost::ApplyViewportDeltas(ScrollAndScaleSet* info) { | 850 void LayerTreeHostInProcess::ApplyViewportDeltas(ScrollAndScaleSet* info) { |
| 839 gfx::Vector2dF inner_viewport_scroll_delta; | 851 gfx::Vector2dF inner_viewport_scroll_delta; |
| 840 if (info->inner_viewport_scroll.layer_id != Layer::INVALID_ID) | 852 if (info->inner_viewport_scroll.layer_id != Layer::INVALID_ID) |
| 841 inner_viewport_scroll_delta = info->inner_viewport_scroll.scroll_delta; | 853 inner_viewport_scroll_delta = info->inner_viewport_scroll.scroll_delta; |
| 842 | 854 |
| 843 if (inner_viewport_scroll_delta.IsZero() && info->page_scale_delta == 1.f && | 855 if (inner_viewport_scroll_delta.IsZero() && info->page_scale_delta == 1.f && |
| 844 info->elastic_overscroll_delta.IsZero() && !info->top_controls_delta) | 856 info->elastic_overscroll_delta.IsZero() && !info->top_controls_delta) |
| 845 return; | 857 return; |
| 846 | 858 |
| 847 // Preemptively apply the scroll offset and scale delta here before sending | 859 // Preemptively apply the scroll offset and scale delta here before sending |
| 848 // it to the client. If the client comes back and sets it to the same | 860 // it to the client. If the client comes back and sets it to the same |
| (...skipping 10 matching lines...) Expand all Loading... |
| 859 layer_tree_->elastic_overscroll() + info->elastic_overscroll_delta); | 871 layer_tree_->elastic_overscroll() + info->elastic_overscroll_delta); |
| 860 // TODO(ccameron): pass the elastic overscroll here so that input events | 872 // TODO(ccameron): pass the elastic overscroll here so that input events |
| 861 // may be translated appropriately. | 873 // may be translated appropriately. |
| 862 client_->ApplyViewportDeltas(inner_viewport_scroll_delta, gfx::Vector2dF(), | 874 client_->ApplyViewportDeltas(inner_viewport_scroll_delta, gfx::Vector2dF(), |
| 863 info->elastic_overscroll_delta, | 875 info->elastic_overscroll_delta, |
| 864 info->page_scale_delta, | 876 info->page_scale_delta, |
| 865 info->top_controls_delta); | 877 info->top_controls_delta); |
| 866 SetNeedsUpdateLayers(); | 878 SetNeedsUpdateLayers(); |
| 867 } | 879 } |
| 868 | 880 |
| 869 void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) { | 881 void LayerTreeHostInProcess::ApplyScrollAndScale(ScrollAndScaleSet* info) { |
| 870 for (auto& swap_promise : info->swap_promises) { | 882 for (auto& swap_promise : info->swap_promises) { |
| 871 TRACE_EVENT_WITH_FLOW1("input,benchmark", | 883 TRACE_EVENT_WITH_FLOW1("input,benchmark", "LatencyInfo.Flow", |
| 872 "LatencyInfo.Flow", | |
| 873 TRACE_ID_DONT_MANGLE(swap_promise->TraceId()), | 884 TRACE_ID_DONT_MANGLE(swap_promise->TraceId()), |
| 874 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, | 885 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, |
| 875 "step", "Main thread scroll update"); | 886 "step", "Main thread scroll update"); |
| 876 swap_promise_manager_.QueueSwapPromise(std::move(swap_promise)); | 887 swap_promise_manager_.QueueSwapPromise(std::move(swap_promise)); |
| 877 } | 888 } |
| 878 | 889 |
| 879 if (layer_tree_->root_layer()) { | 890 if (layer_tree_->root_layer()) { |
| 880 for (size_t i = 0; i < info->scrolls.size(); ++i) { | 891 for (size_t i = 0; i < info->scrolls.size(); ++i) { |
| 881 Layer* layer = layer_tree_->LayerById(info->scrolls[i].layer_id); | 892 Layer* layer = layer_tree_->LayerById(info->scrolls[i].layer_id); |
| 882 if (!layer) | 893 if (!layer) |
| 883 continue; | 894 continue; |
| 884 layer->SetScrollOffsetFromImplSide(gfx::ScrollOffsetWithDelta( | 895 layer->SetScrollOffsetFromImplSide(gfx::ScrollOffsetWithDelta( |
| 885 layer->scroll_offset(), info->scrolls[i].scroll_delta)); | 896 layer->scroll_offset(), info->scrolls[i].scroll_delta)); |
| 886 SetNeedsUpdateLayers(); | 897 SetNeedsUpdateLayers(); |
| 887 } | 898 } |
| 888 } | 899 } |
| 889 | 900 |
| 890 // This needs to happen after scroll deltas have been sent to prevent top | 901 // This needs to happen after scroll deltas have been sent to prevent top |
| 891 // controls from clamping the layout viewport both on the compositor and | 902 // controls from clamping the layout viewport both on the compositor and |
| 892 // on the main thread. | 903 // on the main thread. |
| 893 ApplyViewportDeltas(info); | 904 ApplyViewportDeltas(info); |
| 894 } | 905 } |
| 895 | 906 |
| 896 const base::WeakPtr<InputHandler>& LayerTreeHost::GetInputHandler() const { | 907 const base::WeakPtr<InputHandler>& LayerTreeHostInProcess::GetInputHandler() |
| 908 const { |
| 897 return input_handler_weak_ptr_; | 909 return input_handler_weak_ptr_; |
| 898 } | 910 } |
| 899 | 911 |
| 900 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints, | 912 void LayerTreeHostInProcess::UpdateTopControlsState( |
| 901 TopControlsState current, | 913 TopControlsState constraints, |
| 902 bool animate) { | 914 TopControlsState current, |
| 915 bool animate) { |
| 903 // Top controls are only used in threaded or remote mode. | 916 // Top controls are only used in threaded or remote mode. |
| 904 DCHECK(IsThreaded() || IsRemoteServer()); | 917 DCHECK(IsThreaded() || IsRemoteServer()); |
| 905 proxy_->UpdateTopControlsState(constraints, current, animate); | 918 proxy_->UpdateTopControlsState(constraints, current, animate); |
| 906 } | 919 } |
| 907 | 920 |
| 908 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) { | 921 void LayerTreeHostInProcess::AnimateLayers(base::TimeTicks monotonic_time) { |
| 909 AnimationHost* animation_host = layer_tree_->animation_host(); | 922 AnimationHost* animation_host = layer_tree_->animation_host(); |
| 910 std::unique_ptr<AnimationEvents> events = animation_host->CreateEvents(); | 923 std::unique_ptr<AnimationEvents> events = animation_host->CreateEvents(); |
| 911 | 924 |
| 912 if (animation_host->AnimateLayers(monotonic_time)) | 925 if (animation_host->AnimateLayers(monotonic_time)) |
| 913 animation_host->UpdateAnimationState(true, events.get()); | 926 animation_host->UpdateAnimationState(true, events.get()); |
| 914 | 927 |
| 915 if (!events->events_.empty()) | 928 if (!events->events_.empty()) |
| 916 layer_tree_->property_trees()->needs_rebuild = true; | 929 layer_tree_->property_trees()->needs_rebuild = true; |
| 917 } | 930 } |
| 918 | 931 |
| 919 int LayerTreeHost::ScheduleMicroBenchmark( | 932 int LayerTreeHostInProcess::ScheduleMicroBenchmark( |
| 920 const std::string& benchmark_name, | 933 const std::string& benchmark_name, |
| 921 std::unique_ptr<base::Value> value, | 934 std::unique_ptr<base::Value> value, |
| 922 const MicroBenchmark::DoneCallback& callback) { | 935 const MicroBenchmark::DoneCallback& callback) { |
| 923 return micro_benchmark_controller_.ScheduleRun(benchmark_name, | 936 return micro_benchmark_controller_.ScheduleRun(benchmark_name, |
| 924 std::move(value), callback); | 937 std::move(value), callback); |
| 925 } | 938 } |
| 926 | 939 |
| 927 bool LayerTreeHost::SendMessageToMicroBenchmark( | 940 bool LayerTreeHostInProcess::SendMessageToMicroBenchmark( |
| 928 int id, | 941 int id, |
| 929 std::unique_ptr<base::Value> value) { | 942 std::unique_ptr<base::Value> value) { |
| 930 return micro_benchmark_controller_.SendMessage(id, std::move(value)); | 943 return micro_benchmark_controller_.SendMessage(id, std::move(value)); |
| 931 } | 944 } |
| 932 | 945 |
| 933 void LayerTreeHost::SetLayerTreeMutator( | 946 void LayerTreeHostInProcess::SetLayerTreeMutator( |
| 934 std::unique_ptr<LayerTreeMutator> mutator) { | 947 std::unique_ptr<LayerTreeMutator> mutator) { |
| 935 proxy_->SetMutator(std::move(mutator)); | 948 proxy_->SetMutator(std::move(mutator)); |
| 936 } | 949 } |
| 937 | 950 |
| 938 bool LayerTreeHost::IsSingleThreaded() const { | 951 bool LayerTreeHostInProcess::IsSingleThreaded() const { |
| 939 DCHECK(compositor_mode_ != CompositorMode::SINGLE_THREADED || | 952 DCHECK(compositor_mode_ != CompositorMode::SINGLE_THREADED || |
| 940 !task_runner_provider_->HasImplThread()); | 953 !task_runner_provider_->HasImplThread()); |
| 941 return compositor_mode_ == CompositorMode::SINGLE_THREADED; | 954 return compositor_mode_ == CompositorMode::SINGLE_THREADED; |
| 942 } | 955 } |
| 943 | 956 |
| 944 bool LayerTreeHost::IsThreaded() const { | 957 bool LayerTreeHostInProcess::IsThreaded() const { |
| 945 DCHECK(compositor_mode_ != CompositorMode::THREADED || | 958 DCHECK(compositor_mode_ != CompositorMode::THREADED || |
| 946 task_runner_provider_->HasImplThread()); | 959 task_runner_provider_->HasImplThread()); |
| 947 return compositor_mode_ == CompositorMode::THREADED; | 960 return compositor_mode_ == CompositorMode::THREADED; |
| 948 } | 961 } |
| 949 | 962 |
| 950 bool LayerTreeHost::IsRemoteServer() const { | 963 bool LayerTreeHostInProcess::IsRemoteServer() const { |
| 951 // The LayerTreeHost on the server does not have an impl task runner. | 964 // The LayerTreeHostInProcess on the server does not have an impl task runner. |
| 952 return compositor_mode_ == CompositorMode::REMOTE && | 965 return compositor_mode_ == CompositorMode::REMOTE && |
| 953 !task_runner_provider_->HasImplThread(); | 966 !task_runner_provider_->HasImplThread(); |
| 954 } | 967 } |
| 955 | 968 |
| 956 bool LayerTreeHost::IsRemoteClient() const { | 969 bool LayerTreeHostInProcess::IsRemoteClient() const { |
| 957 return compositor_mode_ == CompositorMode::REMOTE && | 970 return compositor_mode_ == CompositorMode::REMOTE && |
| 958 task_runner_provider_->HasImplThread(); | 971 task_runner_provider_->HasImplThread(); |
| 959 } | 972 } |
| 960 | 973 |
| 961 void LayerTreeHost::ToProtobufForCommit( | 974 void LayerTreeHostInProcess::ToProtobufForCommit( |
| 962 proto::LayerTreeHost* proto, | 975 proto::LayerTreeHost* proto, |
| 963 std::vector<std::unique_ptr<SwapPromise>>* swap_promises) { | 976 std::vector<std::unique_ptr<SwapPromise>>* swap_promises) { |
| 964 DCHECK(engine_picture_cache_); | 977 DCHECK(engine_picture_cache_); |
| 965 // Not all fields are serialized, as they are either not needed for a commit, | 978 // Not all fields are serialized, as they are either not needed for a commit, |
| 966 // or implementation isn't ready yet. | 979 // or implementation isn't ready yet. |
| 967 // Unsupported items: | 980 // Unsupported items: |
| 968 // - animations | 981 // - animations |
| 969 // - UI resources | 982 // - UI resources |
| 970 // - instrumentation of stats | 983 // - instrumentation of stats |
| 971 // - histograms | 984 // - histograms |
| 972 // Skipped items: | 985 // Skipped items: |
| 973 // - SwapPromise as they are mostly used for perf measurements. | 986 // - SwapPromise as they are mostly used for perf measurements. |
| 974 // - The bitmap and GPU memory related items. | 987 // - The bitmap and GPU memory related items. |
| 975 // Other notes: | 988 // Other notes: |
| 976 // - The output surfaces are only valid on the client-side so they are | 989 // - The output surfaces are only valid on the client-side so they are |
| 977 // therefore not serialized. | 990 // therefore not serialized. |
| 978 // - LayerTreeSettings are needed only during construction of the | 991 // - LayerTreeSettings are needed only during construction of the |
| 979 // LayerTreeHost, so they are serialized outside of the LayerTreeHost | 992 // LayerTreeHostInProcess, so they are serialized outside of the |
| 993 // LayerTreeHostInProcess |
| 980 // serialization. | 994 // serialization. |
| 981 // - The |visible_| flag will be controlled from the client separately and | 995 // - The |visible_| flag will be controlled from the client separately and |
| 982 // will need special handling outside of the serialization of the | 996 // will need special handling outside of the serialization of the |
| 983 // LayerTreeHost. | 997 // LayerTreeHostInProcess. |
| 984 // TODO(nyquist): Figure out how to support animations. See crbug.com/570376. | 998 // TODO(nyquist): Figure out how to support animations. See crbug.com/570376. |
| 985 TRACE_EVENT0("cc.remote", "LayerTreeHost::ToProtobufForCommit"); | 999 TRACE_EVENT0("cc.remote", "LayerTreeHostInProcess::ToProtobufForCommit"); |
| 986 *swap_promises = swap_promise_manager_.TakeSwapPromises(); | 1000 *swap_promises = swap_promise_manager_.TakeSwapPromises(); |
| 987 | 1001 |
| 988 proto->set_source_frame_number(source_frame_number_); | 1002 proto->set_source_frame_number(source_frame_number_); |
| 989 | 1003 |
| 990 // Serialize the LayerTree before serializing the properties. During layer | 1004 // Serialize the LayerTree before serializing the properties. During layer |
| 991 // property serialization, we clear the list |layer_that_should_properties_| | 1005 // property serialization, we clear the list |layer_that_should_properties_| |
| 992 // from the LayerTree. | 1006 // from the LayerTree. |
| 993 layer_tree_->ToProtobuf(proto->mutable_layer_tree()); | 1007 layer_tree_->ToProtobuf(proto->mutable_layer_tree()); |
| 994 | 1008 |
| 995 LayerProtoConverter::SerializeLayerProperties(this, | 1009 LayerProtoConverter::SerializeLayerProperties(this, |
| 996 proto->mutable_layer_updates()); | 1010 proto->mutable_layer_updates()); |
| 997 | 1011 |
| 998 std::vector<PictureData> pictures = | 1012 std::vector<PictureData> pictures = |
| 999 engine_picture_cache_->CalculateCacheUpdateAndFlush(); | 1013 engine_picture_cache_->CalculateCacheUpdateAndFlush(); |
| 1000 proto::PictureDataVectorToSkPicturesProto(pictures, | 1014 proto::PictureDataVectorToSkPicturesProto(pictures, |
| 1001 proto->mutable_pictures()); | 1015 proto->mutable_pictures()); |
| 1002 | 1016 |
| 1003 debug_state_.ToProtobuf(proto->mutable_debug_state()); | 1017 debug_state_.ToProtobuf(proto->mutable_debug_state()); |
| 1004 proto->set_has_gpu_rasterization_trigger(has_gpu_rasterization_trigger_); | 1018 proto->set_has_gpu_rasterization_trigger(has_gpu_rasterization_trigger_); |
| 1005 proto->set_content_is_suitable_for_gpu_rasterization( | 1019 proto->set_content_is_suitable_for_gpu_rasterization( |
| 1006 content_is_suitable_for_gpu_rasterization_); | 1020 content_is_suitable_for_gpu_rasterization_); |
| 1007 proto->set_id(id_); | 1021 proto->set_id(id_); |
| 1008 proto->set_next_commit_forces_redraw(next_commit_forces_redraw_); | 1022 proto->set_next_commit_forces_redraw(next_commit_forces_redraw_); |
| 1009 | 1023 |
| 1010 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( | 1024 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( |
| 1011 "cc.remote", "LayerTreeHostProto", source_frame_number_, | 1025 "cc.remote", "LayerTreeHostProto", source_frame_number_, |
| 1012 ComputeLayerTreeHostProtoSizeSplitAsValue(proto)); | 1026 ComputeLayerTreeHostProtoSizeSplitAsValue(proto)); |
| 1013 } | 1027 } |
| 1014 | 1028 |
| 1015 void LayerTreeHost::FromProtobufForCommit(const proto::LayerTreeHost& proto) { | 1029 void LayerTreeHostInProcess::FromProtobufForCommit( |
| 1030 const proto::LayerTreeHost& proto) { |
| 1016 DCHECK(client_picture_cache_); | 1031 DCHECK(client_picture_cache_); |
| 1017 source_frame_number_ = proto.source_frame_number(); | 1032 source_frame_number_ = proto.source_frame_number(); |
| 1018 | 1033 |
| 1019 layer_tree_->FromProtobuf(proto.layer_tree()); | 1034 layer_tree_->FromProtobuf(proto.layer_tree()); |
| 1020 | 1035 |
| 1021 // Ensure ClientPictureCache contains all the necessary SkPictures before | 1036 // Ensure ClientPictureCache contains all the necessary SkPictures before |
| 1022 // deserializing the properties. | 1037 // deserializing the properties. |
| 1023 proto::SkPictures proto_pictures = proto.pictures(); | 1038 proto::SkPictures proto_pictures = proto.pictures(); |
| 1024 std::vector<PictureData> pictures = | 1039 std::vector<PictureData> pictures = |
| 1025 SkPicturesProtoToPictureDataVector(proto_pictures); | 1040 SkPicturesProtoToPictureDataVector(proto_pictures); |
| 1026 client_picture_cache_->ApplyCacheUpdate(pictures); | 1041 client_picture_cache_->ApplyCacheUpdate(pictures); |
| 1027 | 1042 |
| 1028 LayerProtoConverter::DeserializeLayerProperties(layer_tree_->root_layer(), | 1043 LayerProtoConverter::DeserializeLayerProperties(layer_tree_->root_layer(), |
| 1029 proto.layer_updates()); | 1044 proto.layer_updates()); |
| 1030 | 1045 |
| 1031 // The deserialization is finished, so now clear the cache. | 1046 // The deserialization is finished, so now clear the cache. |
| 1032 client_picture_cache_->Flush(); | 1047 client_picture_cache_->Flush(); |
| 1033 | 1048 |
| 1034 debug_state_.FromProtobuf(proto.debug_state()); | 1049 debug_state_.FromProtobuf(proto.debug_state()); |
| 1035 has_gpu_rasterization_trigger_ = proto.has_gpu_rasterization_trigger(); | 1050 has_gpu_rasterization_trigger_ = proto.has_gpu_rasterization_trigger(); |
| 1036 content_is_suitable_for_gpu_rasterization_ = | 1051 content_is_suitable_for_gpu_rasterization_ = |
| 1037 proto.content_is_suitable_for_gpu_rasterization(); | 1052 proto.content_is_suitable_for_gpu_rasterization(); |
| 1038 id_ = proto.id(); | 1053 id_ = proto.id(); |
| 1039 next_commit_forces_redraw_ = proto.next_commit_forces_redraw(); | 1054 next_commit_forces_redraw_ = proto.next_commit_forces_redraw(); |
| 1040 } | 1055 } |
| 1041 | 1056 |
| 1042 } // namespace cc | 1057 } // namespace cc |
| OLD | NEW |