| 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 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 DCHECK(!root_layer()->parent()); | 683 DCHECK(!root_layer()->parent()); |
| 684 | 684 |
| 685 if (contents_texture_manager_ && memory_allocation_limit_bytes) { | 685 if (contents_texture_manager_ && memory_allocation_limit_bytes) { |
| 686 contents_texture_manager_->SetMaxMemoryLimitBytes( | 686 contents_texture_manager_->SetMaxMemoryLimitBytes( |
| 687 memory_allocation_limit_bytes); | 687 memory_allocation_limit_bytes); |
| 688 } | 688 } |
| 689 | 689 |
| 690 return UpdateLayers(root_layer(), queue); | 690 return UpdateLayers(root_layer(), queue); |
| 691 } | 691 } |
| 692 | 692 |
| 693 static Layer* FindFirstScrollableLayer(Layer* layer) { | |
| 694 if (!layer) | |
| 695 return NULL; | |
| 696 | |
| 697 if (layer->scrollable()) | |
| 698 return layer; | |
| 699 | |
| 700 for (size_t i = 0; i < layer->children().size(); ++i) { | |
| 701 Layer* found = FindFirstScrollableLayer(layer->children()[i].get()); | |
| 702 if (found) | |
| 703 return found; | |
| 704 } | |
| 705 | |
| 706 return NULL; | |
| 707 } | |
| 708 | |
| 709 void LayerTreeHost::CalculateLCDTextMetricsCallback(Layer* layer) { | 693 void LayerTreeHost::CalculateLCDTextMetricsCallback(Layer* layer) { |
| 710 if (!layer->SupportsLCDText()) | 694 if (!layer->SupportsLCDText()) |
| 711 return; | 695 return; |
| 712 | 696 |
| 713 lcd_text_metrics_.total_num_cc_layers++; | 697 lcd_text_metrics_.total_num_cc_layers++; |
| 714 if (layer->draw_properties().can_use_lcd_text) { | 698 if (layer->draw_properties().can_use_lcd_text) { |
| 715 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text++; | 699 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text++; |
| 716 if (layer->contents_opaque()) | 700 if (layer->contents_opaque()) |
| 717 lcd_text_metrics_.total_num_cc_layers_will_use_lcd_text++; | 701 lcd_text_metrics_.total_num_cc_layers_will_use_lcd_text++; |
| 718 } | 702 } |
| 719 } | 703 } |
| 720 | 704 |
| 721 bool LayerTreeHost::UsingSharedMemoryResources() { | 705 bool LayerTreeHost::UsingSharedMemoryResources() { |
| 722 return GetRendererCapabilities().using_shared_memory_resources; | 706 return GetRendererCapabilities().using_shared_memory_resources; |
| 723 } | 707 } |
| 724 | 708 |
| 725 bool LayerTreeHost::UpdateLayers(Layer* root_layer, | 709 bool LayerTreeHost::UpdateLayers(Layer* root_layer, |
| 726 ResourceUpdateQueue* queue) { | 710 ResourceUpdateQueue* queue) { |
| 727 TRACE_EVENT1(benchmark_instrumentation::kCategory, | 711 TRACE_EVENT1(benchmark_instrumentation::kCategory, |
| 728 benchmark_instrumentation::kLayerTreeHostUpdateLayers, | 712 benchmark_instrumentation::kLayerTreeHostUpdateLayers, |
| 729 benchmark_instrumentation::kSourceFrameNumber, | 713 benchmark_instrumentation::kSourceFrameNumber, |
| 730 source_frame_number()); | 714 source_frame_number()); |
| 731 | 715 |
| 732 RenderSurfaceLayerList update_list; | 716 RenderSurfaceLayerList update_list; |
| 733 { | 717 { |
| 734 UpdateHudLayer(); | 718 UpdateHudLayer(); |
| 735 | 719 |
| 736 Layer* root_scroll = FindFirstScrollableLayer(root_layer); | 720 Layer* root_scroll = |
| 721 LayerTreeHostCommon::FindFirstScrollableLayer(root_layer); |
| 737 | 722 |
| 738 if (hud_layer_) { | 723 if (hud_layer_) { |
| 739 hud_layer_->PrepareForCalculateDrawProperties( | 724 hud_layer_->PrepareForCalculateDrawProperties( |
| 740 device_viewport_size(), device_scale_factor_); | 725 device_viewport_size(), device_scale_factor_); |
| 741 } | 726 } |
| 742 | 727 |
| 743 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps"); | 728 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::CalcDrawProps"); |
| 744 LayerTreeHostCommon::CalcDrawPropsMainInputs inputs( | 729 LayerTreeHostCommon::CalcDrawPropsMainInputs inputs( |
| 745 root_layer, | 730 root_layer, |
| 746 device_viewport_size(), | 731 device_viewport_size(), |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 if (has_scrolls) { | 986 if (has_scrolls) { |
| 1002 // We use async events here because we want to conditionally trace. This | 987 // We use async events here because we want to conditionally trace. This |
| 1003 // is too spammy otherwise. | 988 // is too spammy otherwise. |
| 1004 TRACE_EVENT_ASYNC_BEGIN0( | 989 TRACE_EVENT_ASYNC_BEGIN0( |
| 1005 "impl-scroll", | 990 "impl-scroll", |
| 1006 "LayerTreeHost::ApplyScrollAndScale", | 991 "LayerTreeHost::ApplyScrollAndScale", |
| 1007 this); | 992 this); |
| 1008 } | 993 } |
| 1009 | 994 |
| 1010 gfx::Vector2d root_scroll_delta; | 995 gfx::Vector2d root_scroll_delta; |
| 1011 Layer* root_scroll_layer = FindFirstScrollableLayer(root_layer_.get()); | 996 Layer* root_scroll_layer = |
| 997 LayerTreeHostCommon::FindFirstScrollableLayer(root_layer_.get()); |
| 1012 | 998 |
| 1013 for (size_t i = 0; i < info.scrolls.size(); ++i) { | 999 for (size_t i = 0; i < info.scrolls.size(); ++i) { |
| 1014 Layer* layer = | 1000 Layer* layer = |
| 1015 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), | 1001 LayerTreeHostCommon::FindLayerInSubtree(root_layer_.get(), |
| 1016 info.scrolls[i].layer_id); | 1002 info.scrolls[i].layer_id); |
| 1017 if (!layer) | 1003 if (!layer) |
| 1018 continue; | 1004 continue; |
| 1019 if (layer == root_scroll_layer) { | 1005 if (layer == root_scroll_layer) { |
| 1020 root_scroll_delta += info.scrolls[i].scroll_delta; | 1006 root_scroll_delta += info.scrolls[i].scroll_delta; |
| 1021 } else { | 1007 } else { |
| 1022 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + | 1008 layer->SetScrollOffsetFromImplSide(layer->scroll_offset() + |
| 1023 info.scrolls[i].scroll_delta); | 1009 info.scrolls[i].scroll_delta); |
| 1024 } | 1010 } |
| 1025 } | 1011 } |
| 1026 | 1012 |
| 1027 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) { | 1013 if (!root_scroll_delta.IsZero() || info.page_scale_delta != 1.f) { |
| 1028 // SetScrollOffsetFromImplSide above could have destroyed the tree, | 1014 // SetScrollOffsetFromImplSide above could have destroyed the tree, |
| 1029 // so re-get this layer before doing anything to it. | 1015 // so re-get this layer before doing anything to it. |
| 1030 root_scroll_layer = FindFirstScrollableLayer(root_layer_.get()); | 1016 root_scroll_layer = |
| 1017 LayerTreeHostCommon::FindFirstScrollableLayer(root_layer_.get()); |
| 1031 | 1018 |
| 1032 // Preemptively apply the scroll offset and scale delta here before sending | 1019 // Preemptively apply the scroll offset and scale delta here before sending |
| 1033 // it to the client. If the client comes back and sets it to the same | 1020 // it to the client. If the client comes back and sets it to the same |
| 1034 // value, then the layer can early out without needing a full commit. | 1021 // value, then the layer can early out without needing a full commit. |
| 1035 if (root_scroll_layer) { | 1022 if (root_scroll_layer) { |
| 1036 root_scroll_layer->SetScrollOffsetFromImplSide( | 1023 root_scroll_layer->SetScrollOffsetFromImplSide( |
| 1037 root_scroll_layer->scroll_offset() + root_scroll_delta); | 1024 root_scroll_layer->scroll_offset() + root_scroll_delta); |
| 1038 } | 1025 } |
| 1039 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); | 1026 ApplyPageScaleDeltaFromImplSide(info.page_scale_delta); |
| 1040 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta); | 1027 client_->ApplyScrollAndScale(root_scroll_delta, info.page_scale_delta); |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1191 void LayerTreeHost::DidLoseUIResources() { | 1178 void LayerTreeHost::DidLoseUIResources() { |
| 1192 // When output surface is lost, we need to recreate the resource. | 1179 // When output surface is lost, we need to recreate the resource. |
| 1193 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin(); | 1180 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin(); |
| 1194 iter != ui_resource_client_map_.end(); | 1181 iter != ui_resource_client_map_.end(); |
| 1195 ++iter) { | 1182 ++iter) { |
| 1196 UIResourceLost(iter->first); | 1183 UIResourceLost(iter->first); |
| 1197 } | 1184 } |
| 1198 } | 1185 } |
| 1199 | 1186 |
| 1200 } // namespace cc | 1187 } // namespace cc |
| OLD | NEW |