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 <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 // made a contract with our animation controllers that the registrar | 295 // made a contract with our animation controllers that the registrar |
296 // will outlive them, and we must make good. | 296 // will outlive them, and we must make good. |
297 if (recycle_tree_) | 297 if (recycle_tree_) |
298 recycle_tree_->Shutdown(); | 298 recycle_tree_->Shutdown(); |
299 if (pending_tree_) | 299 if (pending_tree_) |
300 pending_tree_->Shutdown(); | 300 pending_tree_->Shutdown(); |
301 active_tree_->Shutdown(); | 301 active_tree_->Shutdown(); |
302 recycle_tree_.reset(); | 302 recycle_tree_.reset(); |
303 pending_tree_.reset(); | 303 pending_tree_.reset(); |
304 active_tree_.reset(); | 304 active_tree_.reset(); |
305 tile_manager_.reset(); | 305 DestroyTileManager(); |
306 resource_pool_.reset(); | |
307 raster_worker_pool_.reset(); | |
308 direct_raster_worker_pool_.reset(); | |
309 staging_resource_pool_.reset(); | |
310 } | 306 } |
311 | 307 |
312 void LayerTreeHostImpl::BeginMainFrameAborted(bool did_handle) { | 308 void LayerTreeHostImpl::BeginMainFrameAborted(bool did_handle) { |
313 // If the begin frame data was handled, then scroll and scale set was applied | 309 // If the begin frame data was handled, then scroll and scale set was applied |
314 // by the main thread, so the active tree needs to be updated as if these sent | 310 // by the main thread, so the active tree needs to be updated as if these sent |
315 // values were applied and committed. | 311 // values were applied and committed. |
316 if (did_handle) { | 312 if (did_handle) { |
317 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); | 313 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); |
318 active_tree_->ResetContentsTexturesPurged(); | 314 active_tree_->ResetContentsTexturesPurged(); |
319 } | 315 } |
(...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1524 return renderer_ && renderer_->IsContextLost(); | 1520 return renderer_ && renderer_->IsContextLost(); |
1525 } | 1521 } |
1526 | 1522 |
1527 void LayerTreeHostImpl::SetUseGpuRasterization(bool use_gpu) { | 1523 void LayerTreeHostImpl::SetUseGpuRasterization(bool use_gpu) { |
1528 if (use_gpu == use_gpu_rasterization_) | 1524 if (use_gpu == use_gpu_rasterization_) |
1529 return; | 1525 return; |
1530 | 1526 |
1531 use_gpu_rasterization_ = use_gpu; | 1527 use_gpu_rasterization_ = use_gpu; |
1532 ReleaseTreeResources(); | 1528 ReleaseTreeResources(); |
1533 | 1529 |
| 1530 // Replace existing tile manager with another one that uses appropriate |
| 1531 // rasterizer. |
| 1532 if (tile_manager_) { |
| 1533 DestroyTileManager(); |
| 1534 CreateAndSetTileManager(); |
| 1535 } |
| 1536 |
1534 // We have released tilings for both active and pending tree. | 1537 // We have released tilings for both active and pending tree. |
1535 // We would not have any content to draw until the pending tree is activated. | 1538 // We would not have any content to draw until the pending tree is activated. |
1536 // Prevent the active tree from drawing until activation. | 1539 // Prevent the active tree from drawing until activation. |
1537 active_tree_->SetRequiresHighResToDraw(); | 1540 active_tree_->SetRequiresHighResToDraw(); |
1538 } | 1541 } |
1539 | 1542 |
1540 const RendererCapabilitiesImpl& | 1543 const RendererCapabilitiesImpl& |
1541 LayerTreeHostImpl::GetRendererCapabilities() const { | 1544 LayerTreeHostImpl::GetRendererCapabilities() const { |
1542 return renderer_->Capabilities(); | 1545 return renderer_->Capabilities(); |
1543 } | 1546 } |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1817 void LayerTreeHostImpl::ReleaseTreeResources() { | 1820 void LayerTreeHostImpl::ReleaseTreeResources() { |
1818 active_tree_->ReleaseResources(); | 1821 active_tree_->ReleaseResources(); |
1819 if (pending_tree_) | 1822 if (pending_tree_) |
1820 pending_tree_->ReleaseResources(); | 1823 pending_tree_->ReleaseResources(); |
1821 if (recycle_tree_) | 1824 if (recycle_tree_) |
1822 recycle_tree_->ReleaseResources(); | 1825 recycle_tree_->ReleaseResources(); |
1823 | 1826 |
1824 EvictAllUIResources(); | 1827 EvictAllUIResources(); |
1825 } | 1828 } |
1826 | 1829 |
1827 void LayerTreeHostImpl::CreateAndSetRenderer( | 1830 void LayerTreeHostImpl::CreateAndSetRenderer() { |
1828 OutputSurface* output_surface, | |
1829 ResourceProvider* resource_provider) { | |
1830 DCHECK(!renderer_); | 1831 DCHECK(!renderer_); |
1831 if (output_surface->capabilities().delegated_rendering) { | 1832 DCHECK(output_surface_); |
| 1833 DCHECK(resource_provider_); |
| 1834 |
| 1835 if (output_surface_->capabilities().delegated_rendering) { |
1832 renderer_ = DelegatingRenderer::Create( | 1836 renderer_ = DelegatingRenderer::Create( |
1833 this, &settings_, output_surface, resource_provider); | 1837 this, &settings_, output_surface_.get(), resource_provider_.get()); |
1834 } else if (output_surface->context_provider()) { | 1838 } else if (output_surface_->context_provider()) { |
1835 renderer_ = GLRenderer::Create(this, | 1839 renderer_ = GLRenderer::Create(this, |
1836 &settings_, | 1840 &settings_, |
1837 output_surface, | 1841 output_surface_.get(), |
1838 resource_provider, | 1842 resource_provider_.get(), |
1839 texture_mailbox_deleter_.get(), | 1843 texture_mailbox_deleter_.get(), |
1840 settings_.highp_threshold_min); | 1844 settings_.highp_threshold_min); |
1841 } else if (output_surface->software_device()) { | 1845 } else if (output_surface_->software_device()) { |
1842 renderer_ = SoftwareRenderer::Create( | 1846 renderer_ = SoftwareRenderer::Create( |
1843 this, &settings_, output_surface, resource_provider); | 1847 this, &settings_, output_surface_.get(), resource_provider_.get()); |
1844 } | 1848 } |
1845 DCHECK(renderer_); | 1849 DCHECK(renderer_); |
1846 | 1850 |
1847 renderer_->SetVisible(visible_); | 1851 renderer_->SetVisible(visible_); |
1848 SetFullRootLayerDamage(); | 1852 SetFullRootLayerDamage(); |
1849 | 1853 |
1850 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be | 1854 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be |
1851 // initialized to get max texture size. Also, after releasing resources, | 1855 // initialized to get max texture size. Also, after releasing resources, |
1852 // trees need another update to generate new ones. | 1856 // trees need another update to generate new ones. |
1853 active_tree_->set_needs_update_draw_properties(); | 1857 active_tree_->set_needs_update_draw_properties(); |
1854 if (pending_tree_) | 1858 if (pending_tree_) |
1855 pending_tree_->set_needs_update_draw_properties(); | 1859 pending_tree_->set_needs_update_draw_properties(); |
1856 client_->UpdateRendererCapabilitiesOnImplThread(); | 1860 client_->UpdateRendererCapabilitiesOnImplThread(); |
1857 } | 1861 } |
1858 | 1862 |
1859 void LayerTreeHostImpl::CreateAndSetTileManager( | 1863 void LayerTreeHostImpl::CreateAndSetTileManager() { |
1860 ResourceProvider* resource_provider, | 1864 DCHECK(!tile_manager_); |
1861 ContextProvider* context_provider, | |
1862 bool use_zero_copy, | |
1863 bool use_one_copy, | |
1864 bool allow_rasterize_on_demand) { | |
1865 DCHECK(settings_.impl_side_painting); | 1865 DCHECK(settings_.impl_side_painting); |
1866 DCHECK(resource_provider); | 1866 DCHECK(output_surface_); |
| 1867 DCHECK(resource_provider_); |
1867 DCHECK(proxy_->ImplThreadTaskRunner()); | 1868 DCHECK(proxy_->ImplThreadTaskRunner()); |
1868 | 1869 |
| 1870 ContextProvider* context_provider = output_surface_->context_provider(); |
1869 transfer_buffer_memory_limit_ = | 1871 transfer_buffer_memory_limit_ = |
1870 GetMaxTransferBufferUsageBytes(context_provider); | 1872 GetMaxTransferBufferUsageBytes(context_provider); |
1871 | 1873 |
1872 if (use_zero_copy) { | 1874 if (use_gpu_rasterization_ && context_provider) { |
1873 resource_pool_ = | 1875 resource_pool_ = |
1874 ResourcePool::Create(resource_provider, | 1876 ResourcePool::Create(resource_provider_.get(), |
| 1877 GL_TEXTURE_2D, |
| 1878 resource_provider_->best_texture_format()); |
| 1879 |
| 1880 raster_worker_pool_ = |
| 1881 DirectRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
| 1882 resource_provider_.get(), |
| 1883 context_provider); |
| 1884 } else if (UseZeroCopyTextureUpload()) { |
| 1885 resource_pool_ = |
| 1886 ResourcePool::Create(resource_provider_.get(), |
1875 GetMapImageTextureTarget(context_provider), | 1887 GetMapImageTextureTarget(context_provider), |
1876 resource_provider->best_texture_format()); | 1888 resource_provider_->best_texture_format()); |
| 1889 |
1877 raster_worker_pool_ = | 1890 raster_worker_pool_ = |
1878 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1891 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1879 RasterWorkerPool::GetTaskGraphRunner(), | 1892 RasterWorkerPool::GetTaskGraphRunner(), |
1880 resource_provider); | 1893 resource_provider_.get()); |
1881 } else if (use_one_copy) { | 1894 } else if (UseOneCopyTextureUpload()) { |
1882 // We need to create a staging resource pool when using copy rasterizer. | 1895 // We need to create a staging resource pool when using copy rasterizer. |
1883 staging_resource_pool_ = | 1896 staging_resource_pool_ = |
1884 ResourcePool::Create(resource_provider, | 1897 ResourcePool::Create(resource_provider_.get(), |
1885 GetMapImageTextureTarget(context_provider), | 1898 GetMapImageTextureTarget(context_provider), |
1886 resource_provider->best_texture_format()); | 1899 resource_provider_->best_texture_format()); |
1887 resource_pool_ = | 1900 resource_pool_ = |
1888 ResourcePool::Create(resource_provider, | 1901 ResourcePool::Create(resource_provider_.get(), |
1889 GL_TEXTURE_2D, | 1902 GL_TEXTURE_2D, |
1890 resource_provider->best_texture_format()); | 1903 resource_provider_->best_texture_format()); |
1891 | 1904 |
1892 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 1905 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( |
1893 proxy_->ImplThreadTaskRunner(), | 1906 proxy_->ImplThreadTaskRunner(), |
1894 RasterWorkerPool::GetTaskGraphRunner(), | 1907 RasterWorkerPool::GetTaskGraphRunner(), |
1895 resource_provider, | 1908 resource_provider_.get(), |
1896 staging_resource_pool_.get()); | 1909 staging_resource_pool_.get()); |
1897 } else { | 1910 } else { |
| 1911 resource_pool_ = ResourcePool::Create( |
| 1912 resource_provider_.get(), |
| 1913 GL_TEXTURE_2D, |
| 1914 resource_provider_->memory_efficient_texture_format()); |
| 1915 |
1898 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 1916 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
1899 proxy_->ImplThreadTaskRunner(), | 1917 proxy_->ImplThreadTaskRunner(), |
1900 RasterWorkerPool::GetTaskGraphRunner(), | 1918 RasterWorkerPool::GetTaskGraphRunner(), |
1901 resource_provider, | 1919 resource_provider_.get(), |
1902 transfer_buffer_memory_limit_); | 1920 transfer_buffer_memory_limit_); |
1903 resource_pool_ = ResourcePool::Create( | |
1904 resource_provider, | |
1905 GL_TEXTURE_2D, | |
1906 resource_provider->memory_efficient_texture_format()); | |
1907 } | 1921 } |
1908 direct_raster_worker_pool_ = DirectRasterWorkerPool::Create( | 1922 |
1909 proxy_->ImplThreadTaskRunner(), resource_provider, context_provider); | |
1910 tile_manager_ = | 1923 tile_manager_ = |
1911 TileManager::Create(this, | 1924 TileManager::Create(this, |
1912 resource_pool_.get(), | 1925 resource_pool_.get(), |
1913 raster_worker_pool_->AsRasterizer(), | 1926 raster_worker_pool_->AsRasterizer(), |
1914 direct_raster_worker_pool_->AsRasterizer(), | 1927 GetRendererCapabilities().allow_rasterize_on_demand, |
1915 allow_rasterize_on_demand, | |
1916 rendering_stats_instrumentation_); | 1928 rendering_stats_instrumentation_); |
1917 | 1929 |
1918 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 1930 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
1919 need_to_update_visible_tiles_before_draw_ = false; | 1931 need_to_update_visible_tiles_before_draw_ = false; |
1920 } | 1932 } |
1921 | 1933 |
| 1934 void LayerTreeHostImpl::DestroyTileManager() { |
| 1935 tile_manager_.reset(); |
| 1936 resource_pool_.reset(); |
| 1937 staging_resource_pool_.reset(); |
| 1938 raster_worker_pool_.reset(); |
| 1939 } |
| 1940 |
| 1941 bool LayerTreeHostImpl::UseZeroCopyTextureUpload() const { |
| 1942 // Note: we use zero-copy by default when the renderer is using |
| 1943 // shared memory resources. |
| 1944 return (settings_.use_zero_copy || |
| 1945 GetRendererCapabilities().using_shared_memory_resources) && |
| 1946 GetRendererCapabilities().using_map_image; |
| 1947 } |
| 1948 |
| 1949 bool LayerTreeHostImpl::UseOneCopyTextureUpload() const { |
| 1950 // Sync query support is required by one-copy rasterizer. |
| 1951 return settings_.use_one_copy && GetRendererCapabilities().using_map_image && |
| 1952 resource_provider_->use_sync_query(); |
| 1953 } |
| 1954 |
1922 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 1955 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
1923 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 1956 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
1924 } | 1957 } |
1925 | 1958 |
1926 bool LayerTreeHostImpl::InitializeRenderer( | 1959 bool LayerTreeHostImpl::InitializeRenderer( |
1927 scoped_ptr<OutputSurface> output_surface) { | 1960 scoped_ptr<OutputSurface> output_surface) { |
1928 #if DCHECK_IS_ON | 1961 #if DCHECK_IS_ON |
1929 DCHECK(!renderer_ || did_lose_called_); | 1962 DCHECK(!renderer_ || did_lose_called_); |
1930 #endif | 1963 #endif |
1931 | 1964 |
1932 // Since we will create a new resource provider, we cannot continue to use | 1965 // Since we will create a new resource provider, we cannot continue to use |
1933 // the old resources (i.e. render_surfaces and texture IDs). Clear them | 1966 // the old resources (i.e. render_surfaces and texture IDs). Clear them |
1934 // before we destroy the old resource provider. | 1967 // before we destroy the old resource provider. |
1935 ReleaseTreeResources(); | 1968 ReleaseTreeResources(); |
1936 | 1969 |
1937 // Note: order is important here. | 1970 // Note: order is important here. |
1938 renderer_.reset(); | 1971 renderer_.reset(); |
1939 tile_manager_.reset(); | 1972 DestroyTileManager(); |
1940 resource_pool_.reset(); | |
1941 staging_resource_pool_.reset(); | |
1942 raster_worker_pool_.reset(); | |
1943 direct_raster_worker_pool_.reset(); | |
1944 resource_provider_.reset(); | 1973 resource_provider_.reset(); |
1945 output_surface_.reset(); | 1974 output_surface_.reset(); |
1946 | 1975 |
1947 if (!output_surface->BindToClient(this)) | 1976 if (!output_surface->BindToClient(this)) |
1948 return false; | 1977 return false; |
1949 | 1978 |
1950 scoped_ptr<ResourceProvider> resource_provider = | 1979 output_surface_ = output_surface.Pass(); |
1951 ResourceProvider::Create(output_surface.get(), | 1980 resource_provider_ = |
| 1981 ResourceProvider::Create(output_surface_.get(), |
1952 shared_bitmap_manager_, | 1982 shared_bitmap_manager_, |
1953 settings_.highp_threshold_min, | 1983 settings_.highp_threshold_min, |
1954 settings_.use_rgba_4444_textures, | 1984 settings_.use_rgba_4444_textures, |
1955 settings_.texture_id_allocation_chunk_size, | 1985 settings_.texture_id_allocation_chunk_size, |
1956 settings_.use_distance_field_text); | 1986 settings_.use_distance_field_text); |
1957 | 1987 |
1958 if (output_surface->capabilities().deferred_gl_initialization) | 1988 if (output_surface_->capabilities().deferred_gl_initialization) |
1959 EnforceZeroBudget(true); | 1989 EnforceZeroBudget(true); |
1960 | 1990 |
1961 CreateAndSetRenderer(output_surface.get(), resource_provider.get()); | 1991 CreateAndSetRenderer(); |
1962 | 1992 |
1963 transfer_buffer_memory_limit_ = | 1993 transfer_buffer_memory_limit_ = |
1964 GetMaxTransferBufferUsageBytes(output_surface->context_provider().get()); | 1994 GetMaxTransferBufferUsageBytes(output_surface_->context_provider()); |
1965 | 1995 |
1966 if (settings_.impl_side_painting) { | 1996 if (settings_.impl_side_painting) |
1967 // Note: we use zero-copy rasterizer by default when the renderer is using | 1997 CreateAndSetTileManager(); |
1968 // shared memory resources. | |
1969 bool use_zero_copy = | |
1970 (settings_.use_zero_copy || | |
1971 GetRendererCapabilities().using_shared_memory_resources) && | |
1972 GetRendererCapabilities().using_map_image; | |
1973 | |
1974 // Sync query support is required by one-copy rasterizer. | |
1975 bool use_one_copy = settings_.use_one_copy && | |
1976 GetRendererCapabilities().using_map_image && | |
1977 resource_provider->use_sync_query(); | |
1978 | |
1979 CreateAndSetTileManager( | |
1980 resource_provider.get(), | |
1981 output_surface->context_provider().get(), | |
1982 use_zero_copy, | |
1983 use_one_copy, | |
1984 GetRendererCapabilities().allow_rasterize_on_demand); | |
1985 } | |
1986 | 1998 |
1987 // Initialize vsync parameters to sane values. | 1999 // Initialize vsync parameters to sane values. |
1988 const base::TimeDelta display_refresh_interval = | 2000 const base::TimeDelta display_refresh_interval = |
1989 base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond / | 2001 base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond / |
1990 settings_.refresh_rate); | 2002 settings_.refresh_rate); |
1991 CommitVSyncParameters(base::TimeTicks(), display_refresh_interval); | 2003 CommitVSyncParameters(base::TimeTicks(), display_refresh_interval); |
1992 | 2004 |
1993 // TODO(brianderson): Don't use a hard-coded parent draw time. | 2005 // TODO(brianderson): Don't use a hard-coded parent draw time. |
1994 base::TimeDelta parent_draw_time = | 2006 base::TimeDelta parent_draw_time = |
1995 output_surface->capabilities().adjust_deadline_for_parent | 2007 output_surface_->capabilities().adjust_deadline_for_parent |
1996 ? BeginFrameArgs::DefaultDeadlineAdjustment() | 2008 ? BeginFrameArgs::DefaultDeadlineAdjustment() |
1997 : base::TimeDelta(); | 2009 : base::TimeDelta(); |
1998 client_->SetEstimatedParentDrawTime(parent_draw_time); | 2010 client_->SetEstimatedParentDrawTime(parent_draw_time); |
1999 | 2011 |
2000 int max_frames_pending = | 2012 int max_frames_pending = output_surface_->capabilities().max_frames_pending; |
2001 output_surface->capabilities().max_frames_pending; | |
2002 if (max_frames_pending <= 0) | 2013 if (max_frames_pending <= 0) |
2003 max_frames_pending = OutputSurface::DEFAULT_MAX_FRAMES_PENDING; | 2014 max_frames_pending = OutputSurface::DEFAULT_MAX_FRAMES_PENDING; |
2004 client_->SetMaxSwapsPendingOnImplThread(max_frames_pending); | 2015 client_->SetMaxSwapsPendingOnImplThread(max_frames_pending); |
2005 | |
2006 resource_provider_ = resource_provider.Pass(); | |
2007 output_surface_ = output_surface.Pass(); | |
2008 | |
2009 client_->OnCanDrawStateChanged(CanDraw()); | 2016 client_->OnCanDrawStateChanged(CanDraw()); |
2010 | 2017 |
2011 return true; | 2018 return true; |
2012 } | 2019 } |
2013 | 2020 |
2014 void LayerTreeHostImpl::CommitVSyncParameters(base::TimeTicks timebase, | 2021 void LayerTreeHostImpl::CommitVSyncParameters(base::TimeTicks timebase, |
2015 base::TimeDelta interval) { | 2022 base::TimeDelta interval) { |
2016 client_->CommitVSyncParameters(timebase, interval); | 2023 client_->CommitVSyncParameters(timebase, interval); |
2017 } | 2024 } |
2018 | 2025 |
2019 void LayerTreeHostImpl::DeferredInitialize() { | 2026 void LayerTreeHostImpl::DeferredInitialize() { |
2020 DCHECK(output_surface_->capabilities().deferred_gl_initialization); | 2027 DCHECK(output_surface_->capabilities().deferred_gl_initialization); |
2021 DCHECK(settings_.impl_side_painting); | 2028 DCHECK(settings_.impl_side_painting); |
2022 DCHECK(output_surface_->context_provider()); | 2029 DCHECK(output_surface_->context_provider()); |
2023 | 2030 |
2024 ReleaseTreeResources(); | 2031 ReleaseTreeResources(); |
2025 renderer_.reset(); | 2032 renderer_.reset(); |
2026 | 2033 |
2027 resource_provider_->InitializeGL(); | 2034 resource_provider_->InitializeGL(); |
2028 | 2035 |
2029 CreateAndSetRenderer(output_surface_.get(), resource_provider_.get()); | 2036 CreateAndSetRenderer(); |
2030 | 2037 |
2031 EnforceZeroBudget(false); | 2038 EnforceZeroBudget(false); |
2032 client_->SetNeedsCommitOnImplThread(); | 2039 client_->SetNeedsCommitOnImplThread(); |
2033 } | 2040 } |
2034 | 2041 |
2035 void LayerTreeHostImpl::ReleaseGL() { | 2042 void LayerTreeHostImpl::ReleaseGL() { |
2036 DCHECK(output_surface_->capabilities().deferred_gl_initialization); | 2043 DCHECK(output_surface_->capabilities().deferred_gl_initialization); |
2037 DCHECK(settings_.impl_side_painting); | 2044 DCHECK(settings_.impl_side_painting); |
2038 DCHECK(output_surface_->context_provider()); | 2045 DCHECK(output_surface_->context_provider()); |
2039 | 2046 |
2040 ReleaseTreeResources(); | 2047 ReleaseTreeResources(); |
2041 renderer_.reset(); | 2048 renderer_.reset(); |
2042 tile_manager_.reset(); | 2049 DestroyTileManager(); |
2043 resource_pool_.reset(); | |
2044 raster_worker_pool_.reset(); | |
2045 direct_raster_worker_pool_.reset(); | |
2046 staging_resource_pool_.reset(); | |
2047 resource_provider_->InitializeSoftware(); | 2050 resource_provider_->InitializeSoftware(); |
2048 | 2051 |
2049 output_surface_->ReleaseContextProvider(); | 2052 output_surface_->ReleaseContextProvider(); |
2050 CreateAndSetRenderer(output_surface_.get(), resource_provider_.get()); | 2053 CreateAndSetRenderer(); |
2051 | 2054 |
2052 EnforceZeroBudget(true); | 2055 EnforceZeroBudget(true); |
2053 DCHECK(GetRendererCapabilities().using_map_image); | 2056 CreateAndSetTileManager(); |
2054 CreateAndSetTileManager(resource_provider_.get(), | |
2055 NULL, | |
2056 true, | |
2057 false, | |
2058 GetRendererCapabilities().allow_rasterize_on_demand); | |
2059 DCHECK(tile_manager_); | |
2060 | 2057 |
2061 client_->SetNeedsCommitOnImplThread(); | 2058 client_->SetNeedsCommitOnImplThread(); |
2062 } | 2059 } |
2063 | 2060 |
2064 void LayerTreeHostImpl::SetViewportSize(const gfx::Size& device_viewport_size) { | 2061 void LayerTreeHostImpl::SetViewportSize(const gfx::Size& device_viewport_size) { |
2065 if (device_viewport_size == device_viewport_size_) | 2062 if (device_viewport_size == device_viewport_size_) |
2066 return; | 2063 return; |
2067 | 2064 |
2068 if (pending_tree_) | 2065 if (pending_tree_) |
2069 active_tree_->SetViewportSizeInvalid(); | 2066 active_tree_->SetViewportSizeInvalid(); |
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3131 swap_promise_monitor_.erase(monitor); | 3128 swap_promise_monitor_.erase(monitor); |
3132 } | 3129 } |
3133 | 3130 |
3134 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { | 3131 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { |
3135 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); | 3132 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); |
3136 for (; it != swap_promise_monitor_.end(); it++) | 3133 for (; it != swap_promise_monitor_.end(); it++) |
3137 (*it)->OnSetNeedsRedrawOnImpl(); | 3134 (*it)->OnSetNeedsRedrawOnImpl(); |
3138 } | 3135 } |
3139 | 3136 |
3140 } // namespace cc | 3137 } // namespace cc |
OLD | NEW |