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 |