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

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

Issue 228183002: cc: Move ResourcePool ownership to LTHI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "cc/quads/shared_quad_state.h" 43 #include "cc/quads/shared_quad_state.h"
44 #include "cc/quads/solid_color_draw_quad.h" 44 #include "cc/quads/solid_color_draw_quad.h"
45 #include "cc/quads/texture_draw_quad.h" 45 #include "cc/quads/texture_draw_quad.h"
46 #include "cc/resources/direct_raster_worker_pool.h" 46 #include "cc/resources/direct_raster_worker_pool.h"
47 #include "cc/resources/image_raster_worker_pool.h" 47 #include "cc/resources/image_raster_worker_pool.h"
48 #include "cc/resources/memory_history.h" 48 #include "cc/resources/memory_history.h"
49 #include "cc/resources/picture_layer_tiling.h" 49 #include "cc/resources/picture_layer_tiling.h"
50 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 50 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
51 #include "cc/resources/prioritized_resource_manager.h" 51 #include "cc/resources/prioritized_resource_manager.h"
52 #include "cc/resources/raster_worker_pool.h" 52 #include "cc/resources/raster_worker_pool.h"
53 #include "cc/resources/resource_pool.h"
53 #include "cc/resources/texture_mailbox_deleter.h" 54 #include "cc/resources/texture_mailbox_deleter.h"
54 #include "cc/resources/ui_resource_bitmap.h" 55 #include "cc/resources/ui_resource_bitmap.h"
55 #include "cc/scheduler/delay_based_time_source.h" 56 #include "cc/scheduler/delay_based_time_source.h"
56 #include "cc/trees/damage_tracker.h" 57 #include "cc/trees/damage_tracker.h"
57 #include "cc/trees/layer_tree_host.h" 58 #include "cc/trees/layer_tree_host.h"
58 #include "cc/trees/layer_tree_host_common.h" 59 #include "cc/trees/layer_tree_host_common.h"
59 #include "cc/trees/layer_tree_impl.h" 60 #include "cc/trees/layer_tree_impl.h"
60 #include "cc/trees/occlusion_tracker.h" 61 #include "cc/trees/occlusion_tracker.h"
61 #include "cc/trees/quad_culler.h" 62 #include "cc/trees/quad_culler.h"
62 #include "cc/trees/single_thread_proxy.h" 63 #include "cc/trees/single_thread_proxy.h"
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 // will outlive them, and we must make good. 301 // will outlive them, and we must make good.
301 if (recycle_tree_) 302 if (recycle_tree_)
302 recycle_tree_->Shutdown(); 303 recycle_tree_->Shutdown();
303 if (pending_tree_) 304 if (pending_tree_)
304 pending_tree_->Shutdown(); 305 pending_tree_->Shutdown();
305 active_tree_->Shutdown(); 306 active_tree_->Shutdown();
306 recycle_tree_.reset(); 307 recycle_tree_.reset();
307 pending_tree_.reset(); 308 pending_tree_.reset();
308 active_tree_.reset(); 309 active_tree_.reset();
309 tile_manager_.reset(); 310 tile_manager_.reset();
311 resource_pool_.reset();
310 raster_worker_pool_.reset(); 312 raster_worker_pool_.reset();
311 direct_raster_worker_pool_.reset(); 313 direct_raster_worker_pool_.reset();
312 } 314 }
313 315
314 void LayerTreeHostImpl::BeginMainFrameAborted(bool did_handle) { 316 void LayerTreeHostImpl::BeginMainFrameAborted(bool did_handle) {
315 // If the begin frame data was handled, then scroll and scale set was applied 317 // If the begin frame data was handled, then scroll and scale set was applied
316 // by the main thread, so the active tree needs to be updated as if these sent 318 // by the main thread, so the active tree needs to be updated as if these sent
317 // values were applied and committed. 319 // values were applied and committed.
318 if (did_handle) { 320 if (did_handle) {
319 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); 321 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit();
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 (static_cast<int64>(global_tile_state_.soft_memory_limit_in_bytes) * 1185 (static_cast<int64>(global_tile_state_.soft_memory_limit_in_bytes) *
1184 settings_.max_unused_resource_memory_percentage) / 1186 settings_.max_unused_resource_memory_percentage) /
1185 100); 1187 100);
1186 global_tile_state_.memory_limit_policy = 1188 global_tile_state_.memory_limit_policy =
1187 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( 1189 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy(
1188 visible_ ? 1190 visible_ ?
1189 policy.priority_cutoff_when_visible : 1191 policy.priority_cutoff_when_visible :
1190 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING); 1192 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING);
1191 global_tile_state_.num_resources_limit = policy.num_resources_limit; 1193 global_tile_state_.num_resources_limit = policy.num_resources_limit;
1192 1194
1195 DCHECK(resource_pool_);
1196 resource_pool_->CheckBusyResources();
1197 // Soft limit is used for resource pool such that memory returns to soft
1198 // limit after going over.
1199 resource_pool_->SetResourceUsageLimits(
1200 global_tile_state_.soft_memory_limit_in_bytes,
1201 global_tile_state_.unused_memory_limit_in_bytes,
1202 global_tile_state_.num_resources_limit);
1203
1193 DidModifyTilePriorities(); 1204 DidModifyTilePriorities();
1194 } 1205 }
1195 1206
1196 void LayerTreeHostImpl::DidModifyTilePriorities() { 1207 void LayerTreeHostImpl::DidModifyTilePriorities() {
1197 DCHECK(settings_.impl_side_painting); 1208 DCHECK(settings_.impl_side_painting);
1198 // Mark priorities as dirty and schedule a ManageTiles(). 1209 // Mark priorities as dirty and schedule a ManageTiles().
1199 tile_priorities_dirty_ = true; 1210 tile_priorities_dirty_ = true;
1200 client_->SetNeedsManageTilesOnImplThread(); 1211 client_->SetNeedsManageTilesOnImplThread();
1201 } 1212 }
1202 1213
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 1307
1297 void LayerTreeHostImpl::ReclaimResources(const CompositorFrameAck* ack) { 1308 void LayerTreeHostImpl::ReclaimResources(const CompositorFrameAck* ack) {
1298 // TODO(piman): We may need to do some validation on this ack before 1309 // TODO(piman): We may need to do some validation on this ack before
1299 // processing it. 1310 // processing it.
1300 if (renderer_) 1311 if (renderer_)
1301 renderer_->ReceiveSwapBuffersAck(*ack); 1312 renderer_->ReceiveSwapBuffersAck(*ack);
1302 1313
1303 // In OOM, we now might be able to release more resources that were held 1314 // In OOM, we now might be able to release more resources that were held
1304 // because they were exported. 1315 // because they were exported.
1305 if (tile_manager_) { 1316 if (tile_manager_) {
1306 DCHECK(tile_manager_->resource_pool()); 1317 DCHECK(resource_pool_);
1307 1318
1308 // TODO(vmpstr): Move resource pool to be LTHI member. 1319 resource_pool_->CheckBusyResources();
1309 tile_manager_->resource_pool()->CheckBusyResources(); 1320 resource_pool_->ReduceResourceUsage();
1310 tile_manager_->resource_pool()->ReduceResourceUsage();
1311 } 1321 }
1312 // If we're not visible, we likely released resources, so we want to 1322 // If we're not visible, we likely released resources, so we want to
1313 // aggressively flush here to make sure those DeleteTextures make it to the 1323 // aggressively flush here to make sure those DeleteTextures make it to the
1314 // GPU process to free up the memory. 1324 // GPU process to free up the memory.
1315 if (resource_provider_ && !visible_) 1325 if (resource_provider_ && !visible_)
1316 resource_provider_->ShallowFlushIfSupported(); 1326 resource_provider_->ShallowFlushIfSupported();
1317 } 1327 }
1318 1328
1319 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() { 1329 void LayerTreeHostImpl::OnCanDrawStateChangedForTree() {
1320 client_->OnCanDrawStateChanged(CanDraw()); 1330 client_->OnCanDrawStateChanged(CanDraw());
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
1790 void LayerTreeHostImpl::CreateAndSetTileManager( 1800 void LayerTreeHostImpl::CreateAndSetTileManager(
1791 ResourceProvider* resource_provider, 1801 ResourceProvider* resource_provider,
1792 ContextProvider* context_provider, 1802 ContextProvider* context_provider,
1793 bool using_map_image, 1803 bool using_map_image,
1794 bool allow_rasterize_on_demand) { 1804 bool allow_rasterize_on_demand) {
1795 DCHECK(settings_.impl_side_painting); 1805 DCHECK(settings_.impl_side_painting);
1796 DCHECK(resource_provider); 1806 DCHECK(resource_provider);
1797 DCHECK(proxy_->ImplThreadTaskRunner()); 1807 DCHECK(proxy_->ImplThreadTaskRunner());
1798 1808
1799 if (using_map_image) { 1809 if (using_map_image) {
1800 raster_worker_pool_ = ImageRasterWorkerPool::Create( 1810 raster_worker_pool_ =
1801 proxy_->ImplThreadTaskRunner(), 1811 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
1802 RasterWorkerPool::GetTaskGraphRunner(), 1812 RasterWorkerPool::GetTaskGraphRunner(),
1803 resource_provider, 1813 resource_provider);
1804 GetMapImageTextureTarget(context_provider)); 1814 resource_pool_ =
1815 ResourcePool::Create(resource_provider,
1816 GetMapImageTextureTarget(context_provider),
1817 resource_provider->best_texture_format());
1805 } else { 1818 } else {
1806 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 1819 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
1807 proxy_->ImplThreadTaskRunner(), 1820 proxy_->ImplThreadTaskRunner(),
1808 RasterWorkerPool::GetTaskGraphRunner(), 1821 RasterWorkerPool::GetTaskGraphRunner(),
1809 resource_provider, 1822 resource_provider,
1810 GetMaxTransferBufferUsageBytes(context_provider)); 1823 GetMaxTransferBufferUsageBytes(context_provider));
1824 resource_pool_ = ResourcePool::Create(
1825 resource_provider,
1826 GL_TEXTURE_2D,
1827 resource_provider->memory_efficient_texture_format());
1811 } 1828 }
1812 direct_raster_worker_pool_ = DirectRasterWorkerPool::Create( 1829 direct_raster_worker_pool_ = DirectRasterWorkerPool::Create(
1813 proxy_->ImplThreadTaskRunner(), resource_provider, context_provider); 1830 proxy_->ImplThreadTaskRunner(), resource_provider, context_provider);
1814 tile_manager_ = 1831 tile_manager_ =
1815 TileManager::Create(this, 1832 TileManager::Create(this,
1816 resource_provider, 1833 resource_pool_.get(),
1817 raster_worker_pool_->AsRasterizer(), 1834 raster_worker_pool_->AsRasterizer(),
1818 direct_raster_worker_pool_->AsRasterizer(), 1835 direct_raster_worker_pool_->AsRasterizer(),
1819 GetMaxRasterTasksUsageBytes(context_provider), 1836 GetMaxRasterTasksUsageBytes(context_provider),
1820 allow_rasterize_on_demand, 1837 allow_rasterize_on_demand,
1821 rendering_stats_instrumentation_); 1838 rendering_stats_instrumentation_);
1822 1839
1823 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); 1840 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
1824 need_to_update_visible_tiles_before_draw_ = false; 1841 need_to_update_visible_tiles_before_draw_ = false;
1825 } 1842 }
1826 1843
1827 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { 1844 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) {
1828 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); 1845 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget);
1829 } 1846 }
1830 1847
1831 bool LayerTreeHostImpl::InitializeRenderer( 1848 bool LayerTreeHostImpl::InitializeRenderer(
1832 scoped_ptr<OutputSurface> output_surface) { 1849 scoped_ptr<OutputSurface> output_surface) {
1833 #if DCHECK_IS_ON 1850 #if DCHECK_IS_ON
1834 DCHECK(!renderer_ || did_lose_called_); 1851 DCHECK(!renderer_ || did_lose_called_);
1835 #endif 1852 #endif
1836 1853
1837 // Since we will create a new resource provider, we cannot continue to use 1854 // Since we will create a new resource provider, we cannot continue to use
1838 // the old resources (i.e. render_surfaces and texture IDs). Clear them 1855 // the old resources (i.e. render_surfaces and texture IDs). Clear them
1839 // before we destroy the old resource provider. 1856 // before we destroy the old resource provider.
1840 ReleaseTreeResources(); 1857 ReleaseTreeResources();
1841 1858
1842 // Note: order is important here. 1859 // Note: order is important here.
1843 renderer_.reset(); 1860 renderer_.reset();
1844 tile_manager_.reset(); 1861 tile_manager_.reset();
1862 resource_pool_.reset();
1845 raster_worker_pool_.reset(); 1863 raster_worker_pool_.reset();
1846 direct_raster_worker_pool_.reset(); 1864 direct_raster_worker_pool_.reset();
1847 resource_provider_.reset(); 1865 resource_provider_.reset();
1848 output_surface_.reset(); 1866 output_surface_.reset();
1849 1867
1850 if (!output_surface->BindToClient(this)) 1868 if (!output_surface->BindToClient(this))
1851 return false; 1869 return false;
1852 1870
1853 scoped_ptr<ResourceProvider> resource_provider = 1871 scoped_ptr<ResourceProvider> resource_provider =
1854 ResourceProvider::Create(output_surface.get(), 1872 ResourceProvider::Create(output_surface.get(),
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1962 } 1980 }
1963 1981
1964 void LayerTreeHostImpl::ReleaseGL() { 1982 void LayerTreeHostImpl::ReleaseGL() {
1965 DCHECK(output_surface_->capabilities().deferred_gl_initialization); 1983 DCHECK(output_surface_->capabilities().deferred_gl_initialization);
1966 DCHECK(settings_.impl_side_painting); 1984 DCHECK(settings_.impl_side_painting);
1967 DCHECK(output_surface_->context_provider()); 1985 DCHECK(output_surface_->context_provider());
1968 1986
1969 ReleaseTreeResources(); 1987 ReleaseTreeResources();
1970 renderer_.reset(); 1988 renderer_.reset();
1971 tile_manager_.reset(); 1989 tile_manager_.reset();
1990 resource_pool_.reset();
1972 raster_worker_pool_.reset(); 1991 raster_worker_pool_.reset();
1973 direct_raster_worker_pool_.reset(); 1992 direct_raster_worker_pool_.reset();
1974 resource_provider_->InitializeSoftware(); 1993 resource_provider_->InitializeSoftware();
1975 1994
1976 bool skip_gl_renderer = true; 1995 bool skip_gl_renderer = true;
1977 CreateAndSetRenderer( 1996 CreateAndSetRenderer(
1978 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); 1997 output_surface_.get(), resource_provider_.get(), skip_gl_renderer);
1979 DCHECK(renderer_); 1998 DCHECK(renderer_);
1980 1999
1981 EnforceZeroBudget(true); 2000 EnforceZeroBudget(true);
(...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after
3069 swap_promise_monitor_.erase(monitor); 3088 swap_promise_monitor_.erase(monitor);
3070 } 3089 }
3071 3090
3072 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { 3091 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() {
3073 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); 3092 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin();
3074 for (; it != swap_promise_monitor_.end(); it++) 3093 for (; it != swap_promise_monitor_.end(); it++)
3075 (*it)->OnSetNeedsRedrawOnImpl(); 3094 (*it)->OnSetNeedsRedrawOnImpl();
3076 } 3095 }
3077 3096
3078 } // namespace cc 3097 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698