| 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.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <stack> | 8 #include <stack> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 // made a contract with our animation controllers that the registrar | 204 // made a contract with our animation controllers that the registrar |
| 205 // will outlive them, and we must make good. | 205 // will outlive them, and we must make good. |
| 206 root_layer_ = NULL; | 206 root_layer_ = NULL; |
| 207 } | 207 } |
| 208 } | 208 } |
| 209 | 209 |
| 210 void LayerTreeHost::SetLayerTreeHostClientReady() { | 210 void LayerTreeHost::SetLayerTreeHostClientReady() { |
| 211 proxy_->SetLayerTreeHostClientReady(); | 211 proxy_->SetLayerTreeHostClientReady(); |
| 212 } | 212 } |
| 213 | 213 |
| 214 static void LayerTreeHostOnOutputSurfaceCreatedCallback(Layer* layer) { | |
| 215 layer->OnOutputSurfaceCreated(); | |
| 216 } | |
| 217 | |
| 218 void LayerTreeHost::DeleteContentsTexturesOnImplThread( | 214 void LayerTreeHost::DeleteContentsTexturesOnImplThread( |
| 219 ResourceProvider* resource_provider) { | 215 ResourceProvider* resource_provider) { |
| 220 DCHECK(proxy_->IsImplThread()); | 216 DCHECK(proxy_->IsImplThread()); |
| 221 if (contents_texture_manager_) | 217 if (contents_texture_manager_) |
| 222 contents_texture_manager_->ClearAllMemory(resource_provider); | 218 contents_texture_manager_->ClearAllMemory(resource_provider); |
| 223 } | 219 } |
| 224 | 220 |
| 225 void LayerTreeHost::WillBeginMainFrame() { | 221 void LayerTreeHost::WillBeginMainFrame() { |
| 226 devtools_instrumentation::WillBeginMainThreadFrame(id(), | 222 devtools_instrumentation::WillBeginMainThreadFrame(id(), |
| 227 source_frame_number()); | 223 source_frame_number()); |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 | 416 |
| 421 if (!contents_texture_manager_ && !settings_.impl_side_painting) { | 417 if (!contents_texture_manager_ && !settings_.impl_side_painting) { |
| 422 contents_texture_manager_ = | 418 contents_texture_manager_ = |
| 423 PrioritizedResourceManager::Create(proxy_.get()); | 419 PrioritizedResourceManager::Create(proxy_.get()); |
| 424 surface_memory_placeholder_ = | 420 surface_memory_placeholder_ = |
| 425 contents_texture_manager_->CreateTexture(gfx::Size(), RGBA_8888); | 421 contents_texture_manager_->CreateTexture(gfx::Size(), RGBA_8888); |
| 426 } | 422 } |
| 427 | 423 |
| 428 if (root_layer()) { | 424 if (root_layer()) { |
| 429 LayerTreeHostCommon::CallFunctionForSubtree( | 425 LayerTreeHostCommon::CallFunctionForSubtree( |
| 430 root_layer(), base::Bind(&LayerTreeHostOnOutputSurfaceCreatedCallback)); | 426 root_layer(), [](Layer* layer) { layer->OnOutputSurfaceCreated(); }); |
| 431 } | 427 } |
| 432 | 428 |
| 433 client_->DidInitializeOutputSurface(); | 429 client_->DidInitializeOutputSurface(); |
| 434 } | 430 } |
| 435 | 431 |
| 436 void LayerTreeHost::DidFailToInitializeOutputSurface() { | 432 void LayerTreeHost::DidFailToInitializeOutputSurface() { |
| 437 DCHECK(output_surface_lost_); | 433 DCHECK(output_surface_lost_); |
| 438 client_->DidFailToInitializeOutputSurface(); | 434 client_->DidFailToInitializeOutputSurface(); |
| 439 } | 435 } |
| 440 | 436 |
| 441 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl( | 437 scoped_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl( |
| 442 LayerTreeHostImplClient* client) { | 438 LayerTreeHostImplClient* client) { |
| 443 DCHECK(proxy_->IsImplThread()); | 439 DCHECK(proxy_->IsImplThread()); |
| 444 scoped_ptr<LayerTreeHostImpl> host_impl = | 440 scoped_ptr<LayerTreeHostImpl> host_impl = |
| 445 LayerTreeHostImpl::Create(settings_, | 441 LayerTreeHostImpl::Create(settings_, |
| 446 client, | 442 client, |
| 447 proxy_.get(), | 443 proxy_.get(), |
| 448 rendering_stats_instrumentation_.get(), | 444 rendering_stats_instrumentation_.get(), |
| 449 shared_bitmap_manager_, | 445 shared_bitmap_manager_, |
| 450 gpu_memory_buffer_manager_, | 446 gpu_memory_buffer_manager_, |
| 451 id_); | 447 id_); |
| 452 host_impl->SetUseGpuRasterization(UseGpuRasterization()); | 448 host_impl->SetUseGpuRasterization(UseGpuRasterization()); |
| 453 shared_bitmap_manager_ = NULL; | 449 shared_bitmap_manager_ = NULL; |
| 454 gpu_memory_buffer_manager_ = NULL; | 450 gpu_memory_buffer_manager_ = NULL; |
| 455 if (settings_.calculate_top_controls_position && | 451 top_controls_manager_weak_ptr_ = |
| 456 host_impl->top_controls_manager()) { | 452 host_impl->top_controls_manager()->AsWeakPtr(); |
| 457 top_controls_manager_weak_ptr_ = | |
| 458 host_impl->top_controls_manager()->AsWeakPtr(); | |
| 459 } | |
| 460 input_handler_weak_ptr_ = host_impl->AsWeakPtr(); | 453 input_handler_weak_ptr_ = host_impl->AsWeakPtr(); |
| 461 return host_impl.Pass(); | 454 return host_impl.Pass(); |
| 462 } | 455 } |
| 463 | 456 |
| 464 void LayerTreeHost::DidLoseOutputSurface() { | 457 void LayerTreeHost::DidLoseOutputSurface() { |
| 465 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface"); | 458 TRACE_EVENT0("cc", "LayerTreeHost::DidLoseOutputSurface"); |
| 466 DCHECK(proxy_->IsMainThread()); | 459 DCHECK(proxy_->IsMainThread()); |
| 467 | 460 |
| 468 if (output_surface_lost_) | 461 if (output_surface_lost_) |
| 469 return; | 462 return; |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 866 | 859 |
| 867 return did_paint_content; | 860 return did_paint_content; |
| 868 } | 861 } |
| 869 | 862 |
| 870 void LayerTreeHost::TriggerPrepaint() { | 863 void LayerTreeHost::TriggerPrepaint() { |
| 871 prepaint_callback_.Cancel(); | 864 prepaint_callback_.Cancel(); |
| 872 TRACE_EVENT0("cc", "LayerTreeHost::TriggerPrepaint"); | 865 TRACE_EVENT0("cc", "LayerTreeHost::TriggerPrepaint"); |
| 873 SetNeedsCommit(); | 866 SetNeedsCommit(); |
| 874 } | 867 } |
| 875 | 868 |
| 876 static void LayerTreeHostReduceMemoryCallback(Layer* layer) { | |
| 877 layer->ReduceMemoryUsage(); | |
| 878 } | |
| 879 | |
| 880 void LayerTreeHost::ReduceMemoryUsage() { | 869 void LayerTreeHost::ReduceMemoryUsage() { |
| 881 if (!root_layer()) | 870 if (!root_layer()) |
| 882 return; | 871 return; |
| 883 | 872 |
| 884 LayerTreeHostCommon::CallFunctionForSubtree( | 873 LayerTreeHostCommon::CallFunctionForSubtree( |
| 885 root_layer(), | 874 root_layer(), [](Layer* layer) { layer->ReduceMemoryUsage(); }); |
| 886 base::Bind(&LayerTreeHostReduceMemoryCallback)); | |
| 887 } | 875 } |
| 888 | 876 |
| 889 void LayerTreeHost::SetPrioritiesForSurfaces(size_t surface_memory_bytes) { | 877 void LayerTreeHost::SetPrioritiesForSurfaces(size_t surface_memory_bytes) { |
| 890 DCHECK(surface_memory_placeholder_); | 878 DCHECK(surface_memory_placeholder_); |
| 891 | 879 |
| 892 // Surfaces have a place holder for their memory since they are managed | 880 // Surfaces have a place holder for their memory since they are managed |
| 893 // independantly but should still be tracked and reduce other memory usage. | 881 // independantly but should still be tracked and reduce other memory usage. |
| 894 surface_memory_placeholder_->SetTextureManager( | 882 surface_memory_placeholder_->SetTextureManager( |
| 895 contents_texture_manager_.get()); | 883 contents_texture_manager_.get()); |
| 896 surface_memory_placeholder_->set_request_priority( | 884 surface_memory_placeholder_->set_request_priority( |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1160 if (device_scale_factor == device_scale_factor_) | 1148 if (device_scale_factor == device_scale_factor_) |
| 1161 return; | 1149 return; |
| 1162 device_scale_factor_ = device_scale_factor; | 1150 device_scale_factor_ = device_scale_factor; |
| 1163 | 1151 |
| 1164 SetNeedsCommit(); | 1152 SetNeedsCommit(); |
| 1165 } | 1153 } |
| 1166 | 1154 |
| 1167 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints, | 1155 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints, |
| 1168 TopControlsState current, | 1156 TopControlsState current, |
| 1169 bool animate) { | 1157 bool animate) { |
| 1170 if (!settings_.calculate_top_controls_position) | |
| 1171 return; | |
| 1172 | |
| 1173 // Top controls are only used in threaded mode. | 1158 // Top controls are only used in threaded mode. |
| 1174 proxy_->ImplThreadTaskRunner()->PostTask( | 1159 proxy_->ImplThreadTaskRunner()->PostTask( |
| 1175 FROM_HERE, | 1160 FROM_HERE, |
| 1176 base::Bind(&TopControlsManager::UpdateTopControlsState, | 1161 base::Bind(&TopControlsManager::UpdateTopControlsState, |
| 1177 top_controls_manager_weak_ptr_, | 1162 top_controls_manager_weak_ptr_, |
| 1178 constraints, | 1163 constraints, |
| 1179 current, | 1164 current, |
| 1180 animate)); | 1165 animate)); |
| 1181 } | 1166 } |
| 1182 | 1167 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1327 bool children_need_begin_frames) const { | 1312 bool children_need_begin_frames) const { |
| 1328 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); | 1313 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); |
| 1329 } | 1314 } |
| 1330 | 1315 |
| 1331 void LayerTreeHost::SendBeginFramesToChildren( | 1316 void LayerTreeHost::SendBeginFramesToChildren( |
| 1332 const BeginFrameArgs& args) const { | 1317 const BeginFrameArgs& args) const { |
| 1333 client_->SendBeginFramesToChildren(args); | 1318 client_->SendBeginFramesToChildren(args); |
| 1334 } | 1319 } |
| 1335 | 1320 |
| 1336 } // namespace cc | 1321 } // namespace cc |
| OLD | NEW |