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

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

Issue 15959012: cc: Make all layer recursion use CallFunctionForSubtree (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DidBeginTracing changes Created 7 years, 6 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 | « no previous file | 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>
9 8
10 #include "base/bind.h" 9 #include "base/bind.h"
11 #include "base/command_line.h" 10 #include "base/command_line.h"
12 #include "base/debug/trace_event.h" 11 #include "base/debug/trace_event.h"
13 #include "base/message_loop.h" 12 #include "base/message_loop.h"
14 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
15 #include "base/stl_util.h" 14 #include "base/stl_util.h"
16 #include "base/string_number_conversions.h" 15 #include "base/string_number_conversions.h"
17 #include "cc/animation/animation_registrar.h" 16 #include "cc/animation/animation_registrar.h"
18 #include "cc/animation/layer_animation_controller.h" 17 #include "cc/animation/layer_animation_controller.h"
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 void LayerTreeHost::FinishAllRendering() { 430 void LayerTreeHost::FinishAllRendering() {
432 proxy_->FinishAllRendering(); 431 proxy_->FinishAllRendering();
433 } 432 }
434 433
435 void LayerTreeHost::SetDeferCommits(bool defer_commits) { 434 void LayerTreeHost::SetDeferCommits(bool defer_commits) {
436 proxy_->SetDeferCommits(defer_commits); 435 proxy_->SetDeferCommits(defer_commits);
437 } 436 }
438 437
439 void LayerTreeHost::DidDeferCommit() {} 438 void LayerTreeHost::DidDeferCommit() {}
440 439
440 static void SetNeedsDisplay(Layer* layer) {
441 layer->SetNeedsDisplay();
442 }
443
441 void LayerTreeHost::SetNeedsDisplayOnAllLayers() { 444 void LayerTreeHost::SetNeedsDisplayOnAllLayers() {
442 std::stack<Layer*> layer_stack; 445 if (root_layer())
443 layer_stack.push(root_layer()); 446 LayerTreeHostCommon::CallFunctionForSubtree(SetNeedsDisplay, root_layer());
444 while (!layer_stack.empty()) {
445 Layer* current_layer = layer_stack.top();
446 layer_stack.pop();
447 current_layer->SetNeedsDisplay();
448 for (unsigned int i = 0; i < current_layer->children().size(); i++) {
449 layer_stack.push(current_layer->child_at(i));
450 }
451 }
452 } 447 }
453 448
454 void LayerTreeHost::CollectRenderingStats(RenderingStats* stats) const { 449 void LayerTreeHost::CollectRenderingStats(RenderingStats* stats) const {
455 CHECK(debug_state_.RecordRenderingStats()); 450 CHECK(debug_state_.RecordRenderingStats());
456 *stats = rendering_stats_instrumentation_->GetRenderingStats(); 451 *stats = rendering_stats_instrumentation_->GetRenderingStats();
457 } 452 }
458 453
459 const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const { 454 const RendererCapabilities& LayerTreeHost::GetRendererCapabilities() const {
460 return proxy_->GetRendererCapabilities(); 455 return proxy_->GetRendererCapabilities();
461 } 456 }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 660
666 for (size_t i = 0; i < layer->children().size(); ++i) { 661 for (size_t i = 0; i < layer->children().size(); ++i) {
667 Layer* found = FindFirstScrollableLayer(layer->children()[i].get()); 662 Layer* found = FindFirstScrollableLayer(layer->children()[i].get());
668 if (found) 663 if (found)
669 return found; 664 return found;
670 } 665 }
671 666
672 return NULL; 667 return NULL;
673 } 668 }
674 669
675 class CalculateLCDTextMetricsFunctor { 670 static void CalculateLCDTextMetrics(Layer* layer) {
676 public: 671 LayerTreeHost* layer_tree_host = layer->layer_tree_host();
677 void operator()(Layer* layer) { 672 if (!layer_tree_host)
678 LayerTreeHost* layer_tree_host = layer->layer_tree_host(); 673 return;
679 if (!layer_tree_host)
680 return;
681 674
682 if (!layer->SupportsLCDText()) 675 if (!layer->SupportsLCDText())
683 return; 676 return;
684 677
685 bool update_total_num_cc_layers_can_use_lcd_text = false; 678 bool update_total_num_cc_layers_can_use_lcd_text = false;
686 bool update_total_num_cc_layers_will_use_lcd_text = false; 679 bool update_total_num_cc_layers_will_use_lcd_text = false;
687 if (layer->draw_properties().can_use_lcd_text) { 680 if (layer->draw_properties().can_use_lcd_text) {
688 update_total_num_cc_layers_can_use_lcd_text = true; 681 update_total_num_cc_layers_can_use_lcd_text = true;
689 if (layer->contents_opaque()) 682 if (layer->contents_opaque())
690 update_total_num_cc_layers_will_use_lcd_text = true; 683 update_total_num_cc_layers_will_use_lcd_text = true;
691 } 684 }
692 685
693 layer_tree_host->IncrementLCDTextMetrics( 686 layer_tree_host->IncrementLCDTextMetrics(
694 update_total_num_cc_layers_can_use_lcd_text, 687 update_total_num_cc_layers_can_use_lcd_text,
695 update_total_num_cc_layers_will_use_lcd_text); 688 update_total_num_cc_layers_will_use_lcd_text);
696 } 689 }
697 };
698 690
699 void LayerTreeHost::IncrementLCDTextMetrics( 691 void LayerTreeHost::IncrementLCDTextMetrics(
700 bool update_total_num_cc_layers_can_use_lcd_text, 692 bool update_total_num_cc_layers_can_use_lcd_text,
701 bool update_total_num_cc_layers_will_use_lcd_text) { 693 bool update_total_num_cc_layers_will_use_lcd_text) {
702 lcd_text_metrics_.total_num_cc_layers++; 694 lcd_text_metrics_.total_num_cc_layers++;
703 if (update_total_num_cc_layers_can_use_lcd_text) 695 if (update_total_num_cc_layers_can_use_lcd_text)
704 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text++; 696 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text++;
705 if (update_total_num_cc_layers_will_use_lcd_text) { 697 if (update_total_num_cc_layers_will_use_lcd_text) {
706 DCHECK(update_total_num_cc_layers_can_use_lcd_text); 698 DCHECK(update_total_num_cc_layers_can_use_lcd_text);
707 lcd_text_metrics_.total_num_cc_layers_will_use_lcd_text++; 699 lcd_text_metrics_.total_num_cc_layers_will_use_lcd_text++;
(...skipping 18 matching lines...) Expand all
726 device_scale_factor_, 718 device_scale_factor_,
727 page_scale_factor_, 719 page_scale_factor_,
728 root_scroll, 720 root_scroll,
729 GetRendererCapabilities().max_texture_size, 721 GetRendererCapabilities().max_texture_size,
730 settings_.can_use_lcd_text, 722 settings_.can_use_lcd_text,
731 settings_.layer_transforms_should_scale_layer_contents, 723 settings_.layer_transforms_should_scale_layer_contents,
732 &update_list); 724 &update_list);
733 725
734 if (total_frames_used_for_lcd_text_metrics_ <= 726 if (total_frames_used_for_lcd_text_metrics_ <=
735 kTotalFramesToUseForLCDTextMetrics) { 727 kTotalFramesToUseForLCDTextMetrics) {
736 LayerTreeHostCommon::CallFunctionForSubtree< 728 LayerTreeHostCommon::CallFunctionForSubtree(CalculateLCDTextMetrics,
737 CalculateLCDTextMetricsFunctor, Layer>(root_layer); 729 root_layer);
738 total_frames_used_for_lcd_text_metrics_++; 730 total_frames_used_for_lcd_text_metrics_++;
739 } 731 }
740 732
741 if (total_frames_used_for_lcd_text_metrics_ == 733 if (total_frames_used_for_lcd_text_metrics_ ==
742 kTotalFramesToUseForLCDTextMetrics) { 734 kTotalFramesToUseForLCDTextMetrics) {
743 total_frames_used_for_lcd_text_metrics_++; 735 total_frames_used_for_lcd_text_metrics_++;
744 736
745 UMA_HISTOGRAM_PERCENTAGE( 737 UMA_HISTOGRAM_PERCENTAGE(
746 "Renderer4.LCDText.PercentageOfCandidateLayers", 738 "Renderer4.LCDText.PercentageOfCandidateLayers",
747 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text * 100.0 / 739 lcd_text_metrics_.total_num_cc_layers_can_use_lcd_text * 100.0 /
(...skipping 22 matching lines...) Expand all
770 for (size_t i = 0; i < update_list.size(); ++i) 762 for (size_t i = 0; i < update_list.size(); ++i)
771 update_list[i]->ClearRenderSurface(); 763 update_list[i]->ClearRenderSurface();
772 } 764 }
773 765
774 void LayerTreeHost::TriggerPrepaint() { 766 void LayerTreeHost::TriggerPrepaint() {
775 prepaint_callback_.Cancel(); 767 prepaint_callback_.Cancel();
776 TRACE_EVENT0("cc", "LayerTreeHost::TriggerPrepaint"); 768 TRACE_EVENT0("cc", "LayerTreeHost::TriggerPrepaint");
777 SetNeedsCommit(); 769 SetNeedsCommit();
778 } 770 }
779 771
780 class LayerTreeHostReduceMemoryFunctor { 772 static void ReduceMemoryUsageForLayer(Layer* layer) {
781 public: 773 layer->ReduceMemoryUsage();
782 void operator()(Layer* layer) { 774 }
783 layer->ReduceMemoryUsage();
784 }
785 };
786 775
787 void LayerTreeHost::ReduceMemoryUsage() { 776 void LayerTreeHost::ReduceMemoryUsage() {
788 if (!root_layer()) 777 if (root_layer())
789 return; 778 LayerTreeHostCommon::CallFunctionForSubtree(ReduceMemoryUsageForLayer,
790 779 root_layer());
791 LayerTreeHostCommon::CallFunctionForSubtree<
792 LayerTreeHostReduceMemoryFunctor, Layer>(root_layer());
793 } 780 }
794 781
795 void LayerTreeHost::SetPrioritiesForSurfaces(size_t surface_memory_bytes) { 782 void LayerTreeHost::SetPrioritiesForSurfaces(size_t surface_memory_bytes) {
796 DCHECK(surface_memory_placeholder_); 783 DCHECK(surface_memory_placeholder_);
797 784
798 // Surfaces have a place holder for their memory since they are managed 785 // Surfaces have a place holder for their memory since they are managed
799 // independantly but should still be tracked and reduce other memory usage. 786 // independantly but should still be tracked and reduce other memory usage.
800 surface_memory_placeholder_->SetTextureManager( 787 surface_memory_placeholder_->SetTextureManager(
801 contents_texture_manager_.get()); 788 contents_texture_manager_.get());
802 surface_memory_placeholder_->set_request_priority( 789 surface_memory_placeholder_->set_request_priority(
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 bool start_ready_animations = true; 1066 bool start_ready_animations = true;
1080 (*iter).second->UpdateState(start_ready_animations, NULL); 1067 (*iter).second->UpdateState(start_ready_animations, NULL);
1081 } 1068 }
1082 } 1069 }
1083 1070
1084 skia::RefPtr<SkPicture> LayerTreeHost::CapturePicture() { 1071 skia::RefPtr<SkPicture> LayerTreeHost::CapturePicture() {
1085 return proxy_->CapturePicture(); 1072 return proxy_->CapturePicture();
1086 } 1073 }
1087 1074
1088 } // namespace cc 1075 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/trees/layer_tree_host_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698