Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: cc/trees/layer_tree_host.cc

Issue 22567004: Ignore should-scroll-on-main-thread if main frame is not scrollable (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/layers/scrollbar_layer_unittest.cc ('k') | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « cc/layers/scrollbar_layer_unittest.cc ('k') | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698