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 26 matching lines...) Expand all Loading... | |
| 37 #include "cc/output/compositor_frame_metadata.h" | 37 #include "cc/output/compositor_frame_metadata.h" |
| 38 #include "cc/output/copy_output_request.h" | 38 #include "cc/output/copy_output_request.h" |
| 39 #include "cc/output/delegating_renderer.h" | 39 #include "cc/output/delegating_renderer.h" |
| 40 #include "cc/output/gl_renderer.h" | 40 #include "cc/output/gl_renderer.h" |
| 41 #include "cc/output/software_renderer.h" | 41 #include "cc/output/software_renderer.h" |
| 42 #include "cc/quads/render_pass_draw_quad.h" | 42 #include "cc/quads/render_pass_draw_quad.h" |
| 43 #include "cc/quads/shared_quad_state.h" | 43 #include "cc/quads/shared_quad_state.h" |
| 44 #include "cc/quads/solid_color_draw_quad.h" | 44 #include "cc/quads/solid_color_draw_quad.h" |
| 45 #include "cc/quads/texture_draw_quad.h" | 45 #include "cc/quads/texture_draw_quad.h" |
| 46 #include "cc/resources/direct_raster_worker_pool.h" | 46 #include "cc/resources/direct_raster_worker_pool.h" |
| 47 #include "cc/resources/image_copy_raster_worker_pool.h" | |
| 47 #include "cc/resources/image_raster_worker_pool.h" | 48 #include "cc/resources/image_raster_worker_pool.h" |
| 48 #include "cc/resources/memory_history.h" | 49 #include "cc/resources/memory_history.h" |
| 49 #include "cc/resources/picture_layer_tiling.h" | 50 #include "cc/resources/picture_layer_tiling.h" |
| 50 #include "cc/resources/pixel_buffer_raster_worker_pool.h" | 51 #include "cc/resources/pixel_buffer_raster_worker_pool.h" |
| 51 #include "cc/resources/prioritized_resource_manager.h" | 52 #include "cc/resources/prioritized_resource_manager.h" |
| 52 #include "cc/resources/raster_worker_pool.h" | 53 #include "cc/resources/raster_worker_pool.h" |
| 53 #include "cc/resources/resource_pool.h" | 54 #include "cc/resources/resource_pool.h" |
| 54 #include "cc/resources/texture_mailbox_deleter.h" | 55 #include "cc/resources/texture_mailbox_deleter.h" |
| 55 #include "cc/resources/ui_resource_bitmap.h" | 56 #include "cc/resources/ui_resource_bitmap.h" |
| 56 #include "cc/scheduler/delay_based_time_source.h" | 57 #include "cc/scheduler/delay_based_time_source.h" |
| 57 #include "cc/trees/damage_tracker.h" | 58 #include "cc/trees/damage_tracker.h" |
| 58 #include "cc/trees/layer_tree_host.h" | 59 #include "cc/trees/layer_tree_host.h" |
| 59 #include "cc/trees/layer_tree_host_common.h" | 60 #include "cc/trees/layer_tree_host_common.h" |
| 60 #include "cc/trees/layer_tree_impl.h" | 61 #include "cc/trees/layer_tree_impl.h" |
| 61 #include "cc/trees/occlusion_tracker.h" | 62 #include "cc/trees/occlusion_tracker.h" |
| 62 #include "cc/trees/quad_culler.h" | 63 #include "cc/trees/quad_culler.h" |
| 63 #include "cc/trees/single_thread_proxy.h" | 64 #include "cc/trees/single_thread_proxy.h" |
| 64 #include "cc/trees/tree_synchronizer.h" | 65 #include "cc/trees/tree_synchronizer.h" |
| 65 #include "gpu/GLES2/gl2extchromium.h" | 66 #include "gpu/GLES2/gl2extchromium.h" |
| 66 #include "ui/gfx/frame_time.h" | 67 #include "ui/gfx/frame_time.h" |
| 67 #include "ui/gfx/size_conversions.h" | 68 #include "ui/gfx/size_conversions.h" |
| 68 #include "ui/gfx/vector2d_conversions.h" | 69 #include "ui/gfx/vector2d_conversions.h" |
| 69 | 70 |
| 70 namespace { | 71 namespace { |
| 71 | 72 |
| 73 const int kStagingPoolMemoryLimitWhenVisible = 32 * 1024 * 1024; | |
|
vmpstr
2014/04/23 17:25:46
Can you put a TODO here to maybe move this into gl
reveman
2014/04/24 19:20:43
Latest patch uses GetMaxTransferBufferUsageBytes i
| |
| 74 const int kStagingPoolUnusedMemoryLimit = kStagingPoolMemoryLimitWhenVisible; | |
| 75 const int kStagingPoolResourceCountLimit = 48; | |
| 76 | |
| 72 void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) { | 77 void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) { |
| 73 if (visible) { | 78 if (visible) { |
| 74 TRACE_EVENT_ASYNC_BEGIN1("webkit", | 79 TRACE_EVENT_ASYNC_BEGIN1("webkit", |
| 75 "LayerTreeHostImpl::SetVisible", | 80 "LayerTreeHostImpl::SetVisible", |
| 76 id, | 81 id, |
| 77 "LayerTreeHostImpl", | 82 "LayerTreeHostImpl", |
| 78 id); | 83 id); |
| 79 return; | 84 return; |
| 80 } | 85 } |
| 81 | 86 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 return GL_TEXTURE_2D; | 120 return GL_TEXTURE_2D; |
| 116 | 121 |
| 117 if (context_provider->ContextCapabilities().gpu.egl_image_external) | 122 if (context_provider->ContextCapabilities().gpu.egl_image_external) |
| 118 return GL_TEXTURE_EXTERNAL_OES; | 123 return GL_TEXTURE_EXTERNAL_OES; |
| 119 if (context_provider->ContextCapabilities().gpu.texture_rectangle) | 124 if (context_provider->ContextCapabilities().gpu.texture_rectangle) |
| 120 return GL_TEXTURE_RECTANGLE_ARB; | 125 return GL_TEXTURE_RECTANGLE_ARB; |
| 121 | 126 |
| 122 return GL_TEXTURE_2D; | 127 return GL_TEXTURE_2D; |
| 123 } | 128 } |
| 124 | 129 |
| 130 unsigned GetCopyImageTextureTarget(cc::ContextProvider* context_provider) { | |
| 131 if (!context_provider) | |
| 132 return GL_TEXTURE_2D; | |
| 133 | |
| 134 if (context_provider->ContextCapabilities().gpu.egl_image_external) | |
| 135 return GL_TEXTURE_EXTERNAL_OES; | |
| 136 | |
| 137 return GL_TEXTURE_2D; | |
| 138 } | |
| 139 | |
| 125 } // namespace | 140 } // namespace |
| 126 | 141 |
| 127 namespace cc { | 142 namespace cc { |
| 128 | 143 |
| 129 class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient { | 144 class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient { |
| 130 public: | 145 public: |
| 131 static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> Create( | 146 static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> Create( |
| 132 LayerTreeHostImpl* layer_tree_host_impl, | 147 LayerTreeHostImpl* layer_tree_host_impl, |
| 133 scoped_refptr<DelayBasedTimeSource> time_source) { | 148 scoped_refptr<DelayBasedTimeSource> time_source) { |
| 134 return make_scoped_ptr( | 149 return make_scoped_ptr( |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 303 if (pending_tree_) | 318 if (pending_tree_) |
| 304 pending_tree_->Shutdown(); | 319 pending_tree_->Shutdown(); |
| 305 active_tree_->Shutdown(); | 320 active_tree_->Shutdown(); |
| 306 recycle_tree_.reset(); | 321 recycle_tree_.reset(); |
| 307 pending_tree_.reset(); | 322 pending_tree_.reset(); |
| 308 active_tree_.reset(); | 323 active_tree_.reset(); |
| 309 tile_manager_.reset(); | 324 tile_manager_.reset(); |
| 310 resource_pool_.reset(); | 325 resource_pool_.reset(); |
| 311 raster_worker_pool_.reset(); | 326 raster_worker_pool_.reset(); |
| 312 direct_raster_worker_pool_.reset(); | 327 direct_raster_worker_pool_.reset(); |
| 328 staging_resource_pool_.reset(); | |
| 313 } | 329 } |
| 314 | 330 |
| 315 void LayerTreeHostImpl::BeginMainFrameAborted(bool did_handle) { | 331 void LayerTreeHostImpl::BeginMainFrameAborted(bool did_handle) { |
| 316 // If the begin frame data was handled, then scroll and scale set was applied | 332 // If the begin frame data was handled, then scroll and scale set was applied |
| 317 // by the main thread, so the active tree needs to be updated as if these sent | 333 // by the main thread, so the active tree needs to be updated as if these sent |
| 318 // values were applied and committed. | 334 // values were applied and committed. |
| 319 if (did_handle) { | 335 if (did_handle) { |
| 320 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); | 336 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); |
| 321 active_tree_->ResetContentsTexturesPurged(); | 337 active_tree_->ResetContentsTexturesPurged(); |
| 322 } | 338 } |
| (...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1193 | 1209 |
| 1194 DCHECK(resource_pool_); | 1210 DCHECK(resource_pool_); |
| 1195 resource_pool_->CheckBusyResources(); | 1211 resource_pool_->CheckBusyResources(); |
| 1196 // Soft limit is used for resource pool such that memory returns to soft | 1212 // Soft limit is used for resource pool such that memory returns to soft |
| 1197 // limit after going over. | 1213 // limit after going over. |
| 1198 resource_pool_->SetResourceUsageLimits( | 1214 resource_pool_->SetResourceUsageLimits( |
| 1199 global_tile_state_.soft_memory_limit_in_bytes, | 1215 global_tile_state_.soft_memory_limit_in_bytes, |
| 1200 global_tile_state_.unused_memory_limit_in_bytes, | 1216 global_tile_state_.unused_memory_limit_in_bytes, |
| 1201 global_tile_state_.num_resources_limit); | 1217 global_tile_state_.num_resources_limit); |
| 1202 | 1218 |
| 1219 // We currently use hard-coded limits for staging pool limits. | |
| 1220 if (staging_resource_pool_) { | |
| 1221 staging_resource_pool_->CheckBusyResources(); | |
| 1222 staging_resource_pool_->SetResourceUsageLimits( | |
| 1223 visible_ ? kStagingPoolMemoryLimitWhenVisible : 0, | |
| 1224 kStagingPoolUnusedMemoryLimit, | |
| 1225 kStagingPoolResourceCountLimit); | |
| 1226 } | |
| 1227 | |
| 1203 DidModifyTilePriorities(); | 1228 DidModifyTilePriorities(); |
| 1204 } | 1229 } |
| 1205 | 1230 |
| 1206 void LayerTreeHostImpl::DidModifyTilePriorities() { | 1231 void LayerTreeHostImpl::DidModifyTilePriorities() { |
| 1207 DCHECK(settings_.impl_side_painting); | 1232 DCHECK(settings_.impl_side_painting); |
| 1208 // Mark priorities as dirty and schedule a ManageTiles(). | 1233 // Mark priorities as dirty and schedule a ManageTiles(). |
| 1209 tile_priorities_dirty_ = true; | 1234 tile_priorities_dirty_ = true; |
| 1210 client_->SetNeedsManageTilesOnImplThread(); | 1235 client_->SetNeedsManageTilesOnImplThread(); |
| 1211 } | 1236 } |
| 1212 | 1237 |
| (...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1799 if (pending_tree_) | 1824 if (pending_tree_) |
| 1800 pending_tree_->set_needs_update_draw_properties(); | 1825 pending_tree_->set_needs_update_draw_properties(); |
| 1801 client_->UpdateRendererCapabilitiesOnImplThread(); | 1826 client_->UpdateRendererCapabilitiesOnImplThread(); |
| 1802 } | 1827 } |
| 1803 } | 1828 } |
| 1804 | 1829 |
| 1805 void LayerTreeHostImpl::CreateAndSetTileManager( | 1830 void LayerTreeHostImpl::CreateAndSetTileManager( |
| 1806 ResourceProvider* resource_provider, | 1831 ResourceProvider* resource_provider, |
| 1807 ContextProvider* context_provider, | 1832 ContextProvider* context_provider, |
| 1808 bool using_map_image, | 1833 bool using_map_image, |
| 1834 bool use_zero_copy, | |
| 1809 bool allow_rasterize_on_demand) { | 1835 bool allow_rasterize_on_demand) { |
| 1810 DCHECK(settings_.impl_side_painting); | 1836 DCHECK(settings_.impl_side_painting); |
| 1811 DCHECK(resource_provider); | 1837 DCHECK(resource_provider); |
| 1812 DCHECK(proxy_->ImplThreadTaskRunner()); | 1838 DCHECK(proxy_->ImplThreadTaskRunner()); |
| 1813 | 1839 |
| 1814 if (using_map_image) { | 1840 if (using_map_image) { |
| 1815 raster_worker_pool_ = | 1841 // We need to create a staging resource pool unless we're using |
| 1816 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1842 // ImageRasterWorkerPool that implements zero-copy. |
| 1817 RasterWorkerPool::GetTaskGraphRunner(), | 1843 if (use_zero_copy || !resource_provider_->use_sync_query()) { |
| 1818 resource_provider); | 1844 resource_pool_ = |
| 1819 resource_pool_ = | 1845 ResourcePool::Create(resource_provider, |
| 1820 ResourcePool::Create(resource_provider, | 1846 GetMapImageTextureTarget(context_provider), |
| 1821 GetMapImageTextureTarget(context_provider), | 1847 resource_provider->best_texture_format()); |
| 1822 resource_provider->best_texture_format()); | 1848 raster_worker_pool_ = |
| 1849 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | |
| 1850 RasterWorkerPool::GetTaskGraphRunner(), | |
| 1851 resource_provider); | |
| 1852 } else { | |
| 1853 // TODO(reveman): Use GetMapImageTextureTarget instead of | |
| 1854 // GetCopyImageTextureTarget when GL_TEXTURE_RECTANGLE_ARB support has | |
| 1855 // been added to CHROMIUM_copy_texture. | |
| 1856 staging_resource_pool_ = | |
| 1857 ResourcePool::Create(resource_provider, | |
| 1858 GetCopyImageTextureTarget(context_provider), | |
| 1859 resource_provider->best_texture_format()); | |
| 1860 resource_pool_ = | |
| 1861 ResourcePool::Create(resource_provider, | |
| 1862 GL_TEXTURE_2D, | |
| 1863 resource_provider->best_texture_format()); | |
| 1864 | |
| 1865 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | |
| 1866 proxy_->ImplThreadTaskRunner(), | |
| 1867 RasterWorkerPool::GetTaskGraphRunner(), | |
| 1868 resource_provider, | |
| 1869 staging_resource_pool_.get()); | |
| 1870 } | |
| 1823 } else { | 1871 } else { |
| 1824 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 1872 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
| 1825 proxy_->ImplThreadTaskRunner(), | 1873 proxy_->ImplThreadTaskRunner(), |
| 1826 RasterWorkerPool::GetTaskGraphRunner(), | 1874 RasterWorkerPool::GetTaskGraphRunner(), |
| 1827 resource_provider, | 1875 resource_provider, |
| 1828 GetMaxTransferBufferUsageBytes(context_provider)); | 1876 GetMaxTransferBufferUsageBytes(context_provider)); |
| 1829 resource_pool_ = ResourcePool::Create( | 1877 resource_pool_ = ResourcePool::Create( |
| 1830 resource_provider, | 1878 resource_provider, |
| 1831 GL_TEXTURE_2D, | 1879 GL_TEXTURE_2D, |
| 1832 resource_provider->memory_efficient_texture_format()); | 1880 resource_provider->memory_efficient_texture_format()); |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 1858 | 1906 |
| 1859 // Since we will create a new resource provider, we cannot continue to use | 1907 // Since we will create a new resource provider, we cannot continue to use |
| 1860 // the old resources (i.e. render_surfaces and texture IDs). Clear them | 1908 // the old resources (i.e. render_surfaces and texture IDs). Clear them |
| 1861 // before we destroy the old resource provider. | 1909 // before we destroy the old resource provider. |
| 1862 ReleaseTreeResources(); | 1910 ReleaseTreeResources(); |
| 1863 | 1911 |
| 1864 // Note: order is important here. | 1912 // Note: order is important here. |
| 1865 renderer_.reset(); | 1913 renderer_.reset(); |
| 1866 tile_manager_.reset(); | 1914 tile_manager_.reset(); |
| 1867 resource_pool_.reset(); | 1915 resource_pool_.reset(); |
| 1916 staging_resource_pool_.reset(); | |
| 1868 raster_worker_pool_.reset(); | 1917 raster_worker_pool_.reset(); |
| 1869 direct_raster_worker_pool_.reset(); | 1918 direct_raster_worker_pool_.reset(); |
| 1870 resource_provider_.reset(); | 1919 resource_provider_.reset(); |
| 1871 output_surface_.reset(); | 1920 output_surface_.reset(); |
| 1872 | 1921 |
| 1873 if (!output_surface->BindToClient(this)) | 1922 if (!output_surface->BindToClient(this)) |
| 1874 return false; | 1923 return false; |
| 1875 | 1924 |
| 1876 scoped_ptr<ResourceProvider> resource_provider = | 1925 scoped_ptr<ResourceProvider> resource_provider = |
| 1877 ResourceProvider::Create(output_surface.get(), | 1926 ResourceProvider::Create(output_surface.get(), |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 1890 output_surface.get(), resource_provider.get(), skip_gl_renderer); | 1939 output_surface.get(), resource_provider.get(), skip_gl_renderer); |
| 1891 | 1940 |
| 1892 if (!renderer_) | 1941 if (!renderer_) |
| 1893 return false; | 1942 return false; |
| 1894 | 1943 |
| 1895 if (settings_.impl_side_painting) { | 1944 if (settings_.impl_side_painting) { |
| 1896 CreateAndSetTileManager( | 1945 CreateAndSetTileManager( |
| 1897 resource_provider.get(), | 1946 resource_provider.get(), |
| 1898 output_surface->context_provider().get(), | 1947 output_surface->context_provider().get(), |
| 1899 GetRendererCapabilities().using_map_image, | 1948 GetRendererCapabilities().using_map_image, |
| 1949 settings_.use_zero_copy, | |
| 1900 GetRendererCapabilities().allow_rasterize_on_demand); | 1950 GetRendererCapabilities().allow_rasterize_on_demand); |
| 1901 } | 1951 } |
| 1902 | 1952 |
| 1903 if (!settings_.throttle_frame_production) { | 1953 if (!settings_.throttle_frame_production) { |
| 1904 // Disable VSync | 1954 // Disable VSync |
| 1905 output_surface->SetThrottleFrameProduction(false); | 1955 output_surface->SetThrottleFrameProduction(false); |
| 1906 } else if (!settings_.begin_impl_frame_scheduling_enabled) { | 1956 } else if (!settings_.begin_impl_frame_scheduling_enabled) { |
| 1907 // Setup BeginFrameEmulation if it's not supported natively | 1957 // Setup BeginFrameEmulation if it's not supported natively |
| 1908 const base::TimeDelta display_refresh_interval = | 1958 const base::TimeDelta display_refresh_interval = |
| 1909 base::TimeDelta::FromMicroseconds( | 1959 base::TimeDelta::FromMicroseconds( |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1990 DCHECK(output_surface_->capabilities().deferred_gl_initialization); | 2040 DCHECK(output_surface_->capabilities().deferred_gl_initialization); |
| 1991 DCHECK(settings_.impl_side_painting); | 2041 DCHECK(settings_.impl_side_painting); |
| 1992 DCHECK(output_surface_->context_provider()); | 2042 DCHECK(output_surface_->context_provider()); |
| 1993 | 2043 |
| 1994 ReleaseTreeResources(); | 2044 ReleaseTreeResources(); |
| 1995 renderer_.reset(); | 2045 renderer_.reset(); |
| 1996 tile_manager_.reset(); | 2046 tile_manager_.reset(); |
| 1997 resource_pool_.reset(); | 2047 resource_pool_.reset(); |
| 1998 raster_worker_pool_.reset(); | 2048 raster_worker_pool_.reset(); |
| 1999 direct_raster_worker_pool_.reset(); | 2049 direct_raster_worker_pool_.reset(); |
| 2050 staging_resource_pool_.reset(); | |
| 2000 resource_provider_->InitializeSoftware(); | 2051 resource_provider_->InitializeSoftware(); |
| 2001 | 2052 |
| 2002 bool skip_gl_renderer = true; | 2053 bool skip_gl_renderer = true; |
| 2003 CreateAndSetRenderer( | 2054 CreateAndSetRenderer( |
| 2004 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); | 2055 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); |
| 2005 DCHECK(renderer_); | 2056 DCHECK(renderer_); |
| 2006 | 2057 |
| 2007 EnforceZeroBudget(true); | 2058 EnforceZeroBudget(true); |
| 2008 CreateAndSetTileManager(resource_provider_.get(), | 2059 CreateAndSetTileManager(resource_provider_.get(), |
| 2009 NULL, | 2060 NULL, |
| 2010 GetRendererCapabilities().using_map_image, | 2061 GetRendererCapabilities().using_map_image, |
| 2062 settings_.use_zero_copy, | |
| 2011 GetRendererCapabilities().allow_rasterize_on_demand); | 2063 GetRendererCapabilities().allow_rasterize_on_demand); |
| 2012 DCHECK(tile_manager_); | 2064 DCHECK(tile_manager_); |
| 2013 | 2065 |
| 2014 SetOffscreenContextProvider(NULL); | 2066 SetOffscreenContextProvider(NULL); |
| 2015 | 2067 |
| 2016 client_->SetNeedsCommitOnImplThread(); | 2068 client_->SetNeedsCommitOnImplThread(); |
| 2017 } | 2069 } |
| 2018 | 2070 |
| 2019 void LayerTreeHostImpl::SetViewportSize(const gfx::Size& device_viewport_size) { | 2071 void LayerTreeHostImpl::SetViewportSize(const gfx::Size& device_viewport_size) { |
| 2020 if (device_viewport_size == device_viewport_size_) | 2072 if (device_viewport_size == device_viewport_size_) |
| (...skipping 1101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3122 swap_promise_monitor_.erase(monitor); | 3174 swap_promise_monitor_.erase(monitor); |
| 3123 } | 3175 } |
| 3124 | 3176 |
| 3125 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { | 3177 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { |
| 3126 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); | 3178 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); |
| 3127 for (; it != swap_promise_monitor_.end(); it++) | 3179 for (; it != swap_promise_monitor_.end(); it++) |
| 3128 (*it)->OnSetNeedsRedrawOnImpl(); | 3180 (*it)->OnSetNeedsRedrawOnImpl(); |
| 3129 } | 3181 } |
| 3130 | 3182 |
| 3131 } // namespace cc | 3183 } // namespace cc |
| OLD | NEW |