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

Side by Side Diff: cc/trees/layer_tree_host_impl.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 | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_impl.cc » ('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_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 return metadata; 1100 return metadata;
1101 } 1101 }
1102 1102
1103 bool LayerTreeHostImpl::AllowPartialSwap() const { 1103 bool LayerTreeHostImpl::AllowPartialSwap() const {
1104 // We don't track damage on the HUD layer (it interacts with damage tracking 1104 // We don't track damage on the HUD layer (it interacts with damage tracking
1105 // visualizations), so disable partial swaps to make the HUD layer display 1105 // visualizations), so disable partial swaps to make the HUD layer display
1106 // properly. 1106 // properly.
1107 return !debug_state_.ShowHudRects(); 1107 return !debug_state_.ShowHudRects();
1108 } 1108 }
1109 1109
1110 class DidBeginTracingFunctor { 1110 void DidBeginTracing(LayerImpl* layer) {
1111 public: 1111 layer->DidBeginTracing();
1112 void operator()(LayerImpl* layer) { 1112 }
1113 layer->DidBeginTracing();
1114 }
1115 };
1116 1113
1117 void LayerTreeHostImpl::DrawLayers(FrameData* frame, 1114 void LayerTreeHostImpl::DrawLayers(FrameData* frame,
1118 base::TimeTicks frame_begin_time) { 1115 base::TimeTicks frame_begin_time) {
1119 TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers"); 1116 TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers");
1120 DCHECK(CanDraw()); 1117 DCHECK(CanDraw());
1121 1118
1122 if (frame->has_no_damage) 1119 if (frame->has_no_damage)
1123 return; 1120 return;
1124 1121
1125 DCHECK(!frame->render_passes.empty()); 1122 DCHECK(!frame->render_passes.empty());
(...skipping 21 matching lines...) Expand all
1147 1144
1148 if (!settings_.impl_side_painting && debug_state_.continuous_painting) { 1145 if (!settings_.impl_side_painting && debug_state_.continuous_painting) {
1149 const RenderingStats& stats = 1146 const RenderingStats& stats =
1150 rendering_stats_instrumentation_->GetRenderingStats(); 1147 rendering_stats_instrumentation_->GetRenderingStats();
1151 paint_time_counter_->SavePaintTime(stats.total_paint_time); 1148 paint_time_counter_->SavePaintTime(stats.total_paint_time);
1152 } 1149 }
1153 1150
1154 bool is_new_trace; 1151 bool is_new_trace;
1155 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); 1152 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
1156 if (is_new_trace) { 1153 if (is_new_trace) {
1157 if (pending_tree_) 1154 if (pending_tree_) {
1158 LayerTreeHostCommon::CallFunctionForSubtree< 1155 LayerTreeHostCommon::CallFunctionForSubtree(DidBeginTracing,
1159 DidBeginTracingFunctor, LayerImpl>( 1156 pending_tree_->root_layer());
1160 pending_tree_->root_layer()); 1157 }
1161 LayerTreeHostCommon::CallFunctionForSubtree< 1158 LayerTreeHostCommon::CallFunctionForSubtree(DidBeginTracing,
1162 DidBeginTracingFunctor, LayerImpl>( 1159 active_tree_->root_layer());
1163 active_tree_->root_layer());
1164 } 1160 }
1165 1161
1166 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( 1162 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
1167 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", this, 1163 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", this,
1168 TracedValue::FromValue(AsValue().release())); 1164 TracedValue::FromValue(AsValue().release()));
1169 1165
1170 // Because the contents of the HUD depend on everything else in the frame, the 1166 // Because the contents of the HUD depend on everything else in the frame, the
1171 // contents of its texture are updated as the last thing before the frame is 1167 // contents of its texture are updated as the last thing before the frame is
1172 // drawn. 1168 // drawn.
1173 if (active_tree_->hud_layer()) 1169 if (active_tree_->hud_layer())
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
1424 return managed_memory_policy_; 1420 return managed_memory_policy_;
1425 1421
1426 ManagedMemoryPolicy actual = managed_memory_policy_; 1422 ManagedMemoryPolicy actual = managed_memory_policy_;
1427 actual.priority_cutoff_when_not_visible = 1423 actual.priority_cutoff_when_not_visible =
1428 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING; 1424 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING;
1429 actual.priority_cutoff_when_visible = 1425 actual.priority_cutoff_when_visible =
1430 ManagedMemoryPolicy::CUTOFF_ALLOW_REQUIRED_ONLY; 1426 ManagedMemoryPolicy::CUTOFF_ALLOW_REQUIRED_ONLY;
1431 return actual; 1427 return actual;
1432 } 1428 }
1433 1429
1430 static void LostOutputSurface(LayerImpl* layer) {
1431 layer->DidLoseOutputSurface();
1432 }
1433
1434 bool LayerTreeHostImpl::InitializeRenderer( 1434 bool LayerTreeHostImpl::InitializeRenderer(
1435 scoped_ptr<OutputSurface> output_surface) { 1435 scoped_ptr<OutputSurface> output_surface) {
1436 // Since we will create a new resource provider, we cannot continue to use 1436 // Since we will create a new resource provider, we cannot continue to use
1437 // the old resources (i.e. render_surfaces and texture IDs). Clear them 1437 // the old resources (i.e. render_surfaces and texture IDs). Clear them
1438 // before we destroy the old resource provider. 1438 // before we destroy the old resource provider.
1439 if (active_tree_->root_layer()) 1439 if (active_tree_->root_layer())
1440 ClearRenderSurfaces(); 1440 ClearRenderSurfaces();
1441 if (active_tree_->root_layer()) 1441 if (active_tree_->root_layer()) {
1442 SendDidLoseOutputSurfaceRecursive(active_tree_->root_layer()); 1442 LayerTreeHostCommon::CallFunctionForSubtree(LostOutputSurface,
1443 if (pending_tree_ && pending_tree_->root_layer()) 1443 active_tree_->root_layer());
1444 SendDidLoseOutputSurfaceRecursive(pending_tree_->root_layer()); 1444 }
1445 if (recycle_tree_ && recycle_tree_->root_layer()) 1445 if (pending_tree_ && pending_tree_->root_layer()) {
1446 SendDidLoseOutputSurfaceRecursive(recycle_tree_->root_layer()); 1446 LayerTreeHostCommon::CallFunctionForSubtree(LostOutputSurface,
1447 pending_tree_->root_layer());
1448 }
1449 if (recycle_tree_ && recycle_tree_->root_layer()) {
1450 LayerTreeHostCommon::CallFunctionForSubtree(LostOutputSurface,
1451 recycle_tree_->root_layer());
1452 }
1447 if (resource_provider_) 1453 if (resource_provider_)
1448 resource_provider_->DidLoseOutputSurface(); 1454 resource_provider_->DidLoseOutputSurface();
1449 1455
1450 // Note: order is important here. 1456 // Note: order is important here.
1451 renderer_.reset(); 1457 renderer_.reset();
1452 tile_manager_.reset(); 1458 tile_manager_.reset();
1453 resource_provider_.reset(); 1459 resource_provider_.reset();
1454 output_surface_.reset(); 1460 output_surface_.reset();
1455 1461
1456 if (!output_surface->BindToClient(this)) 1462 if (!output_surface->BindToClient(this))
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
2055 if (!events->empty()) { 2061 if (!events->empty()) {
2056 client_->PostAnimationEventsToMainThreadOnImplThread(events.Pass(), 2062 client_->PostAnimationEventsToMainThreadOnImplThread(events.Pass(),
2057 last_animation_time_); 2063 last_animation_time_);
2058 } 2064 }
2059 } 2065 }
2060 2066
2061 base::TimeDelta LayerTreeHostImpl::LowFrequencyAnimationInterval() const { 2067 base::TimeDelta LayerTreeHostImpl::LowFrequencyAnimationInterval() const {
2062 return base::TimeDelta::FromSeconds(1); 2068 return base::TimeDelta::FromSeconds(1);
2063 } 2069 }
2064 2070
2065 void LayerTreeHostImpl::SendDidLoseOutputSurfaceRecursive(LayerImpl* current) {
2066 DCHECK(current);
2067 current->DidLoseOutputSurface();
2068 if (current->mask_layer())
2069 SendDidLoseOutputSurfaceRecursive(current->mask_layer());
2070 if (current->replica_layer())
2071 SendDidLoseOutputSurfaceRecursive(current->replica_layer());
2072 for (size_t i = 0; i < current->children().size(); ++i)
2073 SendDidLoseOutputSurfaceRecursive(current->children()[i]);
2074 }
2075
2076 void LayerTreeHostImpl::ClearRenderSurfaces() { 2071 void LayerTreeHostImpl::ClearRenderSurfaces() {
2077 active_tree_->ClearRenderSurfaces(); 2072 active_tree_->ClearRenderSurfaces();
2078 if (pending_tree_) 2073 if (pending_tree_)
2079 pending_tree_->ClearRenderSurfaces(); 2074 pending_tree_->ClearRenderSurfaces();
2080 } 2075 }
2081 2076
2082 std::string LayerTreeHostImpl::LayerTreeAsText() const { 2077 std::string LayerTreeHostImpl::LayerTreeAsText() const {
2083 std::string str; 2078 std::string str;
2084 if (active_tree_->root_layer()) { 2079 if (active_tree_->root_layer()) {
2085 str = active_tree_->root_layer()->LayerTreeAsText(); 2080 str = active_tree_->root_layer()->LayerTreeAsText();
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
2272 } 2267 }
2273 2268
2274 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { 2269 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) {
2275 if (debug_state_.continuous_painting != debug_state.continuous_painting) 2270 if (debug_state_.continuous_painting != debug_state.continuous_painting)
2276 paint_time_counter_->ClearHistory(); 2271 paint_time_counter_->ClearHistory();
2277 2272
2278 debug_state_ = debug_state; 2273 debug_state_ = debug_state;
2279 } 2274 }
2280 2275
2281 } // namespace cc 2276 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698