| 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 min_page_scale_factor_(1.f), | 126 min_page_scale_factor_(1.f), |
| 127 max_page_scale_factor_(1.f), | 127 max_page_scale_factor_(1.f), |
| 128 has_gpu_rasterization_trigger_(false), | 128 has_gpu_rasterization_trigger_(false), |
| 129 content_is_suitable_for_gpu_rasterization_(true), | 129 content_is_suitable_for_gpu_rasterization_(true), |
| 130 gpu_rasterization_histogram_recorded_(false), | 130 gpu_rasterization_histogram_recorded_(false), |
| 131 background_color_(SK_ColorWHITE), | 131 background_color_(SK_ColorWHITE), |
| 132 has_transparent_background_(false), | 132 has_transparent_background_(false), |
| 133 partial_texture_update_requests_(0), | 133 partial_texture_update_requests_(0), |
| 134 did_complete_scale_animation_(false), | 134 did_complete_scale_animation_(false), |
| 135 in_paint_layer_contents_(false), | 135 in_paint_layer_contents_(false), |
| 136 total_frames_used_for_lcd_text_metrics_(0), |
| 136 id_(s_layer_tree_host_sequence_number.GetNext() + 1), | 137 id_(s_layer_tree_host_sequence_number.GetNext() + 1), |
| 137 next_commit_forces_redraw_(false), | 138 next_commit_forces_redraw_(false), |
| 138 shared_bitmap_manager_(shared_bitmap_manager), | 139 shared_bitmap_manager_(shared_bitmap_manager), |
| 139 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), | 140 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
| 140 surface_id_namespace_(0u), | 141 surface_id_namespace_(0u), |
| 141 next_surface_sequence_(1u) { | 142 next_surface_sequence_(1u) { |
| 142 if (settings_.accelerated_animation_enabled) | 143 if (settings_.accelerated_animation_enabled) |
| 143 animation_registrar_ = AnimationRegistrar::Create(); | 144 animation_registrar_ = AnimationRegistrar::Create(); |
| 144 rendering_stats_instrumentation_->set_record_rendering_stats( | 145 rendering_stats_instrumentation_->set_record_rendering_stats( |
| 145 debug_state_.RecordRenderingStats()); | 146 debug_state_.RecordRenderingStats()); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 void LayerTreeHost::WillBeginMainFrame() { | 226 void LayerTreeHost::WillBeginMainFrame() { |
| 226 devtools_instrumentation::WillBeginMainThreadFrame(id(), | 227 devtools_instrumentation::WillBeginMainThreadFrame(id(), |
| 227 source_frame_number()); | 228 source_frame_number()); |
| 228 client_->WillBeginMainFrame(); | 229 client_->WillBeginMainFrame(); |
| 229 } | 230 } |
| 230 | 231 |
| 231 void LayerTreeHost::DidBeginMainFrame() { | 232 void LayerTreeHost::DidBeginMainFrame() { |
| 232 client_->DidBeginMainFrame(); | 233 client_->DidBeginMainFrame(); |
| 233 } | 234 } |
| 234 | 235 |
| 235 void LayerTreeHost::BeginMainFrameNotExpectedSoon() { | |
| 236 client_->BeginMainFrameNotExpectedSoon(); | |
| 237 } | |
| 238 | |
| 239 void LayerTreeHost::BeginMainFrame(const BeginFrameArgs& args) { | 236 void LayerTreeHost::BeginMainFrame(const BeginFrameArgs& args) { |
| 240 inside_begin_main_frame_ = true; | 237 inside_begin_main_frame_ = true; |
| 241 client_->BeginMainFrame(args); | 238 client_->BeginMainFrame(args); |
| 242 inside_begin_main_frame_ = false; | 239 inside_begin_main_frame_ = false; |
| 243 } | 240 } |
| 244 | 241 |
| 245 void LayerTreeHost::DidStopFlinging() { | 242 void LayerTreeHost::DidStopFlinging() { |
| 246 proxy_->MainThreadHasStoppedFlinging(); | 243 proxy_->MainThreadHasStoppedFlinging(); |
| 247 } | 244 } |
| 248 | 245 |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 int event_layer_id = (*events)[event_index].layer_id; | 552 int event_layer_id = (*events)[event_index].layer_id; |
| 556 | 553 |
| 557 // Use the map of all controllers, not just active ones, since non-active | 554 // Use the map of all controllers, not just active ones, since non-active |
| 558 // controllers may still receive events for impl-only animations. | 555 // controllers may still receive events for impl-only animations. |
| 559 const AnimationRegistrar::AnimationControllerMap& animation_controllers = | 556 const AnimationRegistrar::AnimationControllerMap& animation_controllers = |
| 560 animation_registrar_->all_animation_controllers(); | 557 animation_registrar_->all_animation_controllers(); |
| 561 AnimationRegistrar::AnimationControllerMap::const_iterator iter = | 558 AnimationRegistrar::AnimationControllerMap::const_iterator iter = |
| 562 animation_controllers.find(event_layer_id); | 559 animation_controllers.find(event_layer_id); |
| 563 if (iter != animation_controllers.end()) { | 560 if (iter != animation_controllers.end()) { |
| 564 switch ((*events)[event_index].type) { | 561 switch ((*events)[event_index].type) { |
| 565 case AnimationEvent::STARTED: | 562 case AnimationEvent::Started: |
| 566 (*iter).second->NotifyAnimationStarted((*events)[event_index]); | 563 (*iter).second->NotifyAnimationStarted((*events)[event_index]); |
| 567 break; | 564 break; |
| 568 | 565 |
| 569 case AnimationEvent::FINISHED: | 566 case AnimationEvent::Finished: |
| 570 (*iter).second->NotifyAnimationFinished((*events)[event_index]); | 567 (*iter).second->NotifyAnimationFinished((*events)[event_index]); |
| 571 break; | 568 break; |
| 572 | 569 |
| 573 case AnimationEvent::ABORTED: | 570 case AnimationEvent::Aborted: |
| 574 (*iter).second->NotifyAnimationAborted((*events)[event_index]); | 571 (*iter).second->NotifyAnimationAborted((*events)[event_index]); |
| 575 break; | 572 break; |
| 576 | 573 |
| 577 case AnimationEvent::PROPERTY_UPDATE: | 574 case AnimationEvent::PropertyUpdate: |
| 578 (*iter).second->NotifyAnimationPropertyUpdate((*events)[event_index]); | 575 (*iter).second->NotifyAnimationPropertyUpdate((*events)[event_index]); |
| 579 break; | 576 break; |
| 580 } | 577 } |
| 581 } | 578 } |
| 582 } | 579 } |
| 583 } | 580 } |
| 584 | 581 |
| 585 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) { | 582 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) { |
| 586 if (root_layer_.get() == root_layer.get()) | 583 if (root_layer_.get() == root_layer.get()) |
| 587 return; | 584 return; |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 content_is_suitable_for_gpu_rasterization_); | 802 content_is_suitable_for_gpu_rasterization_); |
| 806 // Record how many pages actually get gpu rasterization when enabled. | 803 // Record how many pages actually get gpu rasterization when enabled. |
| 807 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationUsed", | 804 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationUsed", |
| 808 (has_gpu_rasterization_trigger_ && | 805 (has_gpu_rasterization_trigger_ && |
| 809 content_is_suitable_for_gpu_rasterization_)); | 806 content_is_suitable_for_gpu_rasterization_)); |
| 810 } | 807 } |
| 811 | 808 |
| 812 gpu_rasterization_histogram_recorded_ = true; | 809 gpu_rasterization_histogram_recorded_ = true; |
| 813 } | 810 } |
| 814 | 811 |
| 812 void LayerTreeHost::CalculateLCDTextMetricsCallback(Layer* layer) { |
| 813 if (!layer->SupportsLCDText()) |
| 814 return; |
| 815 |
| 816 lcd_text_metrics_.total_num_cc_layers++; |
| 817 if (layer->draw_properties().can_use_lcd_text) { |
| 818 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text++; |
| 819 if (layer->contents_opaque()) |
| 820 lcd_text_metrics_.total_num_cc_layers_will_use_lcd_text++; |
| 821 } |
| 822 } |
| 823 |
| 815 bool LayerTreeHost::UsingSharedMemoryResources() { | 824 bool LayerTreeHost::UsingSharedMemoryResources() { |
| 816 return GetRendererCapabilities().using_shared_memory_resources; | 825 return GetRendererCapabilities().using_shared_memory_resources; |
| 817 } | 826 } |
| 818 | 827 |
| 819 bool LayerTreeHost::UpdateLayers(Layer* root_layer, | 828 bool LayerTreeHost::UpdateLayers(Layer* root_layer, |
| 820 ResourceUpdateQueue* queue) { | 829 ResourceUpdateQueue* queue) { |
| 821 TRACE_EVENT1("cc", "LayerTreeHost::UpdateLayers", | 830 TRACE_EVENT1("cc", "LayerTreeHost::UpdateLayers", |
| 822 "source_frame_number", source_frame_number()); | 831 "source_frame_number", source_frame_number()); |
| 823 | 832 |
| 824 RenderSurfaceLayerList update_list; | 833 RenderSurfaceLayerList update_list; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 845 root_layer, device_viewport_size(), gfx::Transform(), | 854 root_layer, device_viewport_size(), gfx::Transform(), |
| 846 device_scale_factor_, page_scale_factor_, page_scale_layer, | 855 device_scale_factor_, page_scale_factor_, page_scale_layer, |
| 847 elastic_overscroll_, overscroll_elasticity_layer_.get(), | 856 elastic_overscroll_, overscroll_elasticity_layer_.get(), |
| 848 GetRendererCapabilities().max_texture_size, settings_.can_use_lcd_text, | 857 GetRendererCapabilities().max_texture_size, settings_.can_use_lcd_text, |
| 849 settings_.layers_always_allowed_lcd_text, | 858 settings_.layers_always_allowed_lcd_text, |
| 850 can_render_to_separate_surface, | 859 can_render_to_separate_surface, |
| 851 settings_.layer_transforms_should_scale_layer_contents, | 860 settings_.layer_transforms_should_scale_layer_contents, |
| 852 settings_.verify_property_trees, &update_list, | 861 settings_.verify_property_trees, &update_list, |
| 853 render_surface_layer_list_id); | 862 render_surface_layer_list_id); |
| 854 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 863 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
| 864 |
| 865 if (total_frames_used_for_lcd_text_metrics_ <= |
| 866 kTotalFramesToUseForLCDTextMetrics) { |
| 867 LayerTreeHostCommon::CallFunctionForSubtree( |
| 868 root_layer, |
| 869 base::Bind(&LayerTreeHost::CalculateLCDTextMetricsCallback, |
| 870 base::Unretained(this))); |
| 871 total_frames_used_for_lcd_text_metrics_++; |
| 872 } |
| 873 |
| 874 if (total_frames_used_for_lcd_text_metrics_ == |
| 875 kTotalFramesToUseForLCDTextMetrics) { |
| 876 total_frames_used_for_lcd_text_metrics_++; |
| 877 |
| 878 UMA_HISTOGRAM_PERCENTAGE( |
| 879 "Renderer4.LCDText.PercentageOfCandidateLayers", |
| 880 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text * 100.0 / |
| 881 lcd_text_metrics_.total_num_cc_layers); |
| 882 UMA_HISTOGRAM_PERCENTAGE( |
| 883 "Renderer4.LCDText.PercentageOfAALayers", |
| 884 lcd_text_metrics_.total_num_cc_layers_will_use_lcd_text * 100.0 / |
| 885 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text); |
| 886 } |
| 855 } | 887 } |
| 856 | 888 |
| 857 // Reset partial texture update requests. | 889 // Reset partial texture update requests. |
| 858 partial_texture_update_requests_ = 0; | 890 partial_texture_update_requests_ = 0; |
| 859 | 891 |
| 860 bool did_paint_content = false; | 892 bool did_paint_content = false; |
| 861 bool need_more_updates = false; | 893 bool need_more_updates = false; |
| 862 PaintLayerContents( | 894 PaintLayerContents( |
| 863 update_list, queue, &did_paint_content, &need_more_updates); | 895 update_list, queue, &did_paint_content, &need_more_updates); |
| 864 if (need_more_updates) { | 896 if (need_more_updates) { |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1212 } | 1244 } |
| 1213 | 1245 |
| 1214 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { | 1246 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { |
| 1215 DCHECK(client); | 1247 DCHECK(client); |
| 1216 | 1248 |
| 1217 UIResourceId next_id = next_ui_resource_id_++; | 1249 UIResourceId next_id = next_ui_resource_id_++; |
| 1218 DCHECK(ui_resource_client_map_.find(next_id) == | 1250 DCHECK(ui_resource_client_map_.find(next_id) == |
| 1219 ui_resource_client_map_.end()); | 1251 ui_resource_client_map_.end()); |
| 1220 | 1252 |
| 1221 bool resource_lost = false; | 1253 bool resource_lost = false; |
| 1222 UIResourceRequest request(UIResourceRequest::UI_RESOURCE_CREATE, next_id, | 1254 UIResourceRequest request(UIResourceRequest::UIResourceCreate, |
| 1255 next_id, |
| 1223 client->GetBitmap(next_id, resource_lost)); | 1256 client->GetBitmap(next_id, resource_lost)); |
| 1224 ui_resource_request_queue_.push_back(request); | 1257 ui_resource_request_queue_.push_back(request); |
| 1225 | 1258 |
| 1226 UIResourceClientData data; | 1259 UIResourceClientData data; |
| 1227 data.client = client; | 1260 data.client = client; |
| 1228 data.size = request.GetBitmap().GetSize(); | 1261 data.size = request.GetBitmap().GetSize(); |
| 1229 | 1262 |
| 1230 ui_resource_client_map_[request.GetId()] = data; | 1263 ui_resource_client_map_[request.GetId()] = data; |
| 1231 return request.GetId(); | 1264 return request.GetId(); |
| 1232 } | 1265 } |
| 1233 | 1266 |
| 1234 // Deletes a UI resource. May safely be called more than once. | 1267 // Deletes a UI resource. May safely be called more than once. |
| 1235 void LayerTreeHost::DeleteUIResource(UIResourceId uid) { | 1268 void LayerTreeHost::DeleteUIResource(UIResourceId uid) { |
| 1236 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid); | 1269 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid); |
| 1237 if (iter == ui_resource_client_map_.end()) | 1270 if (iter == ui_resource_client_map_.end()) |
| 1238 return; | 1271 return; |
| 1239 | 1272 |
| 1240 UIResourceRequest request(UIResourceRequest::UI_RESOURCE_DELETE, uid); | 1273 UIResourceRequest request(UIResourceRequest::UIResourceDelete, uid); |
| 1241 ui_resource_request_queue_.push_back(request); | 1274 ui_resource_request_queue_.push_back(request); |
| 1242 ui_resource_client_map_.erase(iter); | 1275 ui_resource_client_map_.erase(iter); |
| 1243 } | 1276 } |
| 1244 | 1277 |
| 1245 void LayerTreeHost::RecreateUIResources() { | 1278 void LayerTreeHost::RecreateUIResources() { |
| 1246 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin(); | 1279 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin(); |
| 1247 iter != ui_resource_client_map_.end(); | 1280 iter != ui_resource_client_map_.end(); |
| 1248 ++iter) { | 1281 ++iter) { |
| 1249 UIResourceId uid = iter->first; | 1282 UIResourceId uid = iter->first; |
| 1250 const UIResourceClientData& data = iter->second; | 1283 const UIResourceClientData& data = iter->second; |
| 1251 bool resource_lost = true; | 1284 bool resource_lost = true; |
| 1252 UIResourceRequest request(UIResourceRequest::UI_RESOURCE_CREATE, uid, | 1285 UIResourceRequest request(UIResourceRequest::UIResourceCreate, |
| 1286 uid, |
| 1253 data.client->GetBitmap(uid, resource_lost)); | 1287 data.client->GetBitmap(uid, resource_lost)); |
| 1254 ui_resource_request_queue_.push_back(request); | 1288 ui_resource_request_queue_.push_back(request); |
| 1255 } | 1289 } |
| 1256 } | 1290 } |
| 1257 | 1291 |
| 1258 // Returns the size of a resource given its id. | 1292 // Returns the size of a resource given its id. |
| 1259 gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const { | 1293 gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const { |
| 1260 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid); | 1294 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid); |
| 1261 if (iter == ui_resource_client_map_.end()) | 1295 if (iter == ui_resource_client_map_.end()) |
| 1262 return gfx::Size(); | 1296 return gfx::Size(); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1336 bool children_need_begin_frames) const { | 1370 bool children_need_begin_frames) const { |
| 1337 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); | 1371 proxy_->SetChildrenNeedBeginFrames(children_need_begin_frames); |
| 1338 } | 1372 } |
| 1339 | 1373 |
| 1340 void LayerTreeHost::SendBeginFramesToChildren( | 1374 void LayerTreeHost::SendBeginFramesToChildren( |
| 1341 const BeginFrameArgs& args) const { | 1375 const BeginFrameArgs& args) const { |
| 1342 client_->SendBeginFramesToChildren(args); | 1376 client_->SendBeginFramesToChildren(args); |
| 1343 } | 1377 } |
| 1344 | 1378 |
| 1345 } // namespace cc | 1379 } // namespace cc |
| OLD | NEW |