Chromium Code Reviews| 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 |