| 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 |