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