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

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

Issue 2323583002: cc: Remove DelegatingRenderer. (Closed)
Patch Set: 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_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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "cc/input/top_controls_manager.h" 43 #include "cc/input/top_controls_manager.h"
44 #include "cc/layers/append_quads_data.h" 44 #include "cc/layers/append_quads_data.h"
45 #include "cc/layers/heads_up_display_layer_impl.h" 45 #include "cc/layers/heads_up_display_layer_impl.h"
46 #include "cc/layers/layer_impl.h" 46 #include "cc/layers/layer_impl.h"
47 #include "cc/layers/layer_iterator.h" 47 #include "cc/layers/layer_iterator.h"
48 #include "cc/layers/painted_scrollbar_layer_impl.h" 48 #include "cc/layers/painted_scrollbar_layer_impl.h"
49 #include "cc/layers/render_surface_impl.h" 49 #include "cc/layers/render_surface_impl.h"
50 #include "cc/layers/scrollbar_layer_impl_base.h" 50 #include "cc/layers/scrollbar_layer_impl_base.h"
51 #include "cc/layers/surface_layer_impl.h" 51 #include "cc/layers/surface_layer_impl.h"
52 #include "cc/layers/viewport.h" 52 #include "cc/layers/viewport.h"
53 #include "cc/output/compositor_frame.h"
53 #include "cc/output/compositor_frame_metadata.h" 54 #include "cc/output/compositor_frame_metadata.h"
54 #include "cc/output/copy_output_request.h" 55 #include "cc/output/copy_output_request.h"
55 #include "cc/output/delegating_renderer.h"
56 #include "cc/output/texture_mailbox_deleter.h" 56 #include "cc/output/texture_mailbox_deleter.h"
57 #include "cc/quads/render_pass_draw_quad.h" 57 #include "cc/quads/render_pass_draw_quad.h"
58 #include "cc/quads/shared_quad_state.h" 58 #include "cc/quads/shared_quad_state.h"
59 #include "cc/quads/solid_color_draw_quad.h" 59 #include "cc/quads/solid_color_draw_quad.h"
60 #include "cc/quads/texture_draw_quad.h" 60 #include "cc/quads/texture_draw_quad.h"
61 #include "cc/raster/bitmap_raster_buffer_provider.h" 61 #include "cc/raster/bitmap_raster_buffer_provider.h"
62 #include "cc/raster/gpu_raster_buffer_provider.h" 62 #include "cc/raster/gpu_raster_buffer_provider.h"
63 #include "cc/raster/one_copy_raster_buffer_provider.h" 63 #include "cc/raster/one_copy_raster_buffer_provider.h"
64 #include "cc/raster/raster_buffer_provider.h" 64 #include "cc/raster/raster_buffer_provider.h"
65 #include "cc/raster/synchronous_task_graph_runner.h" 65 #include "cc/raster/synchronous_task_graph_runner.h"
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 270
271 LayerTreeHostImpl::~LayerTreeHostImpl() { 271 LayerTreeHostImpl::~LayerTreeHostImpl() {
272 DCHECK(task_runner_provider_->IsImplThread()); 272 DCHECK(task_runner_provider_->IsImplThread());
273 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 273 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
274 TRACE_EVENT_OBJECT_DELETED_WITH_ID(TRACE_DISABLED_BY_DEFAULT("cc.debug"), 274 TRACE_EVENT_OBJECT_DELETED_WITH_ID(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
275 "cc::LayerTreeHostImpl", id_); 275 "cc::LayerTreeHostImpl", id_);
276 276
277 // It is released before shutdown. 277 // It is released before shutdown.
278 DCHECK(!output_surface_); 278 DCHECK(!output_surface_);
279 279
280 DCHECK(!renderer_);
281 DCHECK(!resource_provider_); 280 DCHECK(!resource_provider_);
282 DCHECK(!resource_pool_); 281 DCHECK(!resource_pool_);
283 DCHECK(!tile_task_manager_); 282 DCHECK(!tile_task_manager_);
284 DCHECK(!single_thread_synchronous_task_graph_runner_); 283 DCHECK(!single_thread_synchronous_task_graph_runner_);
285 DCHECK(!image_decode_controller_); 284 DCHECK(!image_decode_controller_);
286 285
287 if (input_handler_client_) { 286 if (input_handler_client_) {
288 input_handler_client_->WillShutdown(); 287 input_handler_client_->WillShutdown();
289 input_handler_client_ = NULL; 288 input_handler_client_ = NULL;
290 } 289 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 386
388 micro_benchmark_controller_.DidCompleteCommit(); 387 micro_benchmark_controller_.DidCompleteCommit();
389 } 388 }
390 389
391 bool LayerTreeHostImpl::CanDraw() const { 390 bool LayerTreeHostImpl::CanDraw() const {
392 // Note: If you are changing this function or any other function that might 391 // Note: If you are changing this function or any other function that might
393 // affect the result of CanDraw, make sure to call 392 // affect the result of CanDraw, make sure to call
394 // client_->OnCanDrawStateChanged in the proper places and update the 393 // client_->OnCanDrawStateChanged in the proper places and update the
395 // NotifyIfCanDrawChanged test. 394 // NotifyIfCanDrawChanged test.
396 395
397 if (!renderer_) { 396 if (!output_surface_) {
398 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no renderer", 397 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no output surface",
399 TRACE_EVENT_SCOPE_THREAD); 398 TRACE_EVENT_SCOPE_THREAD);
400 return false; 399 return false;
401 } 400 }
402 401
403 // Must have an OutputSurface if |renderer_| is not NULL.
404 DCHECK(output_surface_);
405
406 // TODO(boliu): Make draws without layers work and move this below 402 // TODO(boliu): Make draws without layers work and move this below
407 // |resourceless_software_draw_| check. Tracked in crbug.com/264967. 403 // |resourceless_software_draw_| check. Tracked in crbug.com/264967.
408 if (active_tree_->LayerListIsEmpty()) { 404 if (active_tree_->LayerListIsEmpty()) {
409 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no root layer", 405 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw no root layer",
410 TRACE_EVENT_SCOPE_THREAD); 406 TRACE_EVENT_SCOPE_THREAD);
411 return false; 407 return false;
412 } 408 }
413 409
414 if (resourceless_software_draw_) 410 if (resourceless_software_draw_)
415 return true; 411 return true;
(...skipping 960 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 1372
1377 // Check for a non-null active tree to avoid doing this during shutdown. 1373 // Check for a non-null active tree to avoid doing this during shutdown.
1378 if (active_tree_ && !client_->IsInsideDraw() && tile->required_for_draw()) { 1374 if (active_tree_ && !client_->IsInsideDraw() && tile->required_for_draw()) {
1379 // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this 1375 // The LayerImpl::NotifyTileStateChanged() should damage the layer, so this
1380 // redraw will make those tiles be displayed. 1376 // redraw will make those tiles be displayed.
1381 SetNeedsRedraw(); 1377 SetNeedsRedraw();
1382 } 1378 }
1383 } 1379 }
1384 1380
1385 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { 1381 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
1382 DCHECK(task_runner_provider_->IsImplThread());
1383
1386 SetManagedMemoryPolicy(policy); 1384 SetManagedMemoryPolicy(policy);
1387 1385
1388 // This is short term solution to synchronously drop tile resources when 1386 // This is short term solution to synchronously drop tile resources when
1389 // using synchronous compositing to avoid memory usage regression. 1387 // using synchronous compositing to avoid memory usage regression.
1390 // TODO(boliu): crbug.com/499004 to track removing this. 1388 // TODO(boliu): crbug.com/499004 to track removing this.
1391 if (!policy.bytes_limit_when_visible && resource_pool_ && 1389 if (!policy.bytes_limit_when_visible && resource_pool_ &&
1392 settings_.using_synchronous_renderer_compositor) { 1390 settings_.using_synchronous_renderer_compositor) {
1393 ReleaseTreeResources(); 1391 ReleaseTreeResources();
1394 CleanUpTileManagerAndUIResources(); 1392 CleanUpTileManagerAndUIResources();
1395 1393
(...skipping 12 matching lines...) Expand all
1408 DCHECK(task_runner_provider_->IsImplThread()); 1406 DCHECK(task_runner_provider_->IsImplThread());
1409 tree_activation_callback_ = callback; 1407 tree_activation_callback_ = callback;
1410 } 1408 }
1411 1409
1412 void LayerTreeHostImpl::SetManagedMemoryPolicy( 1410 void LayerTreeHostImpl::SetManagedMemoryPolicy(
1413 const ManagedMemoryPolicy& policy) { 1411 const ManagedMemoryPolicy& policy) {
1414 if (cached_managed_memory_policy_ == policy) 1412 if (cached_managed_memory_policy_ == policy)
1415 return; 1413 return;
1416 1414
1417 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy(); 1415 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy();
1418
1419 cached_managed_memory_policy_ = policy; 1416 cached_managed_memory_policy_ = policy;
1420 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy(); 1417 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy();
1421 1418
1422 if (old_policy == actual_policy) 1419 if (old_policy == actual_policy)
1423 return; 1420 return;
1424 1421
1425 if (!task_runner_provider_->HasImplThread()) { 1422 UpdateTileManagerMemoryPolicy(actual_policy);
1426 // In single-thread mode, this can be called on the main thread by
1427 // GLRenderer::OnMemoryAllocationChanged.
1428 DebugScopedSetImplThread impl_thread(task_runner_provider_);
1429 UpdateTileManagerMemoryPolicy(actual_policy);
1430 } else {
1431 DCHECK(task_runner_provider_->IsImplThread());
1432 UpdateTileManagerMemoryPolicy(actual_policy);
1433 }
1434 1423
1435 // If there is already enough memory to draw everything imaginable and the 1424 // If there is already enough memory to draw everything imaginable and the
1436 // new memory limit does not change this, then do not re-commit. Don't bother 1425 // new memory limit does not change this, then do not re-commit. Don't bother
1437 // skipping commits if this is not visible (commits don't happen when not 1426 // skipping commits if this is not visible (commits don't happen when not
1438 // visible, there will almost always be a commit when this becomes visible). 1427 // visible, there will almost always be a commit when this becomes visible).
1439 bool needs_commit = true; 1428 bool needs_commit = true;
1440 if (visible() && 1429 if (visible() &&
1441 actual_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ && 1430 actual_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ &&
1442 old_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ && 1431 old_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ &&
1443 actual_policy.priority_cutoff_when_visible == 1432 actual_policy.priority_cutoff_when_visible ==
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1691 "step", "SwapBuffers"); 1680 "step", "SwapBuffers");
1692 // Only add the latency component once for renderer swap, not the browser 1681 // Only add the latency component once for renderer swap, not the browser
1693 // swap. 1682 // swap.
1694 if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0, 1683 if (!latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 0,
1695 nullptr)) { 1684 nullptr)) {
1696 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT, 1685 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT,
1697 0, 0); 1686 0, 0);
1698 } 1687 }
1699 } 1688 }
1700 1689
1701 renderer_->DrawFrame(std::move(metadata), std::move(frame->render_passes)); 1690 // Collect all resource ids in the render passes into a single array.
1691 ResourceProvider::ResourceIdArray resources;
1692 for (const auto& render_pass : frame->render_passes) {
1693 for (auto* quad : render_pass->quad_list) {
1694 for (ResourceId resource_id : quad->resources)
1695 resources.push_back(resource_id);
1696 }
1697 }
1698
1699 auto data = base::MakeUnique<DelegatedFrameData>();
1700 resource_provider_->PrepareSendToParent(resources, &data->resource_list);
1701 data->render_pass_list = std::move(frame->render_passes);
1702
1703 CompositorFrame compositor_frame;
1704 compositor_frame.metadata = std::move(metadata);
1705 compositor_frame.delegated_frame_data = std::move(data);
1706 output_surface_->SwapBuffers(std::move(compositor_frame));
1702 1707
1703 // 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
1704 // are noted as they occur. 1709 // are noted as they occur.
1705 // 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
1706 // damage forward to the next frame. 1711 // damage forward to the next frame.
1707 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++) {
1708 auto* surface = (*frame->render_surface_layer_list)[i]->render_surface(); 1713 auto* surface = (*frame->render_surface_layer_list)[i]->render_surface();
1709 surface->damage_tracker()->DidDrawDamagedArea(); 1714 surface->damage_tracker()->DidDrawDamagedArea();
1710 } 1715 }
1711 active_tree_->ResetAllChangeTracking(); 1716 active_tree_->ResetAllChangeTracking();
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
2118 } 2123 }
2119 2124
2120 void LayerTreeHostImpl::RecreateTreeResources() { 2125 void LayerTreeHostImpl::RecreateTreeResources() {
2121 active_tree_->RecreateResources(); 2126 active_tree_->RecreateResources();
2122 if (pending_tree_) 2127 if (pending_tree_)
2123 pending_tree_->RecreateResources(); 2128 pending_tree_->RecreateResources();
2124 if (recycle_tree_) 2129 if (recycle_tree_)
2125 recycle_tree_->RecreateResources(); 2130 recycle_tree_->RecreateResources();
2126 } 2131 }
2127 2132
2128 void LayerTreeHostImpl::CreateAndSetRenderer() {
2129 DCHECK(!renderer_);
2130 DCHECK(output_surface_);
2131 DCHECK(resource_provider_);
2132
2133 DCHECK(output_surface_->capabilities().delegated_rendering);
2134 renderer_ = base::MakeUnique<DelegatingRenderer>(output_surface_,
2135 resource_provider_.get());
2136 SetFullViewportDamage();
2137
2138 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be
2139 // initialized to get max texture size. Also, after releasing resources,
2140 // trees need another update to generate new ones.
2141 active_tree_->set_needs_update_draw_properties();
2142 if (pending_tree_)
2143 pending_tree_->set_needs_update_draw_properties();
2144 }
2145
2146 void LayerTreeHostImpl::CreateTileManagerResources() { 2133 void LayerTreeHostImpl::CreateTileManagerResources() {
2147 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, 2134 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_,
2148 &resource_pool_); 2135 &resource_pool_);
2149 2136
2150 if (use_gpu_rasterization_) { 2137 if (use_gpu_rasterization_) {
2151 image_decode_controller_ = base::MakeUnique<GpuImageDecodeController>( 2138 image_decode_controller_ = base::MakeUnique<GpuImageDecodeController>(
2152 output_surface_->worker_context_provider(), 2139 output_surface_->worker_context_provider(),
2153 settings_.renderer_settings.preferred_tile_format, 2140 settings_.renderer_settings.preferred_tile_format,
2154 settings_.gpu_decoded_image_budget_bytes); 2141 settings_.gpu_decoded_image_budget_bytes);
2155 } else { 2142 } else {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface"); 2267 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface");
2281 2268
2282 if (!output_surface_) 2269 if (!output_surface_)
2283 return; 2270 return;
2284 2271
2285 // Since we will create a new resource provider, we cannot continue to use 2272 // Since we will create a new resource provider, we cannot continue to use
2286 // the old resources (i.e. render_surfaces and texture IDs). Clear them 2273 // the old resources (i.e. render_surfaces and texture IDs). Clear them
2287 // before we destroy the old resource provider. 2274 // before we destroy the old resource provider.
2288 ReleaseTreeResources(); 2275 ReleaseTreeResources();
2289 2276
2290 // Note: order is important here. 2277 // Note: ui resource cleanup uses the |resource_provider_|.
2291 renderer_ = nullptr;
2292 CleanUpTileManagerAndUIResources(); 2278 CleanUpTileManagerAndUIResources();
2293 resource_provider_ = nullptr; 2279 resource_provider_ = nullptr;
2294 2280
2295 // Release any context visibility before we destroy the OutputSurface. 2281 // Release any context visibility before we destroy the OutputSurface.
2296 if (visible_) 2282 if (visible_)
2297 SetCompositorContextVisibility(false); 2283 SetCompositorContextVisibility(false);
2298 // Worker context visibility is based on both LTHI visibility as well as 2284 // Worker context visibility is based on both LTHI visibility as well as
2299 // memory policy, so we directly check |worker_context_visibility_| here, 2285 // memory policy, so we directly check |worker_context_visibility_| here,
2300 // rather than just relying on |visibility_|. 2286 // rather than just relying on |visibility_|.
2301 if (worker_context_visibility_) 2287 if (worker_context_visibility_)
2302 SetWorkerContextVisibility(false); 2288 SetWorkerContextVisibility(false);
2303 2289
2304 // Detach from the old output surface and reset |output_surface_| pointer 2290 // Detach from the old output surface and reset |output_surface_| pointer
2305 // as this surface is going to be destroyed independent of if binding the 2291 // as this surface is going to be destroyed independent of if binding the
2306 // new output surface succeeds or not. 2292 // new output surface succeeds or not.
2307 output_surface_->DetachFromClient(); 2293 output_surface_->DetachFromClient();
2308 output_surface_ = nullptr; 2294 output_surface_ = nullptr;
2309 2295
2310 // We don't know if the next OutputSurface will support GPU rasterization. 2296 // We don't know if the next OutputSurface will support GPU rasterization.
2311 // Make sure to clear the flag so that we force a re-computation. 2297 // Make sure to clear the flag so that we force a re-computation.
2312 use_gpu_rasterization_ = false; 2298 use_gpu_rasterization_ = false;
2313 } 2299 }
2314 2300
2315 bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) { 2301 bool LayerTreeHostImpl::InitializeRenderer(OutputSurface* output_surface) {
2302 DCHECK(output_surface->capabilities().delegated_rendering);
2316 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); 2303 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
2317 2304
2318 ReleaseOutputSurface(); 2305 ReleaseOutputSurface();
2319 if (!output_surface->BindToClient(this)) { 2306 if (!output_surface->BindToClient(this)) {
2320 // Avoid recreating tree resources because we might not have enough 2307 // Avoid recreating tree resources because we might not have enough
2321 // information to do this yet (eg. we don't have a TileManager at this 2308 // information to do this yet (eg. we don't have a TileManager at this
2322 // point). 2309 // point).
2323 return false; 2310 return false;
2324 } 2311 }
2325 2312
(...skipping 12 matching lines...) Expand all
2338 // visibility will be set via the memory policy update in 2325 // visibility will be set via the memory policy update in
2339 // CreateTileManagerResources below. 2326 // CreateTileManagerResources below.
2340 if (visible_) 2327 if (visible_)
2341 SetCompositorContextVisibility(true); 2328 SetCompositorContextVisibility(true);
2342 2329
2343 // Since the new context may be capable of MSAA, update status here. We don't 2330 // Since the new context may be capable of MSAA, update status here. We don't
2344 // need to check the return value since we are recreating all resources 2331 // need to check the return value since we are recreating all resources
2345 // already. 2332 // already.
2346 UpdateGpuRasterizationStatus(); 2333 UpdateGpuRasterizationStatus();
2347 2334
2348 CreateAndSetRenderer(); 2335 // See note in LayerTreeImpl::UpdateDrawProperties, new OutputSurface means a
2336 // new max texture size which affects draw properties. Also, if the draw
2337 // properties were up to date, layers still lost resources and we need to
2338 // UpdateDrawProperties() after calling RecreateTreeResources().
2339 active_tree_->set_needs_update_draw_properties();
2340 if (pending_tree_)
2341 pending_tree_->set_needs_update_draw_properties();
2349 2342
2350 CreateTileManagerResources(); 2343 CreateTileManagerResources();
2351 RecreateTreeResources(); 2344 RecreateTreeResources();
2352 2345
2353 // TODO(brianderson): Don't use a hard-coded parent draw time. 2346 // TODO(brianderson): Don't use a hard-coded parent draw time.
2354 base::TimeDelta parent_draw_time = 2347 base::TimeDelta parent_draw_time =
2355 (!settings_.use_external_begin_frame_source && 2348 (!settings_.use_external_begin_frame_source &&
2356 output_surface_->capabilities().adjust_deadline_for_parent) 2349 output_surface_->capabilities().adjust_deadline_for_parent)
2357 ? BeginFrameArgs::DefaultEstimatedParentDrawTime() 2350 ? BeginFrameArgs::DefaultEstimatedParentDrawTime()
2358 : base::TimeDelta(); 2351 : base::TimeDelta();
2359 client_->SetEstimatedParentDrawTime(parent_draw_time); 2352 client_->SetEstimatedParentDrawTime(parent_draw_time);
2360 2353
2361 DCHECK_EQ(1, output_surface_->capabilities().max_frames_pending); 2354 DCHECK_EQ(1, output_surface_->capabilities().max_frames_pending);
2362 client_->OnCanDrawStateChanged(CanDraw()); 2355 client_->OnCanDrawStateChanged(CanDraw());
2363 2356
2357 SetFullViewportDamage();
2364 // There will not be anything to draw here, so set high res 2358 // There will not be anything to draw here, so set high res
2365 // to avoid checkerboards, typically when we are recovering 2359 // to avoid checkerboards, typically when we are recovering
2366 // from lost context. 2360 // from lost context.
2367 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. 2361 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw.
2368 SetRequiresHighResToDraw(); 2362 SetRequiresHighResToDraw();
2369 2363
2370 return true; 2364 return true;
2371 } 2365 }
2372 2366
2373 void LayerTreeHostImpl::SetBeginFrameSource(BeginFrameSource* source) { 2367 void LayerTreeHostImpl::SetBeginFrameSource(BeginFrameSource* source) {
(...skipping 1812 matching lines...) Expand 10 before | Expand all | Expand 10 after
4186 if (is_visible) { 4180 if (is_visible) {
4187 worker_context_visibility_ = 4181 worker_context_visibility_ =
4188 worker_context->CacheController()->ClientBecameVisible(); 4182 worker_context->CacheController()->ClientBecameVisible();
4189 } else { 4183 } else {
4190 worker_context->CacheController()->ClientBecameNotVisible( 4184 worker_context->CacheController()->ClientBecameNotVisible(
4191 std::move(worker_context_visibility_)); 4185 std::move(worker_context_visibility_));
4192 } 4186 }
4193 } 4187 }
4194 4188
4195 } // namespace cc 4189 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698