| OLD | NEW |
| 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 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1352 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1352 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
| 1353 DCHECK(task_runner_provider_->IsImplThread()); | 1353 DCHECK(task_runner_provider_->IsImplThread()); |
| 1354 | 1354 |
| 1355 SetManagedMemoryPolicy(policy); | 1355 SetManagedMemoryPolicy(policy); |
| 1356 | 1356 |
| 1357 // This is short term solution to synchronously drop tile resources when | 1357 // This is short term solution to synchronously drop tile resources when |
| 1358 // using synchronous compositing to avoid memory usage regression. | 1358 // using synchronous compositing to avoid memory usage regression. |
| 1359 // TODO(boliu): crbug.com/499004 to track removing this. | 1359 // TODO(boliu): crbug.com/499004 to track removing this. |
| 1360 if (!policy.bytes_limit_when_visible && resource_pool_ && | 1360 if (!policy.bytes_limit_when_visible && resource_pool_ && |
| 1361 settings_.using_synchronous_renderer_compositor) { | 1361 settings_.using_synchronous_renderer_compositor) { |
| 1362 ReleaseTreeResources(); | 1362 ReleaseTileResources(); |
| 1363 CleanUpTileManagerAndUIResources(); | 1363 CleanUpTileManagerAndUIResources(); |
| 1364 | 1364 |
| 1365 // Force a call to NotifyAllTileTasks completed - otherwise this logic may | 1365 // Force a call to NotifyAllTileTasks completed - otherwise this logic may |
| 1366 // be skipped if no work was enqueued at the time the tile manager was | 1366 // be skipped if no work was enqueued at the time the tile manager was |
| 1367 // destroyed. | 1367 // destroyed. |
| 1368 NotifyAllTileTasksCompleted(); | 1368 NotifyAllTileTasksCompleted(); |
| 1369 | 1369 |
| 1370 CreateTileManagerResources(); | 1370 CreateTileManagerResources(); |
| 1371 RecreateTreeResources(); | 1371 RecreateTileResources(); |
| 1372 } | 1372 } |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 void LayerTreeHostImpl::SetTreeActivationCallback( | 1375 void LayerTreeHostImpl::SetTreeActivationCallback( |
| 1376 const base::Closure& callback) { | 1376 const base::Closure& callback) { |
| 1377 DCHECK(task_runner_provider_->IsImplThread()); | 1377 DCHECK(task_runner_provider_->IsImplThread()); |
| 1378 tree_activation_callback_ = callback; | 1378 tree_activation_callback_ = callback; |
| 1379 } | 1379 } |
| 1380 | 1380 |
| 1381 void LayerTreeHostImpl::SetManagedMemoryPolicy( | 1381 void LayerTreeHostImpl::SetManagedMemoryPolicy( |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1800 void LayerTreeHostImpl::UpdateTreeResourcesForGpuRasterizationIfNeeded() { | 1800 void LayerTreeHostImpl::UpdateTreeResourcesForGpuRasterizationIfNeeded() { |
| 1801 if (!need_update_gpu_rasterization_status_) | 1801 if (!need_update_gpu_rasterization_status_) |
| 1802 return; | 1802 return; |
| 1803 if (!UpdateGpuRasterizationStatus()) | 1803 if (!UpdateGpuRasterizationStatus()) |
| 1804 return; | 1804 return; |
| 1805 | 1805 |
| 1806 // Clean up and replace existing tile manager with another one that uses | 1806 // Clean up and replace existing tile manager with another one that uses |
| 1807 // appropriate rasterizer. Only do this however if we already have a | 1807 // appropriate rasterizer. Only do this however if we already have a |
| 1808 // resource pool, since otherwise we might not be able to create a new | 1808 // resource pool, since otherwise we might not be able to create a new |
| 1809 // one. | 1809 // one. |
| 1810 ReleaseTreeResources(); | 1810 ReleaseTileResources(); |
| 1811 if (resource_pool_) { | 1811 if (resource_pool_) { |
| 1812 CleanUpTileManagerAndUIResources(); | 1812 CleanUpTileManagerAndUIResources(); |
| 1813 CreateTileManagerResources(); | 1813 CreateTileManagerResources(); |
| 1814 } | 1814 } |
| 1815 RecreateTreeResources(); | 1815 RecreateTileResources(); |
| 1816 | 1816 |
| 1817 // We have released tilings for both active and pending tree. | 1817 // We have released tilings for both active and pending tree. |
| 1818 // We would not have any content to draw until the pending tree is activated. | 1818 // We would not have any content to draw until the pending tree is activated. |
| 1819 // Prevent the active tree from drawing until activation. | 1819 // Prevent the active tree from drawing until activation. |
| 1820 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. | 1820 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. |
| 1821 SetRequiresHighResToDraw(); | 1821 SetRequiresHighResToDraw(); |
| 1822 } | 1822 } |
| 1823 | 1823 |
| 1824 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { | 1824 void LayerTreeHostImpl::WillBeginImplFrame(const BeginFrameArgs& args) { |
| 1825 current_begin_frame_tracker_.Start(args); | 1825 current_begin_frame_tracker_.Start(args); |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2076 void LayerTreeHostImpl::ReleaseTreeResources() { | 2076 void LayerTreeHostImpl::ReleaseTreeResources() { |
| 2077 active_tree_->ReleaseResources(); | 2077 active_tree_->ReleaseResources(); |
| 2078 if (pending_tree_) | 2078 if (pending_tree_) |
| 2079 pending_tree_->ReleaseResources(); | 2079 pending_tree_->ReleaseResources(); |
| 2080 if (recycle_tree_) | 2080 if (recycle_tree_) |
| 2081 recycle_tree_->ReleaseResources(); | 2081 recycle_tree_->ReleaseResources(); |
| 2082 | 2082 |
| 2083 EvictAllUIResources(); | 2083 EvictAllUIResources(); |
| 2084 } | 2084 } |
| 2085 | 2085 |
| 2086 void LayerTreeHostImpl::RecreateTreeResources() { | 2086 void LayerTreeHostImpl::ReleaseTileResources() { |
| 2087 active_tree_->RecreateResources(); | 2087 active_tree_->ReleaseTileResources(); |
| 2088 if (pending_tree_) | 2088 if (pending_tree_) |
| 2089 pending_tree_->RecreateResources(); | 2089 pending_tree_->ReleaseTileResources(); |
| 2090 if (recycle_tree_) | 2090 if (recycle_tree_) |
| 2091 recycle_tree_->RecreateResources(); | 2091 recycle_tree_->ReleaseTileResources(); |
| 2092 } |
| 2093 |
| 2094 void LayerTreeHostImpl::RecreateTileResources() { |
| 2095 active_tree_->RecreateTileResources(); |
| 2096 if (pending_tree_) |
| 2097 pending_tree_->RecreateTileResources(); |
| 2098 if (recycle_tree_) |
| 2099 recycle_tree_->RecreateTileResources(); |
| 2092 } | 2100 } |
| 2093 | 2101 |
| 2094 void LayerTreeHostImpl::CreateTileManagerResources() { | 2102 void LayerTreeHostImpl::CreateTileManagerResources() { |
| 2095 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, | 2103 CreateResourceAndRasterBufferProvider(&raster_buffer_provider_, |
| 2096 &resource_pool_); | 2104 &resource_pool_); |
| 2097 | 2105 |
| 2098 if (use_gpu_rasterization_) { | 2106 if (use_gpu_rasterization_) { |
| 2099 image_decode_controller_ = base::MakeUnique<GpuImageDecodeController>( | 2107 image_decode_controller_ = base::MakeUnique<GpuImageDecodeController>( |
| 2100 compositor_frame_sink_->worker_context_provider(), | 2108 compositor_frame_sink_->worker_context_provider(), |
| 2101 settings_.renderer_settings.preferred_tile_format, | 2109 settings_.renderer_settings.preferred_tile_format, |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2325 | 2333 |
| 2326 // See note in LayerTreeImpl::UpdateDrawProperties, new CompositorFrameSink | 2334 // See note in LayerTreeImpl::UpdateDrawProperties, new CompositorFrameSink |
| 2327 // means a new max texture size which affects draw properties. Also, if the | 2335 // means a new max texture size which affects draw properties. Also, if the |
| 2328 // draw properties were up to date, layers still lost resources and we need to | 2336 // draw properties were up to date, layers still lost resources and we need to |
| 2329 // UpdateDrawProperties() after calling RecreateTreeResources(). | 2337 // UpdateDrawProperties() after calling RecreateTreeResources(). |
| 2330 active_tree_->set_needs_update_draw_properties(); | 2338 active_tree_->set_needs_update_draw_properties(); |
| 2331 if (pending_tree_) | 2339 if (pending_tree_) |
| 2332 pending_tree_->set_needs_update_draw_properties(); | 2340 pending_tree_->set_needs_update_draw_properties(); |
| 2333 | 2341 |
| 2334 CreateTileManagerResources(); | 2342 CreateTileManagerResources(); |
| 2335 RecreateTreeResources(); | 2343 RecreateTileResources(); |
| 2336 | 2344 |
| 2337 client_->OnCanDrawStateChanged(CanDraw()); | 2345 client_->OnCanDrawStateChanged(CanDraw()); |
| 2338 SetFullViewportDamage(); | 2346 SetFullViewportDamage(); |
| 2339 // There will not be anything to draw here, so set high res | 2347 // There will not be anything to draw here, so set high res |
| 2340 // to avoid checkerboards, typically when we are recovering | 2348 // to avoid checkerboards, typically when we are recovering |
| 2341 // from lost context. | 2349 // from lost context. |
| 2342 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. | 2350 // TODO(crbug.com/469175): Replace with RequiresHighResToDraw. |
| 2343 SetRequiresHighResToDraw(); | 2351 SetRequiresHighResToDraw(); |
| 2344 | 2352 |
| 2345 return true; | 2353 return true; |
| (...skipping 1751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4097 if (is_visible) { | 4105 if (is_visible) { |
| 4098 worker_context_visibility_ = | 4106 worker_context_visibility_ = |
| 4099 worker_context->CacheController()->ClientBecameVisible(); | 4107 worker_context->CacheController()->ClientBecameVisible(); |
| 4100 } else { | 4108 } else { |
| 4101 worker_context->CacheController()->ClientBecameNotVisible( | 4109 worker_context->CacheController()->ClientBecameNotVisible( |
| 4102 std::move(worker_context_visibility_)); | 4110 std::move(worker_context_visibility_)); |
| 4103 } | 4111 } |
| 4104 } | 4112 } |
| 4105 | 4113 |
| 4106 } // namespace cc | 4114 } // namespace cc |
| OLD | NEW |