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

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

Issue 2194013002: cc: Delete the Renderer base class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dcheck-delegating
Patch Set: delete-renderer-base-class: rebase Created 4 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
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 977
978 if (!active_tree_->has_transparent_background()) { 978 if (!active_tree_->has_transparent_background()) {
979 frame->render_passes.back()->has_transparent_background = false; 979 frame->render_passes.back()->has_transparent_background = false;
980 AppendQuadsToFillScreen( 980 AppendQuadsToFillScreen(
981 active_tree_->RootScrollLayerDeviceViewportBounds(), 981 active_tree_->RootScrollLayerDeviceViewportBounds(),
982 frame->render_passes.back().get(), active_tree_->RootRenderSurface(), 982 frame->render_passes.back().get(), active_tree_->RootRenderSurface(),
983 active_tree_->background_color(), unoccluded_screen_space_region); 983 active_tree_->background_color(), unoccluded_screen_space_region);
984 } 984 }
985 985
986 RemoveRenderPasses(frame); 986 RemoveRenderPasses(frame);
987 renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes);
988 987
989 if (have_copy_request) { 988 if (have_copy_request) {
990 // Any copy requests left in the tree are not going to get serviced, and 989 // Any copy requests left in the tree are not going to get serviced, and
991 // should be aborted. 990 // should be aborted.
992 active_tree()->property_trees()->effect_tree.ClearCopyRequests(); 991 active_tree()->property_trees()->effect_tree.ClearCopyRequests();
993 992
994 // Draw properties depend on copy requests. 993 // Draw properties depend on copy requests.
995 active_tree()->set_needs_update_draw_properties(); 994 active_tree()->set_needs_update_draw_properties();
996 } 995 }
997 996
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1405 1404
1406 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy(); 1405 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy();
1407 1406
1408 cached_managed_memory_policy_ = policy; 1407 cached_managed_memory_policy_ = policy;
1409 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy(); 1408 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy();
1410 1409
1411 if (old_policy == actual_policy) 1410 if (old_policy == actual_policy)
1412 return; 1411 return;
1413 1412
1414 if (!task_runner_provider_->HasImplThread()) { 1413 if (!task_runner_provider_->HasImplThread()) {
1415 // In single-thread mode, this can be called on the main thread by 1414 // REMOVE ME ? DebugScopedSetImplThread impl_thread(task_runner_provider_);
1416 // GLRenderer::OnMemoryAllocationChanged.
1417 DebugScopedSetImplThread impl_thread(task_runner_provider_);
1418 UpdateTileManagerMemoryPolicy(actual_policy); 1415 UpdateTileManagerMemoryPolicy(actual_policy);
1419 } else { 1416 } else {
1420 DCHECK(task_runner_provider_->IsImplThread()); 1417 DCHECK(task_runner_provider_->IsImplThread());
1421 UpdateTileManagerMemoryPolicy(actual_policy); 1418 UpdateTileManagerMemoryPolicy(actual_policy);
1422 } 1419 }
1423 1420
1424 // If there is already enough memory to draw everything imaginable and the 1421 // If there is already enough memory to draw everything imaginable and the
1425 // new memory limit does not change this, then do not re-commit. Don't bother 1422 // new memory limit does not change this, then do not re-commit. Don't bother
1426 // skipping commits if this is not visible (commits don't happen when not 1423 // skipping commits if this is not visible (commits don't happen when not
1427 // visible, there will almost always be a commit when this becomes visible). 1424 // visible, there will almost always be a commit when this becomes visible).
(...skipping 28 matching lines...) Expand all
1456 viewport_rect_for_tile_priority_ = 1453 viewport_rect_for_tile_priority_ =
1457 viewport_rect_for_tile_priority_in_view_space; 1454 viewport_rect_for_tile_priority_in_view_space;
1458 1455
1459 if (tile_priority_params_changed) { 1456 if (tile_priority_params_changed) {
1460 active_tree_->set_needs_update_draw_properties(); 1457 active_tree_->set_needs_update_draw_properties();
1461 if (pending_tree_) 1458 if (pending_tree_)
1462 pending_tree_->set_needs_update_draw_properties(); 1459 pending_tree_->set_needs_update_draw_properties();
1463 1460
1464 // Compositor, not OutputSurface, is responsible for setting damage and 1461 // Compositor, not OutputSurface, is responsible for setting damage and
1465 // triggering redraw for constraint changes. 1462 // triggering redraw for constraint changes.
1466 SetFullRootLayerDamage(); 1463 SetFullViewportDamage();
1467 SetNeedsRedraw(); 1464 SetNeedsRedraw();
1468 } 1465 }
1469 } 1466 }
1470 1467
1471 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { 1468 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
1472 if (damage_rect.IsEmpty()) 1469 if (damage_rect.IsEmpty())
1473 return; 1470 return;
1474 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); 1471 NotifySwapPromiseMonitorsOfSetNeedsRedraw();
1475 client_->SetNeedsRedrawRectOnImplThread(damage_rect); 1472 client_->SetNeedsRedrawRectOnImplThread(damage_rect);
1476 } 1473 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 external_viewport_ = viewport; 1525 external_viewport_ = viewport;
1529 1526
1530 { 1527 {
1531 base::AutoReset<bool> resourceless_software_draw_reset( 1528 base::AutoReset<bool> resourceless_software_draw_reset(
1532 &resourceless_software_draw_, resourceless_software_draw); 1529 &resourceless_software_draw_, resourceless_software_draw);
1533 1530
1534 // For resourceless software draw, always set full damage to ensure they 1531 // For resourceless software draw, always set full damage to ensure they
1535 // always swap. Otherwise, need to set redraw for any changes to draw 1532 // always swap. Otherwise, need to set redraw for any changes to draw
1536 // parameters. 1533 // parameters.
1537 if (transform_changed || viewport_changed || resourceless_software_draw_) { 1534 if (transform_changed || viewport_changed || resourceless_software_draw_) {
1538 SetFullRootLayerDamage(); 1535 SetFullViewportDamage();
1539 SetNeedsRedraw(); 1536 SetNeedsRedraw();
1540 active_tree_->set_needs_update_draw_properties(); 1537 active_tree_->set_needs_update_draw_properties();
1541 } 1538 }
1542 1539
1543 if (resourceless_software_draw) { 1540 if (resourceless_software_draw) {
1544 client_->OnCanDrawStateChanged(CanDraw()); 1541 client_->OnCanDrawStateChanged(CanDraw());
1545 } 1542 }
1546 1543
1547 client_->OnDrawForOutputSurface(resourceless_software_draw_); 1544 client_->OnDrawForOutputSurface(resourceless_software_draw_);
1548 } 1545 }
1549 1546
1550 if (resourceless_software_draw) { 1547 if (resourceless_software_draw) {
1551 active_tree_->set_needs_update_draw_properties(); 1548 active_tree_->set_needs_update_draw_properties();
1552 client_->OnCanDrawStateChanged(CanDraw()); 1549 client_->OnCanDrawStateChanged(CanDraw());
1553 // This draw may have reset all damage, which would lead to subsequent 1550 // This draw may have reset all damage, which would lead to subsequent
1554 // incorrect hardware draw, so explicitly set damage for next hardware 1551 // incorrect hardware draw, so explicitly set damage for next hardware
1555 // draw as well. 1552 // draw as well.
1556 SetFullRootLayerDamage(); 1553 SetFullViewportDamage();
1557 } 1554 }
1558 } 1555 }
1559 1556
1560 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { 1557 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() {
1561 client_->OnCanDrawStateChanged(CanDraw()); 1558 client_->OnCanDrawStateChanged(CanDraw());
1562 } 1559 }
1563 1560
1564 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const { 1561 CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
1565 CompositorFrameMetadata metadata; 1562 CompositorFrameMetadata metadata;
1566 metadata.device_scale_factor = active_tree_->painted_device_scale_factor() * 1563 metadata.device_scale_factor = active_tree_->painted_device_scale_factor() *
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
2105 if (recycle_tree_) 2102 if (recycle_tree_)
2106 recycle_tree_->RecreateResources(); 2103 recycle_tree_->RecreateResources();
2107 } 2104 }
2108 2105
2109 void LayerTreeHostImpl::CreateAndSetRenderer() { 2106 void LayerTreeHostImpl::CreateAndSetRenderer() {
2110 DCHECK(!renderer_); 2107 DCHECK(!renderer_);
2111 DCHECK(output_surface_); 2108 DCHECK(output_surface_);
2112 DCHECK(resource_provider_); 2109 DCHECK(resource_provider_);
2113 2110
2114 DCHECK(output_surface_->capabilities().delegated_rendering); 2111 DCHECK(output_surface_->capabilities().delegated_rendering);
2115 renderer_ = 2112 renderer_ = base::MakeUnique<DelegatingRenderer>(output_surface_,
2116 DelegatingRenderer::Create(this, &settings_.renderer_settings, 2113 resource_provider_.get());
2117 output_surface_, resource_provider_.get());
2118 renderer_->SetVisible(visible_); 2114 renderer_->SetVisible(visible_);
2119 SetFullRootLayerDamage(); 2115 SetFullViewportDamage();
2120 2116
2121 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be 2117 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be
2122 // initialized to get max texture size. Also, after releasing resources, 2118 // initialized to get max texture size. Also, after releasing resources,
2123 // trees need another update to generate new ones. 2119 // trees need another update to generate new ones.
2124 active_tree_->set_needs_update_draw_properties(); 2120 active_tree_->set_needs_update_draw_properties();
2125 if (pending_tree_) 2121 if (pending_tree_)
2126 pending_tree_->set_needs_update_draw_properties(); 2122 pending_tree_->set_needs_update_draw_properties();
2127 client_->UpdateRendererCapabilitiesOnImplThread(); 2123 client_->UpdateRendererCapabilitiesOnImplThread();
2128 } 2124 }
2129 2125
2130 void LayerTreeHostImpl::CreateTileManagerResources() { 2126 void LayerTreeHostImpl::CreateTileManagerResources() {
2131 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, 2127 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_,
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
2357 device_viewport_size.width(), "height", 2353 device_viewport_size.width(), "height",
2358 device_viewport_size.height()); 2354 device_viewport_size.height());
2359 2355
2360 if (pending_tree_) 2356 if (pending_tree_)
2361 active_tree_->SetViewportSizeInvalid(); 2357 active_tree_->SetViewportSizeInvalid();
2362 2358
2363 device_viewport_size_ = device_viewport_size; 2359 device_viewport_size_ = device_viewport_size;
2364 2360
2365 UpdateViewportContainerSizes(); 2361 UpdateViewportContainerSizes();
2366 client_->OnCanDrawStateChanged(CanDraw()); 2362 client_->OnCanDrawStateChanged(CanDraw());
2367 SetFullRootLayerDamage(); 2363 SetFullViewportDamage();
2368 active_tree_->set_needs_update_draw_properties(); 2364 active_tree_->set_needs_update_draw_properties();
2369 } 2365 }
2370 2366
2371 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const { 2367 const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const {
2372 if (viewport_rect_for_tile_priority_.IsEmpty()) 2368 if (viewport_rect_for_tile_priority_.IsEmpty())
2373 return DeviceViewport(); 2369 return DeviceViewport();
2374 2370
2375 return viewport_rect_for_tile_priority_; 2371 return viewport_rect_for_tile_priority_;
2376 } 2372 }
2377 2373
(...skipping 10 matching lines...) Expand all
2388 2384
2389 const gfx::Transform& LayerTreeHostImpl::DrawTransform() const { 2385 const gfx::Transform& LayerTreeHostImpl::DrawTransform() const {
2390 return external_transform_; 2386 return external_transform_;
2391 } 2387 }
2392 2388
2393 void LayerTreeHostImpl::DidChangeTopControlsPosition() { 2389 void LayerTreeHostImpl::DidChangeTopControlsPosition() {
2394 UpdateViewportContainerSizes(); 2390 UpdateViewportContainerSizes();
2395 SetNeedsRedraw(); 2391 SetNeedsRedraw();
2396 SetNeedsOneBeginImplFrame(); 2392 SetNeedsOneBeginImplFrame();
2397 active_tree_->set_needs_update_draw_properties(); 2393 active_tree_->set_needs_update_draw_properties();
2398 SetFullRootLayerDamage(); 2394 SetFullViewportDamage();
2399 } 2395 }
2400 2396
2401 float LayerTreeHostImpl::TopControlsHeight() const { 2397 float LayerTreeHostImpl::TopControlsHeight() const {
2402 return active_tree_->top_controls_height(); 2398 return active_tree_->top_controls_height();
2403 } 2399 }
2404 2400
2405 void LayerTreeHostImpl::SetCurrentTopControlsShownRatio(float ratio) { 2401 void LayerTreeHostImpl::SetCurrentTopControlsShownRatio(float ratio) {
2406 if (active_tree_->SetCurrentTopControlsShownRatio(ratio)) 2402 if (active_tree_->SetCurrentTopControlsShownRatio(ratio))
2407 DidChangeTopControlsPosition(); 2403 DidChangeTopControlsPosition();
2408 } 2404 }
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after
3167 void LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset( 3163 void LayerTreeHostImpl::SetSynchronousInputHandlerRootScrollOffset(
3168 const gfx::ScrollOffset& root_offset) { 3164 const gfx::ScrollOffset& root_offset) {
3169 bool changed = active_tree_->DistributeRootScrollOffset(root_offset); 3165 bool changed = active_tree_->DistributeRootScrollOffset(root_offset);
3170 if (!changed) 3166 if (!changed)
3171 return; 3167 return;
3172 3168
3173 client_->SetNeedsCommitOnImplThread(); 3169 client_->SetNeedsCommitOnImplThread();
3174 // After applying the synchronous input handler's scroll offset, tell it what 3170 // After applying the synchronous input handler's scroll offset, tell it what
3175 // we ended up with. 3171 // we ended up with.
3176 UpdateRootLayerStateForSynchronousInputHandler(); 3172 UpdateRootLayerStateForSynchronousInputHandler();
3177 SetFullRootLayerDamage(); 3173 SetFullViewportDamage();
3178 SetNeedsRedraw(); 3174 SetNeedsRedraw();
3179 } 3175 }
3180 3176
3181 void LayerTreeHostImpl::ClearCurrentlyScrollingLayer() { 3177 void LayerTreeHostImpl::ClearCurrentlyScrollingLayer() {
3182 active_tree_->ClearCurrentlyScrollingLayer(); 3178 active_tree_->ClearCurrentlyScrollingLayer();
3183 did_lock_scrolling_layer_ = false; 3179 did_lock_scrolling_layer_ = false;
3184 scroll_affects_scroll_handler_ = false; 3180 scroll_affects_scroll_handler_ = false;
3185 accumulated_root_overscroll_ = gfx::Vector2dF(); 3181 accumulated_root_overscroll_ = gfx::Vector2dF();
3186 } 3182 }
3187 3183
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
3353 active_tree_->page_scale_factor()->PullDeltaForMainThread(); 3349 active_tree_->page_scale_factor()->PullDeltaForMainThread();
3354 scroll_info->top_controls_delta = 3350 scroll_info->top_controls_delta =
3355 active_tree()->top_controls_shown_ratio()->PullDeltaForMainThread(); 3351 active_tree()->top_controls_shown_ratio()->PullDeltaForMainThread();
3356 scroll_info->elastic_overscroll_delta = 3352 scroll_info->elastic_overscroll_delta =
3357 active_tree_->elastic_overscroll()->PullDeltaForMainThread(); 3353 active_tree_->elastic_overscroll()->PullDeltaForMainThread();
3358 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); 3354 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_);
3359 3355
3360 return scroll_info; 3356 return scroll_info;
3361 } 3357 }
3362 3358
3363 void LayerTreeHostImpl::SetFullRootLayerDamage() { 3359 void LayerTreeHostImpl::SetFullViewportDamage() {
3364 SetViewportDamage(gfx::Rect(DrawViewportSize())); 3360 SetViewportDamage(gfx::Rect(DrawViewportSize()));
3365 } 3361 }
3366 3362
3367 void LayerTreeHostImpl::ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta) { 3363 void LayerTreeHostImpl::ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta) {
3368 DCHECK(InnerViewportScrollLayer()); 3364 DCHECK(InnerViewportScrollLayer());
3369 LayerImpl* scroll_layer = InnerViewportScrollLayer(); 3365 LayerImpl* scroll_layer = InnerViewportScrollLayer();
3370 3366
3371 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); 3367 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta);
3372 if (!unused_delta.IsZero() && OuterViewportScrollLayer()) 3368 if (!unused_delta.IsZero() && OuterViewportScrollLayer())
3373 OuterViewportScrollLayer()->ScrollBy(unused_delta); 3369 OuterViewportScrollLayer()->ScrollBy(unused_delta);
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
3642 state->EndDictionary(); 3638 state->EndDictionary();
3643 } 3639 }
3644 3640
3645 void LayerTreeHostImpl::SetDebugState( 3641 void LayerTreeHostImpl::SetDebugState(
3646 const LayerTreeDebugState& new_debug_state) { 3642 const LayerTreeDebugState& new_debug_state) {
3647 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) 3643 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state))
3648 return; 3644 return;
3649 3645
3650 debug_state_ = new_debug_state; 3646 debug_state_ = new_debug_state;
3651 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); 3647 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
3652 SetFullRootLayerDamage(); 3648 SetFullViewportDamage();
3653 } 3649 }
3654 3650
3655 void LayerTreeHostImpl::CreateUIResource(UIResourceId uid, 3651 void LayerTreeHostImpl::CreateUIResource(UIResourceId uid,
3656 const UIResourceBitmap& bitmap) { 3652 const UIResourceBitmap& bitmap) {
3657 DCHECK_GT(uid, 0); 3653 DCHECK_GT(uid, 0);
3658 3654
3659 // Allow for multiple creation requests with the same UIResourceId. The 3655 // Allow for multiple creation requests with the same UIResourceId. The
3660 // previous resource is simply deleted. 3656 // previous resource is simply deleted.
3661 ResourceId id = ResourceIdForUIResource(uid); 3657 ResourceId id = ResourceIdForUIResource(uid);
3662 if (id) 3658 if (id)
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
4023 return task_runner_provider_->HasImplThread(); 4019 return task_runner_provider_->HasImplThread();
4024 } 4020 }
4025 4021
4026 bool LayerTreeHostImpl::CommitToActiveTree() const { 4022 bool LayerTreeHostImpl::CommitToActiveTree() const {
4027 // In single threaded mode we skip the pending tree and commit directly to the 4023 // In single threaded mode we skip the pending tree and commit directly to the
4028 // active tree. 4024 // active tree.
4029 return !task_runner_provider_->HasImplThread(); 4025 return !task_runner_provider_->HasImplThread();
4030 } 4026 }
4031 4027
4032 } // namespace cc 4028 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698