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

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

Issue 2337913003: Fork cc::OutputSurface into cc::CompositorFrameSink. (Closed)
Patch Set: cfsfork: android-vulkan Created 4 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
« 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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 TaskRunnerProvider* task_runner_provider, 190 TaskRunnerProvider* task_runner_provider,
191 RenderingStatsInstrumentation* rendering_stats_instrumentation, 191 RenderingStatsInstrumentation* rendering_stats_instrumentation,
192 SharedBitmapManager* shared_bitmap_manager, 192 SharedBitmapManager* shared_bitmap_manager,
193 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 193 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
194 TaskGraphRunner* task_graph_runner, 194 TaskGraphRunner* task_graph_runner,
195 std::unique_ptr<AnimationHost> animation_host, 195 std::unique_ptr<AnimationHost> animation_host,
196 int id) 196 int id)
197 : client_(client), 197 : client_(client),
198 task_runner_provider_(task_runner_provider), 198 task_runner_provider_(task_runner_provider),
199 current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE), 199 current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE),
200 output_surface_(nullptr), 200 compositor_frame_sink_(nullptr),
201 need_update_gpu_rasterization_status_(false), 201 need_update_gpu_rasterization_status_(false),
202 content_is_suitable_for_gpu_rasterization_(true), 202 content_is_suitable_for_gpu_rasterization_(true),
203 has_gpu_rasterization_trigger_(false), 203 has_gpu_rasterization_trigger_(false),
204 use_gpu_rasterization_(false), 204 use_gpu_rasterization_(false),
205 use_msaa_(false), 205 use_msaa_(false),
206 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE), 206 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE),
207 input_handler_client_(NULL), 207 input_handler_client_(NULL),
208 did_lock_scrolling_layer_(false), 208 did_lock_scrolling_layer_(false),
209 wheel_scrolling_(false), 209 wheel_scrolling_(false),
210 scroll_affects_scroll_handler_(false), 210 scroll_affects_scroll_handler_(false),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 settings.top_controls_hide_threshold); 265 settings.top_controls_hide_threshold);
266 } 266 }
267 267
268 LayerTreeHostImpl::~LayerTreeHostImpl() { 268 LayerTreeHostImpl::~LayerTreeHostImpl() {
269 DCHECK(task_runner_provider_->IsImplThread()); 269 DCHECK(task_runner_provider_->IsImplThread());
270 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 270 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
271 TRACE_EVENT_OBJECT_DELETED_WITH_ID(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 271 TRACE_EVENT_OBJECT_DELETED_WITH_ID(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
272 "cc::LayerTreeHostImpl", id_); 272 "cc::LayerTreeHostImpl", id_);
273 273
274 // It is released before shutdown. 274 // It is released before shutdown.
275 DCHECK(!output_surface_); 275 DCHECK(!compositor_frame_sink_);
276 276
277 DCHECK(!resource_provider_); 277 DCHECK(!resource_provider_);
278 DCHECK(!resource_pool_); 278 DCHECK(!resource_pool_);
279 DCHECK(!tile_task_manager_); 279 DCHECK(!tile_task_manager_);
280 DCHECK(!single_thread_synchronous_task_graph_runner_); 280 DCHECK(!single_thread_synchronous_task_graph_runner_);
281 DCHECK(!image_decode_controller_); 281 DCHECK(!image_decode_controller_);
282 282
283 if (input_handler_client_) { 283 if (input_handler_client_) {
284 input_handler_client_->WillShutdown(); 284 input_handler_client_->WillShutdown();
285 input_handler_client_ = NULL; 285 input_handler_client_ = NULL;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 322
323 void LayerTreeHostImpl::BeginCommit() { 323 void LayerTreeHostImpl::BeginCommit() {
324 TRACE_EVENT0("cc", "LayerTreeHostImpl::BeginCommit"); 324 TRACE_EVENT0("cc", "LayerTreeHostImpl::BeginCommit");
325 325
326 // Ensure all textures are returned so partial texture updates can happen 326 // Ensure all textures are returned so partial texture updates can happen
327 // during the commit. 327 // during the commit.
328 // TODO(ericrk): We should not need to ForceReclaimResources when using 328 // TODO(ericrk): We should not need to ForceReclaimResources when using
329 // Impl-side-painting as it doesn't upload during commits. However, 329 // Impl-side-painting as it doesn't upload during commits. However,
330 // Display::Draw currently relies on resource being reclaimed to block drawing 330 // Display::Draw currently relies on resource being reclaimed to block drawing
331 // between BeginCommit / Swap. See crbug.com/489515. 331 // between BeginCommit / Swap. See crbug.com/489515.
332 if (output_surface_) 332 if (compositor_frame_sink_)
333 output_surface_->ForceReclaimResources(); 333 compositor_frame_sink_->ForceReclaimResources();
334 334
335 if (!CommitToActiveTree()) 335 if (!CommitToActiveTree())
336 CreatePendingTree(); 336 CreatePendingTree();
337 } 337 }
338 338
339 void LayerTreeHostImpl::CommitComplete() { 339 void LayerTreeHostImpl::CommitComplete() {
340 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); 340 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete");
341 341
342 if (CommitToActiveTree()) { 342 if (CommitToActiveTree()) {
343 // We have to activate animations here or "IsActive()" is true on the layers 343 // We have to activate animations here or "IsActive()" is true on the layers
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 383
384 micro_benchmark_controller_.DidCompleteCommit(); 384 micro_benchmark_controller_.DidCompleteCommit();
385 } 385 }
386 386
387 bool LayerTreeHostImpl::CanDraw() const { 387 bool LayerTreeHostImpl::CanDraw() const {
388 // Note: If you are changing this function or any other function that might 388 // Note: If you are changing this function or any other function that might
389 // affect the result of CanDraw, make sure to call 389 // affect the result of CanDraw, make sure to call
390 // client_->OnCanDrawStateChanged in the proper places and update the 390 // client_->OnCanDrawStateChanged in the proper places and update the
391 // NotifyIfCanDrawChanged test. 391 // NotifyIfCanDrawChanged test.
392 392
393 if (!output_surface_) { 393 if (!compositor_frame_sink_) {
394 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no output surface", 394 TRACE_EVENT_INSTANT0("cc",
395 "LayerTreeHostImpl::CanDraw no CompositorFrameSink",
395 TRACE_EVENT_SCOPE_THREAD); 396 TRACE_EVENT_SCOPE_THREAD);
396 return false; 397 return false;
397 } 398 }
398 399
399 // TODO(boliu): Make draws without layers work and move this below 400 // TODO(boliu): Make draws without layers work and move this below
400 // |resourceless_software_draw_| check. Tracked in crbug.com/264967. 401 // |resourceless_software_draw_| check. Tracked in crbug.com/264967.
401 if (active_tree_->LayerListIsEmpty()) { 402 if (active_tree_->LayerListIsEmpty()) {
402 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no root layer", 403 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no root layer",
403 TRACE_EVENT_SCOPE_THREAD); 404 TRACE_EVENT_SCOPE_THREAD);
404 return false; 405 return false;
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 } 690 }
690 691
691 void LayerTreeHostImpl::FrameData::AppendRenderPass( 692 void LayerTreeHostImpl::FrameData::AppendRenderPass(
692 std::unique_ptr<RenderPass> render_pass) { 693 std::unique_ptr<RenderPass> render_pass) {
693 render_passes.push_back(std::move(render_pass)); 694 render_passes.push_back(std::move(render_pass));
694 } 695 }
695 696
696 DrawMode LayerTreeHostImpl::GetDrawMode() const { 697 DrawMode LayerTreeHostImpl::GetDrawMode() const {
697 if (resourceless_software_draw_) { 698 if (resourceless_software_draw_) {
698 return DRAW_MODE_RESOURCELESS_SOFTWARE; 699 return DRAW_MODE_RESOURCELESS_SOFTWARE;
699 } else if (output_surface_->context_provider()) { 700 } else if (compositor_frame_sink_->context_provider()) {
700 return DRAW_MODE_HARDWARE; 701 return DRAW_MODE_HARDWARE;
701 } else { 702 } else {
702 return DRAW_MODE_SOFTWARE; 703 return DRAW_MODE_SOFTWARE;
703 } 704 }
704 } 705 }
705 706
706 static void AppendQuadsForRenderSurfaceLayer( 707 static void AppendQuadsForRenderSurfaceLayer(
707 RenderPass* target_render_pass, 708 RenderPass* target_render_pass,
708 LayerImpl* layer, 709 LayerImpl* layer,
709 const RenderPass* contributing_render_pass, 710 const RenderPass* contributing_render_pass,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 // frame at all. 801 // frame at all.
801 RenderSurfaceImpl* root_surface = active_tree_->RootRenderSurface(); 802 RenderSurfaceImpl* root_surface = active_tree_->RootRenderSurface();
802 bool root_surface_has_no_visible_damage = 803 bool root_surface_has_no_visible_damage =
803 !root_surface->damage_tracker()->current_damage_rect().Intersects( 804 !root_surface->damage_tracker()->current_damage_rect().Intersects(
804 root_surface->content_rect()); 805 root_surface->content_rect());
805 bool root_surface_has_contributing_layers = 806 bool root_surface_has_contributing_layers =
806 !root_surface->layer_list().empty(); 807 !root_surface->layer_list().empty();
807 bool hud_wants_to_draw_ = active_tree_->hud_layer() && 808 bool hud_wants_to_draw_ = active_tree_->hud_layer() &&
808 active_tree_->hud_layer()->IsAnimatingHUDContents(); 809 active_tree_->hud_layer()->IsAnimatingHUDContents();
809 bool resources_must_be_resent = 810 bool resources_must_be_resent =
810 output_surface_->capabilities().can_force_reclaim_resources; 811 compositor_frame_sink_->capabilities().can_force_reclaim_resources;
811 if (root_surface_has_contributing_layers && 812 if (root_surface_has_contributing_layers &&
812 root_surface_has_no_visible_damage && 813 root_surface_has_no_visible_damage &&
813 !active_tree_->property_trees()->effect_tree.HasCopyRequests() && 814 !active_tree_->property_trees()->effect_tree.HasCopyRequests() &&
814 !resources_must_be_resent && !hud_wants_to_draw_) { 815 !resources_must_be_resent && !hud_wants_to_draw_) {
815 TRACE_EVENT0("cc", 816 TRACE_EVENT0("cc",
816 "LayerTreeHostImpl::CalculateRenderPasses::EmptyDamageRect"); 817 "LayerTreeHostImpl::CalculateRenderPasses::EmptyDamageRect");
817 frame->has_no_damage = true; 818 frame->has_no_damage = true;
818 DCHECK(!resourceless_software_draw_); 819 DCHECK(!resourceless_software_draw_);
819 return DRAW_SUCCESS; 820 return DRAW_SUCCESS;
820 } 821 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 1035
1035 TRACE_EVENT_END2("cc", "LayerTreeHostImpl::CalculateRenderPasses", 1036 TRACE_EVENT_END2("cc", "LayerTreeHostImpl::CalculateRenderPasses",
1036 "draw_result", draw_result, "missing tiles", 1037 "draw_result", draw_result, "missing tiles",
1037 num_missing_tiles); 1038 num_missing_tiles);
1038 1039
1039 // Draw has to be successful to not drop the copy request layer. 1040 // Draw has to be successful to not drop the copy request layer.
1040 // When we have a copy request for a layer, we need to draw even if there 1041 // When we have a copy request for a layer, we need to draw even if there
1041 // would be animating checkerboards, because failing under those conditions 1042 // would be animating checkerboards, because failing under those conditions
1042 // triggers a new main frame, which may cause the copy request layer to be 1043 // triggers a new main frame, which may cause the copy request layer to be
1043 // destroyed. 1044 // destroyed.
1044 // TODO(weiliangc): Test copy request w/ output surface recreation. Would 1045 // TODO(weiliangc): Test copy request w/ CompositorFrameSink recreation. Would
1045 // trigger this DCHECK. 1046 // trigger this DCHECK.
1046 DCHECK(!have_copy_request || draw_result == DRAW_SUCCESS); 1047 DCHECK(!have_copy_request || draw_result == DRAW_SUCCESS);
1047 1048
1048 // TODO(crbug.com/564832): This workaround to prevent creating unnecessarily 1049 // TODO(crbug.com/564832): This workaround to prevent creating unnecessarily
1049 // persistent render passes. When a copy request is made, it may force a 1050 // persistent render passes. When a copy request is made, it may force a
1050 // separate render pass for the layer, which will persist until a new commit 1051 // separate render pass for the layer, which will persist until a new commit
1051 // removes it. Force a commit after copy requests, to remove extra render 1052 // removes it. Force a commit after copy requests, to remove extra render
1052 // passes. 1053 // passes.
1053 if (have_copy_request) 1054 if (have_copy_request)
1054 client_->SetNeedsCommitOnImplThread(); 1055 client_->SetNeedsCommitOnImplThread();
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
1451 viewport_rect_for_tile_priority_in_view_space; 1452 viewport_rect_for_tile_priority_in_view_space;
1452 1453
1453 viewport_rect_for_tile_priority_ = 1454 viewport_rect_for_tile_priority_ =
1454 viewport_rect_for_tile_priority_in_view_space; 1455 viewport_rect_for_tile_priority_in_view_space;
1455 1456
1456 if (tile_priority_params_changed) { 1457 if (tile_priority_params_changed) {
1457 active_tree_->set_needs_update_draw_properties(); 1458 active_tree_->set_needs_update_draw_properties();
1458 if (pending_tree_) 1459 if (pending_tree_)
1459 pending_tree_->set_needs_update_draw_properties(); 1460 pending_tree_->set_needs_update_draw_properties();
1460 1461
1461 // Compositor, not OutputSurface, is responsible for setting damage and 1462 // Compositor, not CompositorFrameSink, is responsible for setting damage
1462 // triggering redraw for constraint changes. 1463 // and triggering redraw for constraint changes.
1463 SetFullViewportDamage(); 1464 SetFullViewportDamage();
1464 SetNeedsRedraw(); 1465 SetNeedsRedraw();
1465 } 1466 }
1466 } 1467 }
1467 1468
1468 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { 1469 void LayerTreeHostImpl::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
1469 if (damage_rect.IsEmpty()) 1470 if (damage_rect.IsEmpty())
1470 return; 1471 return;
1471 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); 1472 NotifySwapPromiseMonitorsOfSetNeedsRedraw();
1472 client_->SetNeedsRedrawRectOnImplThread(damage_rect); 1473 client_->SetNeedsRedrawRectOnImplThread(damage_rect);
(...skipping 29 matching lines...) Expand all
1502 static_cast<int>(resource_pool_->memory_usage_bytes() / kMegabyte)); 1503 static_cast<int>(resource_pool_->memory_usage_bytes() / kMegabyte));
1503 } 1504 }
1504 1505
1505 resource_pool_->CheckBusyResources(); 1506 resource_pool_->CheckBusyResources();
1506 resource_pool_->ReduceResourceUsage(); 1507 resource_pool_->ReduceResourceUsage();
1507 } 1508 }
1508 1509
1509 // If we're not visible, we likely released resources, so we want to 1510 // If we're not visible, we likely released resources, so we want to
1510 // aggressively flush here to make sure those DeleteTextures make it to the 1511 // aggressively flush here to make sure those DeleteTextures make it to the
1511 // GPU process to free up the memory. 1512 // GPU process to free up the memory.
1512 if (output_surface_->context_provider() && !visible_) { 1513 if (compositor_frame_sink_->context_provider() && !visible_) {
1513 output_surface_->context_provider()->ContextGL()->ShallowFlushCHROMIUM(); 1514 compositor_frame_sink_->context_provider()
1515 ->ContextGL()
1516 ->ShallowFlushCHROMIUM();
1514 } 1517 }
1515 } 1518 }
1516 1519
1517 void LayerTreeHostImpl::OnDraw(const gfx::Transform& transform, 1520 void LayerTreeHostImpl::OnDraw(const gfx::Transform& transform,
1518 const gfx::Rect& viewport, 1521 const gfx::Rect& viewport,
1519 bool resourceless_software_draw) { 1522 bool resourceless_software_draw) {
1520 DCHECK(!resourceless_software_draw_); 1523 DCHECK(!resourceless_software_draw_);
1521 const bool transform_changed = external_transform_ != transform; 1524 const bool transform_changed = external_transform_ != transform;
1522 const bool viewport_changed = external_viewport_ != viewport; 1525 const bool viewport_changed = external_viewport_ != viewport;
1523 1526
(...skipping 10 matching lines...) Expand all
1534 if (transform_changed || viewport_changed || resourceless_software_draw_) { 1537 if (transform_changed || viewport_changed || resourceless_software_draw_) {
1535 SetFullViewportDamage(); 1538 SetFullViewportDamage();
1536 SetNeedsRedraw(); 1539 SetNeedsRedraw();
1537 active_tree_->set_needs_update_draw_properties(); 1540 active_tree_->set_needs_update_draw_properties();
1538 } 1541 }
1539 1542
1540 if (resourceless_software_draw) { 1543 if (resourceless_software_draw) {
1541 client_->OnCanDrawStateChanged(CanDraw()); 1544 client_->OnCanDrawStateChanged(CanDraw());
1542 } 1545 }
1543 1546
1544 client_->OnDrawForOutputSurface(resourceless_software_draw_); 1547 client_->OnDrawForCompositorFrameSink(resourceless_software_draw_);
1545 } 1548 }
1546 1549
1547 if (resourceless_software_draw) { 1550 if (resourceless_software_draw) {
1548 active_tree_->set_needs_update_draw_properties(); 1551 active_tree_->set_needs_update_draw_properties();
1549 client_->OnCanDrawStateChanged(CanDraw()); 1552 client_->OnCanDrawStateChanged(CanDraw());
1550 // This draw may have reset all damage, which would lead to subsequent 1553 // This draw may have reset all damage, which would lead to subsequent
1551 // incorrect hardware draw, so explicitly set damage for next hardware 1554 // incorrect hardware draw, so explicitly set damage for next hardware
1552 // draw as well. 1555 // draw as well.
1553 SetFullViewportDamage(); 1556 SetFullViewportDamage();
1554 } 1557 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 1623
1621 if (frame->has_no_damage) { 1624 if (frame->has_no_damage) {
1622 DCHECK(!resourceless_software_draw_); 1625 DCHECK(!resourceless_software_draw_);
1623 1626
1624 TRACE_EVENT_INSTANT0("cc", "EarlyOut_NoDamage", TRACE_EVENT_SCOPE_THREAD); 1627 TRACE_EVENT_INSTANT0("cc", "EarlyOut_NoDamage", TRACE_EVENT_SCOPE_THREAD);
1625 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); 1628 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS);
1626 return false; 1629 return false;
1627 } 1630 }
1628 1631
1629 fps_counter_->SaveTimeStamp(CurrentBeginFrameArgs().frame_time, 1632 fps_counter_->SaveTimeStamp(CurrentBeginFrameArgs().frame_time,
1630 !output_surface_->context_provider()); 1633 !compositor_frame_sink_->context_provider());
1631 rendering_stats_instrumentation_->IncrementFrameCount(1); 1634 rendering_stats_instrumentation_->IncrementFrameCount(1);
1632 1635
1633 memory_history_->SaveEntry(tile_manager_.memory_stats_from_last_assign()); 1636 memory_history_->SaveEntry(tile_manager_.memory_stats_from_last_assign());
1634 1637
1635 if (debug_state_.ShowHudRects()) { 1638 if (debug_state_.ShowHudRects()) {
1636 debug_rect_history_->SaveDebugRectsForCurrentFrame( 1639 debug_rect_history_->SaveDebugRectsForCurrentFrame(
1637 active_tree(), active_tree_->hud_layer(), 1640 active_tree(), active_tree_->hud_layer(),
1638 *frame->render_surface_layer_list, debug_state_); 1641 *frame->render_surface_layer_list, debug_state_);
1639 } 1642 }
1640 1643
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 } 1696 }
1694 } 1697 }
1695 1698
1696 auto data = base::MakeUnique<DelegatedFrameData>(); 1699 auto data = base::MakeUnique<DelegatedFrameData>();
1697 resource_provider_->PrepareSendToParent(resources, &data->resource_list); 1700 resource_provider_->PrepareSendToParent(resources, &data->resource_list);
1698 data->render_pass_list = std::move(frame->render_passes); 1701 data->render_pass_list = std::move(frame->render_passes);
1699 1702
1700 CompositorFrame compositor_frame; 1703 CompositorFrame compositor_frame;
1701 compositor_frame.metadata = std::move(metadata); 1704 compositor_frame.metadata = std::move(metadata);
1702 compositor_frame.delegated_frame_data = std::move(data); 1705 compositor_frame.delegated_frame_data = std::move(data);
1703 output_surface_->SwapBuffers(std::move(compositor_frame)); 1706 compositor_frame_sink_->SwapBuffers(std::move(compositor_frame));
1704 1707
1705 // The next frame should start by assuming nothing has changed, and changes 1708 // The next frame should start by assuming nothing has changed, and changes
1706 // are noted as they occur. 1709 // are noted as they occur.
1707 // TODO(boliu): If we did a temporary software renderer frame, propogate the 1710 // TODO(boliu): If we did a temporary software renderer frame, propogate the
1708 // damage forward to the next frame. 1711 // damage forward to the next frame.
1709 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) { 1712 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) {
1710 auto* surface = (*frame->render_surface_layer_list)[i]->render_surface(); 1713 auto* surface = (*frame->render_surface_layer_list)[i]->render_surface();
1711 surface->damage_tracker()->DidDrawDamagedArea(); 1714 surface->damage_tracker()->DidDrawDamagedArea();
1712 } 1715 }
1713 active_tree_->ResetAllChangeTracking(); 1716 active_tree_->ResetAllChangeTracking();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 } 1751 }
1749 1752
1750 void LayerTreeHostImpl::SetContentIsSuitableForGpuRasterization(bool flag) { 1753 void LayerTreeHostImpl::SetContentIsSuitableForGpuRasterization(bool flag) {
1751 if (content_is_suitable_for_gpu_rasterization_ != flag) { 1754 if (content_is_suitable_for_gpu_rasterization_ != flag) {
1752 content_is_suitable_for_gpu_rasterization_ = flag; 1755 content_is_suitable_for_gpu_rasterization_ = flag;
1753 need_update_gpu_rasterization_status_ = true; 1756 need_update_gpu_rasterization_status_ = true;
1754 } 1757 }
1755 } 1758 }
1756 1759
1757 bool LayerTreeHostImpl::CanUseGpuRasterization() { 1760 bool LayerTreeHostImpl::CanUseGpuRasterization() {
1758 if (!(output_surface_ && output_surface_->context_provider() && 1761 if (!(compositor_frame_sink_ && compositor_frame_sink_->context_provider() &&
1759 output_surface_->worker_context_provider())) 1762 compositor_frame_sink_->worker_context_provider()))
1760 return false; 1763 return false;
1761 1764
1762 ContextProvider* context_provider = 1765 ContextProvider* context_provider =
1763 output_surface_->worker_context_provider(); 1766 compositor_frame_sink_->worker_context_provider();
1764 ContextProvider::ScopedContextLock scoped_context(context_provider); 1767 ContextProvider::ScopedContextLock scoped_context(context_provider);
1765 if (!context_provider->GrContext()) 1768 if (!context_provider->GrContext())
1766 return false; 1769 return false;
1767 1770
1768 return true; 1771 return true;
1769 } 1772 }
1770 1773
1771 bool LayerTreeHostImpl::UpdateGpuRasterizationStatus() { 1774 bool LayerTreeHostImpl::UpdateGpuRasterizationStatus() {
1772 // TODO(danakj): Can we avoid having this run when there's no output surface? 1775 // TODO(danakj): Can we avoid having this run when there's no
1776 // CompositorFrameSink?
1773 // For now just early out and leave things unchanged, we'll come back here 1777 // For now just early out and leave things unchanged, we'll come back here
1774 // when we get an output surface. 1778 // when we get an CompositorFrameSink.
1775 if (!output_surface_) 1779 if (!compositor_frame_sink_)
1776 return false; 1780 return false;
1777 1781
1778 int requested_msaa_samples = RequestedMSAASampleCount(); 1782 int requested_msaa_samples = RequestedMSAASampleCount();
1779 int max_msaa_samples = 0; 1783 int max_msaa_samples = 0;
1780 ContextProvider* compositor_context_provider = 1784 ContextProvider* compositor_context_provider =
1781 output_surface_->context_provider(); 1785 compositor_frame_sink_->context_provider();
1782 if (compositor_context_provider) { 1786 if (compositor_context_provider) {
1783 const auto& caps = compositor_context_provider->ContextCapabilities(); 1787 const auto& caps = compositor_context_provider->ContextCapabilities();
1784 if (!caps.msaa_is_slow) 1788 if (!caps.msaa_is_slow)
1785 max_msaa_samples = caps.max_samples; 1789 max_msaa_samples = caps.max_samples;
1786 } 1790 }
1787 1791
1788 bool use_gpu = false; 1792 bool use_gpu = false;
1789 bool use_msaa = false; 1793 bool use_msaa = false;
1790 bool using_msaa_for_complex_content = 1794 bool using_msaa_for_complex_content =
1791 requested_msaa_samples > 0 && max_msaa_samples >= requested_msaa_samples; 1795 requested_msaa_samples > 0 && max_msaa_samples >= requested_msaa_samples;
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1917 anchor.ResetViewportToAnchoredPosition(); 1921 anchor.ResetViewportToAnchoredPosition();
1918 } 1922 }
1919 } 1923 }
1920 1924
1921 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() { 1925 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() {
1922 // Only valid for the single-threaded non-scheduled/synchronous case 1926 // Only valid for the single-threaded non-scheduled/synchronous case
1923 // using the zero copy raster worker pool. 1927 // using the zero copy raster worker pool.
1924 single_thread_synchronous_task_graph_runner_->RunUntilIdle(); 1928 single_thread_synchronous_task_graph_runner_->RunUntilIdle();
1925 } 1929 }
1926 1930
1927 void LayerTreeHostImpl::DidLoseOutputSurface() { 1931 void LayerTreeHostImpl::DidLoseCompositorFrameSink() {
1928 if (resource_provider_) 1932 if (resource_provider_)
1929 resource_provider_->DidLoseOutputSurface(); 1933 resource_provider_->DidLoseContextProvider();
1930 client_->DidLoseOutputSurfaceOnImplThread(); 1934 client_->DidLoseCompositorFrameSinkOnImplThread();
1931 } 1935 }
1932 1936
1933 bool LayerTreeHostImpl::HaveRootScrollLayer() const { 1937 bool LayerTreeHostImpl::HaveRootScrollLayer() const {
1934 return !!InnerViewportScrollLayer(); 1938 return !!InnerViewportScrollLayer();
1935 } 1939 }
1936 1940
1937 LayerImpl* LayerTreeHostImpl::InnerViewportScrollLayer() const { 1941 LayerImpl* LayerTreeHostImpl::InnerViewportScrollLayer() const {
1938 return active_tree_->InnerViewportScrollLayer(); 1942 return active_tree_->InnerViewportScrollLayer();
1939 } 1943 }
1940 1944
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 if (recycle_tree_) 2126 if (recycle_tree_)
2123 recycle_tree_->RecreateResources(); 2127 recycle_tree_->RecreateResources();
2124 } 2128 }
2125 2129
2126 void LayerTreeHostImpl::CreateTileManagerResources() { 2130 void LayerTreeHostImpl::CreateTileManagerResources() {
2127 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, 2131 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_,
2128 &resource_pool_); 2132 &resource_pool_);
2129 2133
2130 if (use_gpu_rasterization_) { 2134 if (use_gpu_rasterization_) {
2131 image_decode_controller_ = base::MakeUnique<GpuImageDecodeController>( 2135 image_decode_controller_ = base::MakeUnique<GpuImageDecodeController>(
2132 output_surface_->worker_context_provider(), 2136 compositor_frame_sink_->worker_context_provider(),
2133 settings_.renderer_settings.preferred_tile_format, 2137 settings_.renderer_settings.preferred_tile_format,
2134 settings_.gpu_decoded_image_budget_bytes); 2138 settings_.gpu_decoded_image_budget_bytes);
2135 } else { 2139 } else {
2136 image_decode_controller_ = base::MakeUnique<SoftwareImageDecodeController>( 2140 image_decode_controller_ = base::MakeUnique<SoftwareImageDecodeController>(
2137 settings_.renderer_settings.preferred_tile_format, 2141 settings_.renderer_settings.preferred_tile_format,
2138 settings_.software_decoded_image_budget_bytes); 2142 settings_.software_decoded_image_budget_bytes);
2139 } 2143 }
2140 2144
2141 // Pass the single-threaded synchronous task graph runner to the worker pool 2145 // Pass the single-threaded synchronous task graph runner to the worker pool
2142 // if we're in synchronous single-threaded mode. 2146 // if we're in synchronous single-threaded mode.
(...skipping 19 matching lines...) Expand all
2162 2166
2163 void LayerTreeHostImpl::CreateResourceAndRasterBufferProvider( 2167 void LayerTreeHostImpl::CreateResourceAndRasterBufferProvider(
2164 std::unique_ptr<RasterBufferProvider>* raster_buffer_provider, 2168 std::unique_ptr<RasterBufferProvider>* raster_buffer_provider,
2165 std::unique_ptr<ResourcePool>* resource_pool) { 2169 std::unique_ptr<ResourcePool>* resource_pool) {
2166 DCHECK(GetTaskRunner()); 2170 DCHECK(GetTaskRunner());
2167 // TODO(vmpstr): Make this a DCHECK (or remove) when crbug.com/419086 is 2171 // TODO(vmpstr): Make this a DCHECK (or remove) when crbug.com/419086 is
2168 // resolved. 2172 // resolved.
2169 CHECK(resource_provider_); 2173 CHECK(resource_provider_);
2170 2174
2171 ContextProvider* compositor_context_provider = 2175 ContextProvider* compositor_context_provider =
2172 output_surface_->context_provider(); 2176 compositor_frame_sink_->context_provider();
2173 if (!compositor_context_provider) { 2177 if (!compositor_context_provider) {
2174 *resource_pool = 2178 *resource_pool =
2175 ResourcePool::Create(resource_provider_.get(), GetTaskRunner(), 2179 ResourcePool::Create(resource_provider_.get(), GetTaskRunner(),
2176 ResourcePool::kDefaultExpirationDelay); 2180 ResourcePool::kDefaultExpirationDelay);
2177 2181
2178 *raster_buffer_provider = 2182 *raster_buffer_provider =
2179 BitmapRasterBufferProvider::Create(resource_provider_.get()); 2183 BitmapRasterBufferProvider::Create(resource_provider_.get());
2180 return; 2184 return;
2181 } 2185 }
2182 2186
2183 ContextProvider* worker_context_provider = 2187 ContextProvider* worker_context_provider =
2184 output_surface_->worker_context_provider(); 2188 compositor_frame_sink_->worker_context_provider();
2185 if (use_gpu_rasterization_) { 2189 if (use_gpu_rasterization_) {
2186 DCHECK(worker_context_provider); 2190 DCHECK(worker_context_provider);
2187 2191
2188 *resource_pool = 2192 *resource_pool =
2189 ResourcePool::Create(resource_provider_.get(), GetTaskRunner(), 2193 ResourcePool::Create(resource_provider_.get(), GetTaskRunner(),
2190 ResourcePool::kDefaultExpirationDelay); 2194 ResourcePool::kDefaultExpirationDelay);
2191 2195
2192 int msaa_sample_count = use_msaa_ ? RequestedMSAASampleCount() : 0; 2196 int msaa_sample_count = use_msaa_ ? RequestedMSAASampleCount() : 0;
2193 2197
2194 *raster_buffer_provider = base::MakeUnique<GpuRasterBufferProvider>( 2198 *raster_buffer_provider = base::MakeUnique<GpuRasterBufferProvider>(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2249 2253
2250 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() { 2254 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() {
2251 ClearUIResources(); 2255 ClearUIResources();
2252 tile_manager_.FinishTasksAndCleanUp(); 2256 tile_manager_.FinishTasksAndCleanUp();
2253 resource_pool_ = nullptr; 2257 resource_pool_ = nullptr;
2254 tile_task_manager_ = nullptr; 2258 tile_task_manager_ = nullptr;
2255 single_thread_synchronous_task_graph_runner_ = nullptr; 2259 single_thread_synchronous_task_graph_runner_ = nullptr;
2256 image_decode_controller_ = nullptr; 2260 image_decode_controller_ = nullptr;
2257 } 2261 }
2258 2262
2259 void LayerTreeHostImpl::ReleaseOutputSurface() { 2263 void LayerTreeHostImpl::ReleaseCompositorFrameSink() {
2260 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface"); 2264 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseCompositorFrameSink");
2261 2265
2262 if (!output_surface_) 2266 if (!compositor_frame_sink_)
2263 return; 2267 return;
2264 2268
2265 // Since we will create a new resource provider, we cannot continue to use 2269 // Since we will create a new resource provider, we cannot continue to use
2266 // the old resources (i.e. render_surfaces and texture IDs). Clear them 2270 // the old resources (i.e. render_surfaces and texture IDs). Clear them
2267 // before we destroy the old resource provider. 2271 // before we destroy the old resource provider.
2268 ReleaseTreeResources(); 2272 ReleaseTreeResources();
2269 2273
2270 // Note: ui resource cleanup uses the |resource_provider_|. 2274 // Note: ui resource cleanup uses the |resource_provider_|.
2271 CleanUpTileManagerAndUIResources(); 2275 CleanUpTileManagerAndUIResources();
2272 resource_provider_ = nullptr; 2276 resource_provider_ = nullptr;
2273 2277
2274 // Release any context visibility before we destroy the OutputSurface. 2278 // Release any context visibility before we destroy the CompositorFrameSink.
2275 if (visible_) 2279 if (visible_)
2276 SetCompositorContextVisibility(false); 2280 SetCompositorContextVisibility(false);
2277 // Worker context visibility is based on both LTHI visibility as well as 2281 // Worker context visibility is based on both LTHI visibility as well as
2278 // memory policy, so we directly check |worker_context_visibility_| here, 2282 // memory policy, so we directly check |worker_context_visibility_| here,
2279 // rather than just relying on |visibility_|. 2283 // rather than just relying on |visibility_|.
2280 if (worker_context_visibility_) 2284 if (worker_context_visibility_)
2281 SetWorkerContextVisibility(false); 2285 SetWorkerContextVisibility(false);
2282 2286
2283 // Detach from the old output surface and reset |output_surface_| pointer 2287 // Detach from the old CompositorFrameSink and reset |compositor_frame_sink_|
2284 // as this surface is going to be destroyed independent of if binding the 2288 // pointer as this surface is going to be destroyed independent of if binding
2285 // new output surface succeeds or not. 2289 // the new CompositorFrameSink succeeds or not.
2286 output_surface_->DetachFromClient(); 2290 compositor_frame_sink_->DetachFromClient();
2287 output_surface_ = nullptr; 2291 compositor_frame_sink_ = nullptr;
2288 2292
2289 // We don't know if the next OutputSurface will support GPU rasterization. 2293 // We don't know if the next CompositorFrameSink will support GPU
2290 // Make sure to clear the flag so that we force a re-computation. 2294 // rasterization. Make sure to clear the flag so that we force a
2295 // re-computation.
2291 use_gpu_rasterization_ = false; 2296 use_gpu_rasterization_ = false;
2292 } 2297 }
2293 2298
2294 bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) { 2299 bool LayerTreeHostImpl::InitializeRenderer(
2295 DCHECK(output_surface->capabilities().delegated_rendering); 2300 CompositorFrameSink* compositor_frame_sink) {
2301 DCHECK(compositor_frame_sink->capabilities().delegated_rendering);
2296 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); 2302 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
2297 2303
2298 ReleaseOutputSurface(); 2304 ReleaseCompositorFrameSink();
2299 if (!output_surface->BindToClient(this)) { 2305 if (!compositor_frame_sink->BindToClient(this)) {
2300 // Avoid recreating tree resources because we might not have enough 2306 // Avoid recreating tree resources because we might not have enough
2301 // information to do this yet (eg. we don't have a TileManager at this 2307 // information to do this yet (eg. we don't have a TileManager at this
2302 // point). 2308 // point).
2303 return false; 2309 return false;
2304 } 2310 }
2305 2311
2306 // When using software compositing, change to the limits specified for it. 2312 // When using software compositing, change to the limits specified for it.
2307 // Since this is a one way trip, we don't need to worry about going back to 2313 // Since this is a one way trip, we don't need to worry about going back to
2308 // GPU compositing. 2314 // GPU compositing.
2309 if (!output_surface->context_provider()) 2315 if (!compositor_frame_sink->context_provider())
2310 SetMemoryPolicy(settings_.software_memory_policy); 2316 SetMemoryPolicy(settings_.software_memory_policy);
2311 2317
2312 output_surface_ = output_surface; 2318 compositor_frame_sink_ = compositor_frame_sink;
2313 resource_provider_ = base::MakeUnique<ResourceProvider>( 2319 resource_provider_ = base::MakeUnique<ResourceProvider>(
2314 output_surface_->context_provider(), shared_bitmap_manager_, 2320 compositor_frame_sink_->context_provider(), shared_bitmap_manager_,
2315 gpu_memory_buffer_manager_, 2321 gpu_memory_buffer_manager_,
2316 task_runner_provider_->blocking_main_thread_task_runner(), 2322 task_runner_provider_->blocking_main_thread_task_runner(),
2317 settings_.renderer_settings.highp_threshold_min, 2323 settings_.renderer_settings.highp_threshold_min,
2318 settings_.renderer_settings.texture_id_allocation_chunk_size, 2324 settings_.renderer_settings.texture_id_allocation_chunk_size,
2319 output_surface_->capabilities().delegated_sync_points_required, 2325 compositor_frame_sink_->capabilities().delegated_sync_points_required,
2320 settings_.renderer_settings.use_gpu_memory_buffer_resources, false, 2326 settings_.renderer_settings.use_gpu_memory_buffer_resources, false,
2321 settings_.renderer_settings.buffer_to_texture_target_map); 2327 settings_.renderer_settings.buffer_to_texture_target_map);
2322 2328
2323 // Make sure the main context visibility is restored. Worker context 2329 // Make sure the main context visibility is restored. Worker context
2324 // visibility will be set via the memory policy update in 2330 // visibility will be set via the memory policy update in
2325 // CreateTileManagerResources below. 2331 // CreateTileManagerResources below.
2326 if (visible_) 2332 if (visible_)
2327 SetCompositorContextVisibility(true); 2333 SetCompositorContextVisibility(true);
2328 2334
2329 // Since the new context may be capable of MSAA, update status here. We don't 2335 // Since the new context may be capable of MSAA, update status here. We don't
2330 // need to check the return value since we are recreating all resources 2336 // need to check the return value since we are recreating all resources
2331 // already. 2337 // already.
2332 UpdateGpuRasterizationStatus(); 2338 UpdateGpuRasterizationStatus();
2333 2339
2334 // See note in LayerTreeImpl::UpdateDrawProperties, new OutputSurface means a 2340 // See note in LayerTreeImpl::UpdateDrawProperties, new CompositorFrameSink
2335 // new max texture size which affects draw properties. Also, if the draw 2341 // means a new max texture size which affects draw properties. Also, if the
2336 // properties were up to date, layers still lost resources and we need to 2342 // draw properties were up to date, layers still lost resources and we need to
2337 // UpdateDrawProperties() after calling RecreateTreeResources(). 2343 // UpdateDrawProperties() after calling RecreateTreeResources().
2338 active_tree_->set_needs_update_draw_properties(); 2344 active_tree_->set_needs_update_draw_properties();
2339 if (pending_tree_) 2345 if (pending_tree_)
2340 pending_tree_->set_needs_update_draw_properties(); 2346 pending_tree_->set_needs_update_draw_properties();
2341 2347
2342 CreateTileManagerResources(); 2348 CreateTileManagerResources();
2343 RecreateTreeResources(); 2349 RecreateTreeResources();
2344 2350
2345 // TODO(brianderson): Don't use a hard-coded parent draw time. 2351 // TODO(brianderson): Don't use a hard-coded parent draw time.
2346 base::TimeDelta parent_draw_time = 2352 base::TimeDelta parent_draw_time =
2347 (!settings_.use_external_begin_frame_source && 2353 (!settings_.use_external_begin_frame_source &&
2348 output_surface_->capabilities().adjust_deadline_for_parent) 2354 compositor_frame_sink_->capabilities().adjust_deadline_for_parent)
2349 ? BeginFrameArgs::DefaultEstimatedParentDrawTime() 2355 ? BeginFrameArgs::DefaultEstimatedParentDrawTime()
2350 : base::TimeDelta(); 2356 : base::TimeDelta();
2351 client_->SetEstimatedParentDrawTime(parent_draw_time); 2357 client_->SetEstimatedParentDrawTime(parent_draw_time);
2352 2358
2353 DCHECK_EQ(1, output_surface_->capabilities().max_frames_pending); 2359 DCHECK_EQ(1, compositor_frame_sink_->capabilities().max_frames_pending);
2354 client_->OnCanDrawStateChanged(CanDraw()); 2360 client_->OnCanDrawStateChanged(CanDraw());
2355 2361
2356 SetFullViewportDamage(); 2362 SetFullViewportDamage();
2357 // There will not be anything to draw here, so set high res 2363 // There will not be anything to draw here, so set high res
2358 // to avoid checkerboards, typically when we are recovering 2364 // to avoid checkerboards, typically when we are recovering
2359 // from lost context. 2365 // from lost context.
2360 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. 2366 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw.
2361 SetRequiresHighResToDraw(); 2367 SetRequiresHighResToDraw();
2362 2368
2363 return true; 2369 return true;
(...skipping 1788 matching lines...) Expand 10 before | Expand all | Expand 10 after
4152 return task_runner_provider_->HasImplThread(); 4158 return task_runner_provider_->HasImplThread();
4153 } 4159 }
4154 4160
4155 bool LayerTreeHostImpl::CommitToActiveTree() const { 4161 bool LayerTreeHostImpl::CommitToActiveTree() const {
4156 // In single threaded mode we skip the pending tree and commit directly to the 4162 // In single threaded mode we skip the pending tree and commit directly to the
4157 // active tree. 4163 // active tree.
4158 return !task_runner_provider_->HasImplThread(); 4164 return !task_runner_provider_->HasImplThread();
4159 } 4165 }
4160 4166
4161 void LayerTreeHostImpl::SetCompositorContextVisibility(bool is_visible) { 4167 void LayerTreeHostImpl::SetCompositorContextVisibility(bool is_visible) {
4162 if (!output_surface_) 4168 if (!compositor_frame_sink_)
4163 return; 4169 return;
4164 4170
4165 auto* compositor_context = output_surface_->context_provider(); 4171 auto* compositor_context = compositor_frame_sink_->context_provider();
4166 if (!compositor_context) 4172 if (!compositor_context)
4167 return; 4173 return;
4168 4174
4169 DCHECK_NE(is_visible, !!compositor_context_visibility_); 4175 DCHECK_NE(is_visible, !!compositor_context_visibility_);
4170 4176
4171 if (is_visible) { 4177 if (is_visible) {
4172 compositor_context_visibility_ = 4178 compositor_context_visibility_ =
4173 compositor_context->CacheController()->ClientBecameVisible(); 4179 compositor_context->CacheController()->ClientBecameVisible();
4174 } else { 4180 } else {
4175 compositor_context->CacheController()->ClientBecameNotVisible( 4181 compositor_context->CacheController()->ClientBecameNotVisible(
4176 std::move(compositor_context_visibility_)); 4182 std::move(compositor_context_visibility_));
4177 } 4183 }
4178 } 4184 }
4179 4185
4180 void LayerTreeHostImpl::SetWorkerContextVisibility(bool is_visible) { 4186 void LayerTreeHostImpl::SetWorkerContextVisibility(bool is_visible) {
4181 if (!output_surface_) 4187 if (!compositor_frame_sink_)
4182 return; 4188 return;
4183 4189
4184 auto* worker_context = output_surface_->worker_context_provider(); 4190 auto* worker_context = compositor_frame_sink_->worker_context_provider();
4185 if (!worker_context) 4191 if (!worker_context)
4186 return; 4192 return;
4187 4193
4188 // TODO(ericrk): This check is here because worker context visibility is a 4194 // TODO(ericrk): This check is here because worker context visibility is a
4189 // bit less controlled, being settable both by memory policy changes as well 4195 // bit less controlled, being settable both by memory policy changes as well
4190 // as direct visibility changes. We should simplify this. crbug.com/642154 4196 // as direct visibility changes. We should simplify this. crbug.com/642154
4191 if (is_visible == !!worker_context_visibility_) 4197 if (is_visible == !!worker_context_visibility_)
4192 return; 4198 return;
4193 4199
4194 ContextProvider::ScopedContextLock hold(worker_context); 4200 ContextProvider::ScopedContextLock hold(worker_context);
4195 if (is_visible) { 4201 if (is_visible) {
4196 worker_context_visibility_ = 4202 worker_context_visibility_ =
4197 worker_context->CacheController()->ClientBecameVisible(); 4203 worker_context->CacheController()->ClientBecameVisible();
4198 } else { 4204 } else {
4199 worker_context->CacheController()->ClientBecameNotVisible( 4205 worker_context->CacheController()->ClientBecameNotVisible(
4200 std::move(worker_context_visibility_)); 4206 std::move(worker_context_visibility_));
4201 } 4207 }
4202 } 4208 }
4203 4209
4204 } // namespace cc 4210 } // 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