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