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

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

Issue 23961003: cc: Remove most methods from RendererClient. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rendererclient: rebase Created 7 years, 3 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_host_impl_unittest.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/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 new_state.memory_limit_policy = 1105 new_state.memory_limit_policy =
1106 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( 1106 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy(
1107 visible_ ? 1107 visible_ ?
1108 policy.priority_cutoff_when_visible : 1108 policy.priority_cutoff_when_visible :
1109 policy.priority_cutoff_when_not_visible); 1109 policy.priority_cutoff_when_not_visible);
1110 new_state.num_resources_limit = policy.num_resources_limit; 1110 new_state.num_resources_limit = policy.num_resources_limit;
1111 tile_manager_->SetGlobalState(new_state); 1111 tile_manager_->SetGlobalState(new_state);
1112 manage_tiles_needed_ = true; 1112 manage_tiles_needed_ = true;
1113 } 1113 }
1114 1114
1115 bool LayerTreeHostImpl::HasImplThread() const {
1116 return proxy_->HasImplThread();
1117 }
1118
1119 void LayerTreeHostImpl::DidInitializeVisibleTile() { 1115 void LayerTreeHostImpl::DidInitializeVisibleTile() {
1120 // TODO(reveman): Determine tiles that changed and only damage 1116 // TODO(reveman): Determine tiles that changed and only damage
1121 // what's necessary. 1117 // what's necessary.
1122 SetFullRootLayerDamage(); 1118 SetFullRootLayerDamage();
1123 if (client_) 1119 if (client_)
1124 client_->DidInitializeVisibleTileOnImplThread(); 1120 client_->DidInitializeVisibleTileOnImplThread();
1125 } 1121 }
1126 1122
1127 void LayerTreeHostImpl::NotifyReadyToActivate() { 1123 void LayerTreeHostImpl::NotifyReadyToActivate() {
1128 client_->NotifyReadyToActivate(); 1124 client_->NotifyReadyToActivate();
1129 } 1125 }
1130 1126
1131 bool LayerTreeHostImpl::ShouldClearRootRenderPass() const {
1132 return settings_.should_clear_root_render_pass;
1133 }
1134
1135 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { 1127 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
1136 SetManagedMemoryPolicy(policy, zero_budget_); 1128 SetManagedMemoryPolicy(policy, zero_budget_);
1137 } 1129 }
1138 1130
1139 void LayerTreeHostImpl::SetDiscardBackBufferWhenNotVisible(bool discard) { 1131 void LayerTreeHostImpl::SetDiscardBackBufferWhenNotVisible(bool discard) {
1140 DCHECK(renderer_); 1132 DCHECK(renderer_);
1141 renderer_->SetDiscardBackBufferWhenNotVisible(discard); 1133 renderer_->SetDiscardBackBufferWhenNotVisible(discard);
1142 } 1134 }
1143 1135
1144 void LayerTreeHostImpl::SetTreeActivationCallback( 1136 void LayerTreeHostImpl::SetTreeActivationCallback(
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 const gfx::Transform& transform, 1185 const gfx::Transform& transform,
1194 gfx::Rect viewport, 1186 gfx::Rect viewport,
1195 gfx::Rect clip, 1187 gfx::Rect clip,
1196 bool valid_for_tile_management) { 1188 bool valid_for_tile_management) {
1197 external_transform_ = transform; 1189 external_transform_ = transform;
1198 external_viewport_ = viewport; 1190 external_viewport_ = viewport;
1199 external_clip_ = clip; 1191 external_clip_ = clip;
1200 device_viewport_valid_for_tile_management_ = valid_for_tile_management; 1192 device_viewport_valid_for_tile_management_ = valid_for_tile_management;
1201 } 1193 }
1202 1194
1203 void LayerTreeHostImpl::SetExternalStencilTest(bool enabled) {
1204 external_stencil_test_enabled_ = enabled;
1205 }
1206
1207 void LayerTreeHostImpl::SetNeedsRedrawRect(gfx::Rect damage_rect) { 1195 void LayerTreeHostImpl::SetNeedsRedrawRect(gfx::Rect damage_rect) {
1208 client_->SetNeedsRedrawRectOnImplThread(damage_rect); 1196 client_->SetNeedsRedrawRectOnImplThread(damage_rect);
1209 } 1197 }
1210 1198
1211 void LayerTreeHostImpl::BeginFrame(const BeginFrameArgs& args) { 1199 void LayerTreeHostImpl::BeginFrame(const BeginFrameArgs& args) {
1212 client_->BeginFrameOnImplThread(args); 1200 client_->BeginFrameOnImplThread(args);
1213 } 1201 }
1214 1202
1215 void LayerTreeHostImpl::OnSwapBuffersComplete( 1203 void LayerTreeHostImpl::OnSwapBuffersComplete(
1216 const CompositorFrameAck* ack) { 1204 const CompositorFrameAck* ack) {
(...skipping 27 matching lines...) Expand all
1244 } 1232 }
1245 1233
1246 if (!RootScrollLayer()) 1234 if (!RootScrollLayer())
1247 return metadata; 1235 return metadata;
1248 1236
1249 metadata.root_scroll_offset = RootScrollLayer()->TotalScrollOffset(); 1237 metadata.root_scroll_offset = RootScrollLayer()->TotalScrollOffset();
1250 1238
1251 return metadata; 1239 return metadata;
1252 } 1240 }
1253 1241
1254 bool LayerTreeHostImpl::AllowPartialSwap() const {
1255 // We don't track damage on the HUD layer (it interacts with damage tracking
1256 // visualizations), so disable partial swaps to make the HUD layer display
1257 // properly.
1258 return !debug_state_.ShowHudRects();
1259 }
1260
1261 bool LayerTreeHostImpl::ExternalStencilTestEnabled() const {
1262 return external_stencil_test_enabled_;
1263 }
1264
1265 static void LayerTreeHostImplDidBeginTracingCallback(LayerImpl* layer) { 1242 static void LayerTreeHostImplDidBeginTracingCallback(LayerImpl* layer) {
1266 layer->DidBeginTracing(); 1243 layer->DidBeginTracing();
1267 } 1244 }
1268 1245
1269 void LayerTreeHostImpl::DrawLayers(FrameData* frame, 1246 void LayerTreeHostImpl::DrawLayers(FrameData* frame,
1270 base::TimeTicks frame_begin_time) { 1247 base::TimeTicks frame_begin_time) {
1271 TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers"); 1248 TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers");
1272 DCHECK(CanDraw()); 1249 DCHECK(CanDraw());
1273 1250
1274 if (frame->has_no_damage) { 1251 if (frame->has_no_damage) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), "cc::LayerTreeHostImpl", 1305 TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), "cc::LayerTreeHostImpl",
1329 this, TracedValue::FromValue(AsValueWithFrame(frame).release())); 1306 this, TracedValue::FromValue(AsValueWithFrame(frame).release()));
1330 1307
1331 // Because the contents of the HUD depend on everything else in the frame, the 1308 // Because the contents of the HUD depend on everything else in the frame, the
1332 // contents of its texture are updated as the last thing before the frame is 1309 // contents of its texture are updated as the last thing before the frame is
1333 // drawn. 1310 // drawn.
1334 if (active_tree_->hud_layer()) 1311 if (active_tree_->hud_layer())
1335 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); 1312 active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get());
1336 1313
1337 if (output_surface_->ForcedDrawToSoftwareDevice()) { 1314 if (output_surface_->ForcedDrawToSoftwareDevice()) {
1315 bool allow_partial_swap = false;
1316
1338 scoped_ptr<SoftwareRenderer> temp_software_renderer = 1317 scoped_ptr<SoftwareRenderer> temp_software_renderer =
1339 SoftwareRenderer::Create(this, output_surface_.get(), NULL); 1318 SoftwareRenderer::Create(this, &settings_, output_surface_.get(), NULL);
1340 temp_software_renderer->DrawFrame(&frame->render_passes, NULL); 1319 temp_software_renderer->DrawFrame(
1320 &frame->render_passes, NULL, device_scale_factor_, allow_partial_swap);
1341 } else { 1321 } else {
1322 // We don't track damage on the HUD layer (it interacts with damage tracking
1323 // visualizations), so disable partial swaps to make the HUD layer display
1324 // properly.
1325 bool allow_partial_swap = !debug_state_.ShowHudRects();
1326
1342 renderer_->DrawFrame(&frame->render_passes, 1327 renderer_->DrawFrame(&frame->render_passes,
1343 offscreen_context_provider_.get()); 1328 offscreen_context_provider_.get(),
1329 device_scale_factor_,
1330 allow_partial_swap);
1344 } 1331 }
1345 // The render passes should be consumed by the renderer. 1332 // The render passes should be consumed by the renderer.
1346 DCHECK(frame->render_passes.empty()); 1333 DCHECK(frame->render_passes.empty());
1347 frame->render_passes_by_id.clear(); 1334 frame->render_passes_by_id.clear();
1348 1335
1349 // The next frame should start by assuming nothing has changed, and changes 1336 // The next frame should start by assuming nothing has changed, and changes
1350 // are noted as they occur. 1337 // are noted as they occur.
1338 // TODO(boliu): If we did a temporary software renderer frame, propogate the
1339 // damage forward to the next frame.
1351 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) { 1340 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) {
1352 (*frame->render_surface_layer_list)[i]->render_surface()->damage_tracker()-> 1341 (*frame->render_surface_layer_list)[i]->render_surface()->damage_tracker()->
1353 DidDrawDamagedArea(); 1342 DidDrawDamagedArea();
1354 } 1343 }
1355 active_tree_->root_layer()->ResetAllChangeTrackingForSubtree(); 1344 active_tree_->root_layer()->ResetAllChangeTrackingForSubtree();
1356 1345
1357 rendering_stats_instrumentation_->IssueTraceEventForImplThreadStats(); 1346 rendering_stats_instrumentation_->IssueTraceEventForImplThreadStats();
1358 rendering_stats_instrumentation_->AccumulateAndClearImplThreadStats(); 1347 rendering_stats_instrumentation_->AccumulateAndClearImplThreadStats();
1359 } 1348 }
1360 1349
(...skipping 26 matching lines...) Expand all
1387 renderer_->SwapBuffers(); 1376 renderer_->SwapBuffers();
1388 active_tree_->ClearLatencyInfo(); 1377 active_tree_->ClearLatencyInfo();
1389 return true; 1378 return true;
1390 } 1379 }
1391 1380
1392 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) { 1381 void LayerTreeHostImpl::SetNeedsBeginFrame(bool enable) {
1393 if (output_surface_) 1382 if (output_surface_)
1394 output_surface_->SetNeedsBeginFrame(enable); 1383 output_surface_->SetNeedsBeginFrame(enable);
1395 } 1384 }
1396 1385
1397 float LayerTreeHostImpl::DeviceScaleFactor() const {
1398 return device_scale_factor_;
1399 }
1400
1401 gfx::SizeF LayerTreeHostImpl::UnscaledScrollableViewportSize() const { 1386 gfx::SizeF LayerTreeHostImpl::UnscaledScrollableViewportSize() const {
1402 // The container layer bounds should be used if non-overlay scrollbars may 1387 // The container layer bounds should be used if non-overlay scrollbars may
1403 // exist since it adjusts for them. 1388 // exist since it adjusts for them.
1404 LayerImpl* container_layer = active_tree_->RootContainerLayer(); 1389 LayerImpl* container_layer = active_tree_->RootContainerLayer();
1405 if (!Settings().solid_color_scrollbars && container_layer) { 1390 if (!settings_.solid_color_scrollbars && container_layer) {
1406 DCHECK(!top_controls_manager_); 1391 DCHECK(!top_controls_manager_);
1407 DCHECK_EQ(0, overdraw_bottom_height_); 1392 DCHECK_EQ(0, overdraw_bottom_height_);
1408 return container_layer->bounds(); 1393 return container_layer->bounds();
1409 } 1394 }
1410 1395
1411 gfx::SizeF dip_size = 1396 gfx::SizeF dip_size =
1412 gfx::ScaleSize(device_viewport_size_, 1.f / device_scale_factor()); 1397 gfx::ScaleSize(device_viewport_size_, 1.f / device_scale_factor());
1413 1398
1414 float top_offset = 1399 float top_offset =
1415 top_controls_manager_ ? top_controls_manager_->content_top_offset() : 0.f; 1400 top_controls_manager_ ? top_controls_manager_->content_top_offset() : 0.f;
1416 return gfx::SizeF(dip_size.width(), 1401 return gfx::SizeF(dip_size.width(),
1417 dip_size.height() - top_offset - overdraw_bottom_height_); 1402 dip_size.height() - top_offset - overdraw_bottom_height_);
1418 } 1403 }
1419 1404
1420 const LayerTreeSettings& LayerTreeHostImpl::Settings() const {
1421 return settings();
1422 }
1423
1424 void LayerTreeHostImpl::DidLoseOutputSurface() { 1405 void LayerTreeHostImpl::DidLoseOutputSurface() {
1425 // TODO(jamesr): The renderer_ check is needed to make some of the 1406 // TODO(jamesr): The renderer_ check is needed to make some of the
1426 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or 1407 // LayerTreeHostContextTest tests pass, but shouldn't be necessary (or
1427 // important) in production. We should adjust the test to not need this. 1408 // important) in production. We should adjust the test to not need this.
1428 if (renderer_) 1409 if (renderer_)
1429 client_->DidLoseOutputSurfaceOnImplThread(); 1410 client_->DidLoseOutputSurfaceOnImplThread();
1430 } 1411 }
1431 1412
1432 void LayerTreeHostImpl::Readback(void* pixels, 1413 void LayerTreeHostImpl::Readback(void* pixels,
1433 gfx::Rect rect_in_device_viewport) { 1414 gfx::Rect rect_in_device_viewport) {
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 1581
1601 DeleteAllUIResources(); 1582 DeleteAllUIResources();
1602 } 1583 }
1603 1584
1604 void LayerTreeHostImpl::CreateAndSetRenderer( 1585 void LayerTreeHostImpl::CreateAndSetRenderer(
1605 OutputSurface* output_surface, 1586 OutputSurface* output_surface,
1606 ResourceProvider* resource_provider, 1587 ResourceProvider* resource_provider,
1607 bool skip_gl_renderer) { 1588 bool skip_gl_renderer) {
1608 DCHECK(!renderer_); 1589 DCHECK(!renderer_);
1609 if (output_surface->capabilities().delegated_rendering) { 1590 if (output_surface->capabilities().delegated_rendering) {
1610 renderer_ = 1591 renderer_ = DelegatingRenderer::Create(
1611 DelegatingRenderer::Create(this, output_surface, resource_provider); 1592 this, &settings_, output_surface, resource_provider);
1612 } else if (output_surface->context_provider() && !skip_gl_renderer) { 1593 } else if (output_surface->context_provider() && !skip_gl_renderer) {
1613 renderer_ = GLRenderer::Create(this, 1594 renderer_ = GLRenderer::Create(this,
1595 &settings_,
1614 output_surface, 1596 output_surface,
1615 resource_provider, 1597 resource_provider,
1616 settings_.highp_threshold_min, 1598 settings_.highp_threshold_min,
1617 settings_.force_direct_layer_drawing); 1599 settings_.force_direct_layer_drawing);
1618 } else if (output_surface->software_device()) { 1600 } else if (output_surface->software_device()) {
1619 renderer_ = 1601 renderer_ = SoftwareRenderer::Create(
1620 SoftwareRenderer::Create(this, output_surface, resource_provider); 1602 this, &settings_, output_surface, resource_provider);
1621 } 1603 }
1622 1604
1623 if (renderer_) { 1605 if (renderer_) {
1624 renderer_->SetVisible(visible_); 1606 renderer_->SetVisible(visible_);
1625 SetFullRootLayerDamage(); 1607 SetFullRootLayerDamage();
1626 } 1608 }
1627 } 1609 }
1628 1610
1629 void LayerTreeHostImpl::CreateAndSetTileManager( 1611 void LayerTreeHostImpl::CreateAndSetTileManager(
1630 ResourceProvider* resource_provider, 1612 ResourceProvider* resource_provider,
(...skipping 1018 matching lines...) Expand 10 before | Expand all | Expand 10 after
2649 2631
2650 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( 2632 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource(
2651 UIResourceId uid) const { 2633 UIResourceId uid) const {
2652 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); 2634 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid);
2653 if (iter != ui_resource_map_.end()) 2635 if (iter != ui_resource_map_.end())
2654 return iter->second; 2636 return iter->second;
2655 return 0; 2637 return 0;
2656 } 2638 }
2657 2639
2658 } // namespace cc 2640 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698