| 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 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 if (pending_tree_) | 305 if (pending_tree_) |
| 306 pending_tree_->ApplyScrollDeltasSinceBeginMainFrame(); | 306 pending_tree_->ApplyScrollDeltasSinceBeginMainFrame(); |
| 307 sync_tree()->set_needs_update_draw_properties(); | 307 sync_tree()->set_needs_update_draw_properties(); |
| 308 | 308 |
| 309 if (settings_.impl_side_painting) { | 309 if (settings_.impl_side_painting) { |
| 310 // Impl-side painting needs an update immediately post-commit to have the | 310 // Impl-side painting needs an update immediately post-commit to have the |
| 311 // opportunity to create tilings. Other paths can call UpdateDrawProperties | 311 // opportunity to create tilings. Other paths can call UpdateDrawProperties |
| 312 // more lazily when needed prior to drawing. | 312 // more lazily when needed prior to drawing. |
| 313 sync_tree()->UpdateDrawProperties(); | 313 sync_tree()->UpdateDrawProperties(); |
| 314 // Start working on newly created tiles immediately if needed. | 314 // Start working on newly created tiles immediately if needed. |
| 315 if (tile_manager_ && tile_priorities_dirty_) | 315 if (tile_manager_ && tile_priorities_dirty_ && !use_gpu_rasterization_) |
| 316 ManageTiles(); | 316 ManageTiles(); |
| 317 else | 317 else |
| 318 NotifyReadyToActivate(); | 318 NotifyReadyToActivate(); |
| 319 } else { | 319 } else { |
| 320 // If we're not in impl-side painting, the tree is immediately considered | 320 // If we're not in impl-side painting, the tree is immediately considered |
| 321 // active. | 321 // active. |
| 322 ActivateSyncTree(); | 322 ActivateSyncTree(); |
| 323 } | 323 } |
| 324 | 324 |
| 325 micro_benchmark_controller_.DidCompleteCommit(); | 325 micro_benchmark_controller_.DidCompleteCommit(); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 | 379 |
| 380 void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time) { | 380 void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time) { |
| 381 if (input_handler_client_) | 381 if (input_handler_client_) |
| 382 input_handler_client_->Animate(monotonic_time); | 382 input_handler_client_->Animate(monotonic_time); |
| 383 AnimatePageScale(monotonic_time); | 383 AnimatePageScale(monotonic_time); |
| 384 AnimateLayers(monotonic_time); | 384 AnimateLayers(monotonic_time); |
| 385 AnimateScrollbars(monotonic_time); | 385 AnimateScrollbars(monotonic_time); |
| 386 AnimateTopControls(monotonic_time); | 386 AnimateTopControls(monotonic_time); |
| 387 } | 387 } |
| 388 | 388 |
| 389 void LayerTreeHostImpl::RasterizeTiles() { |
| 390 if (!tile_manager_) |
| 391 return; |
| 392 if (!tile_priorities_dirty_) |
| 393 return; |
| 394 |
| 395 tile_priorities_dirty_ = false; |
| 396 tile_manager_->RasterizeTiles(global_tile_state_); |
| 397 } |
| 398 |
| 389 void LayerTreeHostImpl::ManageTiles() { | 399 void LayerTreeHostImpl::ManageTiles() { |
| 390 if (!tile_manager_) | 400 if (!tile_manager_) |
| 391 return; | 401 return; |
| 392 if (!tile_priorities_dirty_) | 402 if (!tile_priorities_dirty_) |
| 393 return; | 403 return; |
| 404 if (use_gpu_rasterization_) |
| 405 return; |
| 394 | 406 |
| 395 tile_priorities_dirty_ = false; | 407 tile_priorities_dirty_ = false; |
| 396 tile_manager_->ManageTiles(global_tile_state_); | 408 tile_manager_->ManageTiles(global_tile_state_); |
| 397 | 409 |
| 398 client_->DidManageTiles(); | 410 client_->DidManageTiles(); |
| 399 } | 411 } |
| 400 | 412 |
| 401 void LayerTreeHostImpl::StartPageScaleAnimation( | 413 void LayerTreeHostImpl::StartPageScaleAnimation( |
| 402 const gfx::Vector2d& target_offset, | 414 const gfx::Vector2d& target_offset, |
| 403 bool anchor_point, | 415 bool anchor_point, |
| (...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1063 // as part of the current frame being drawn. | 1075 // as part of the current frame being drawn. |
| 1064 if (settings().impl_side_painting) | 1076 if (settings().impl_side_painting) |
| 1065 tile_manager_->UpdateVisibleTiles(); | 1077 tile_manager_->UpdateVisibleTiles(); |
| 1066 | 1078 |
| 1067 UMA_HISTOGRAM_CUSTOM_COUNTS( | 1079 UMA_HISTOGRAM_CUSTOM_COUNTS( |
| 1068 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); | 1080 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); |
| 1069 | 1081 |
| 1070 bool ok = active_tree_->UpdateDrawProperties(); | 1082 bool ok = active_tree_->UpdateDrawProperties(); |
| 1071 DCHECK(ok) << "UpdateDrawProperties failed during draw"; | 1083 DCHECK(ok) << "UpdateDrawProperties failed during draw"; |
| 1072 | 1084 |
| 1085 if (use_gpu_rasterization_) |
| 1086 RasterizeTiles(); |
| 1087 |
| 1073 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); | 1088 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); |
| 1074 frame->render_passes.clear(); | 1089 frame->render_passes.clear(); |
| 1075 frame->render_passes_by_id.clear(); | 1090 frame->render_passes_by_id.clear(); |
| 1076 frame->will_draw_layers.clear(); | 1091 frame->will_draw_layers.clear(); |
| 1077 frame->has_no_damage = false; | 1092 frame->has_no_damage = false; |
| 1078 | 1093 |
| 1079 if (active_tree_->root_layer()) { | 1094 if (active_tree_->root_layer()) { |
| 1080 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; | 1095 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; |
| 1081 viewport_damage_rect_ = gfx::Rect(); | 1096 viewport_damage_rect_ = gfx::Rect(); |
| 1082 | 1097 |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1856 | 1871 |
| 1857 // If we just became visible, we have to ensure that we draw high res tiles, | 1872 // If we just became visible, we have to ensure that we draw high res tiles, |
| 1858 // to prevent checkerboard/low res flashes. | 1873 // to prevent checkerboard/low res flashes. |
| 1859 if (visible_) | 1874 if (visible_) |
| 1860 SetRequiresHighResToDraw(); | 1875 SetRequiresHighResToDraw(); |
| 1861 else | 1876 else |
| 1862 EvictAllUIResources(); | 1877 EvictAllUIResources(); |
| 1863 | 1878 |
| 1864 // Evict tiles immediately if invisible since this tab may never get another | 1879 // Evict tiles immediately if invisible since this tab may never get another |
| 1865 // draw or timer tick. | 1880 // draw or timer tick. |
| 1866 if (!visible_) | 1881 if (!visible_ && !use_gpu_rasterization_) |
| 1867 ManageTiles(); | 1882 ManageTiles(); |
| 1868 | 1883 |
| 1869 if (!renderer_) | 1884 if (!renderer_) |
| 1870 return; | 1885 return; |
| 1871 | 1886 |
| 1872 renderer_->SetVisible(visible); | 1887 renderer_->SetVisible(visible); |
| 1873 } | 1888 } |
| 1874 | 1889 |
| 1875 void LayerTreeHostImpl::SetNeedsAnimate() { | 1890 void LayerTreeHostImpl::SetNeedsAnimate() { |
| 1876 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); | 1891 NotifySwapPromiseMonitorsOfSetNeedsRedraw(); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1950 pending_tree_->set_needs_update_draw_properties(); | 1965 pending_tree_->set_needs_update_draw_properties(); |
| 1951 client_->UpdateRendererCapabilitiesOnImplThread(); | 1966 client_->UpdateRendererCapabilitiesOnImplThread(); |
| 1952 } | 1967 } |
| 1953 | 1968 |
| 1954 void LayerTreeHostImpl::CreateAndSetTileManager() { | 1969 void LayerTreeHostImpl::CreateAndSetTileManager() { |
| 1955 DCHECK(!tile_manager_); | 1970 DCHECK(!tile_manager_); |
| 1956 DCHECK(settings_.impl_side_painting); | 1971 DCHECK(settings_.impl_side_painting); |
| 1957 DCHECK(output_surface_); | 1972 DCHECK(output_surface_); |
| 1958 DCHECK(resource_provider_); | 1973 DCHECK(resource_provider_); |
| 1959 | 1974 |
| 1960 CreateResourceAndRasterWorkerPool( | 1975 CreateResourceAndRasterWorkerPool(&raster_worker_pool_, &gpu_rasterizer_, |
| 1961 &raster_worker_pool_, &resource_pool_, &staging_resource_pool_); | 1976 &resource_pool_, &staging_resource_pool_); |
| 1962 DCHECK(raster_worker_pool_); | 1977 DCHECK(raster_worker_pool_); |
| 1963 DCHECK(resource_pool_); | 1978 DCHECK(resource_pool_); |
| 1964 | 1979 |
| 1965 base::SingleThreadTaskRunner* task_runner = | 1980 base::SingleThreadTaskRunner* task_runner = |
| 1966 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 1981 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 1967 : proxy_->MainThreadTaskRunner(); | 1982 : proxy_->MainThreadTaskRunner(); |
| 1968 DCHECK(task_runner); | 1983 DCHECK(task_runner); |
| 1969 size_t scheduled_raster_task_limit = | 1984 size_t scheduled_raster_task_limit = |
| 1970 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() | 1985 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
| 1971 : settings_.scheduled_raster_task_limit; | 1986 : settings_.scheduled_raster_task_limit; |
| 1972 tile_manager_ = TileManager::Create(this, | 1987 tile_manager_ = TileManager::Create( |
| 1973 task_runner, | 1988 this, task_runner, resource_pool_.get(), |
| 1974 resource_pool_.get(), | 1989 raster_worker_pool_->AsRasterizer(), gpu_rasterizer_.get(), |
| 1975 raster_worker_pool_->AsRasterizer(), | 1990 rendering_stats_instrumentation_, scheduled_raster_task_limit); |
| 1976 rendering_stats_instrumentation_, | |
| 1977 scheduled_raster_task_limit); | |
| 1978 | 1991 |
| 1979 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 1992 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 1980 } | 1993 } |
| 1981 | 1994 |
| 1982 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( | 1995 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
| 1983 scoped_ptr<RasterWorkerPool>* raster_worker_pool, | 1996 scoped_ptr<RasterWorkerPool>* raster_worker_pool, |
| 1997 scoped_ptr<GpuRasterizer>* gpu_rasterizer, |
| 1984 scoped_ptr<ResourcePool>* resource_pool, | 1998 scoped_ptr<ResourcePool>* resource_pool, |
| 1985 scoped_ptr<ResourcePool>* staging_resource_pool) { | 1999 scoped_ptr<ResourcePool>* staging_resource_pool) { |
| 1986 base::SingleThreadTaskRunner* task_runner = | 2000 base::SingleThreadTaskRunner* task_runner = |
| 1987 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2001 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 1988 : proxy_->MainThreadTaskRunner(); | 2002 : proxy_->MainThreadTaskRunner(); |
| 1989 DCHECK(task_runner); | 2003 DCHECK(task_runner); |
| 1990 | 2004 |
| 1991 ContextProvider* context_provider = output_surface_->context_provider(); | 2005 ContextProvider* context_provider = output_surface_->context_provider(); |
| 1992 if (!context_provider) { | 2006 if (!context_provider) { |
| 1993 *resource_pool = | 2007 *resource_pool = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2006 *resource_pool = | 2020 *resource_pool = |
| 2007 ResourcePool::Create(resource_provider_.get(), | 2021 ResourcePool::Create(resource_provider_.get(), |
| 2008 GL_TEXTURE_2D, | 2022 GL_TEXTURE_2D, |
| 2009 resource_provider_->best_texture_format()); | 2023 resource_provider_->best_texture_format()); |
| 2010 | 2024 |
| 2011 *raster_worker_pool = | 2025 *raster_worker_pool = |
| 2012 GpuRasterWorkerPool::Create(task_runner, | 2026 GpuRasterWorkerPool::Create(task_runner, |
| 2013 context_provider, | 2027 context_provider, |
| 2014 resource_provider_.get(), | 2028 resource_provider_.get(), |
| 2015 settings_.use_distance_field_text); | 2029 settings_.use_distance_field_text); |
| 2030 |
| 2031 *gpu_rasterizer = |
| 2032 GpuRasterizer::Create(context_provider, resource_provider_.get(), |
| 2033 settings_.use_distance_field_text); |
| 2034 |
| 2016 return; | 2035 return; |
| 2017 } | 2036 } |
| 2018 | 2037 |
| 2019 if (GetRendererCapabilities().using_image) { | 2038 if (GetRendererCapabilities().using_image) { |
| 2020 unsigned image_target = GL_TEXTURE_2D; | 2039 unsigned image_target = GL_TEXTURE_2D; |
| 2021 #if defined(OS_MACOSX) | 2040 #if defined(OS_MACOSX) |
| 2022 // GL_TEXTURE_RECTANGLE_ARB target is required by IOSurface backed images. | 2041 // GL_TEXTURE_RECTANGLE_ARB target is required by IOSurface backed images. |
| 2023 DCHECK(context_provider->ContextCapabilities().gpu.texture_rectangle); | 2042 DCHECK(context_provider->ContextCapabilities().gpu.texture_rectangle); |
| 2024 image_target = GL_TEXTURE_RECTANGLE_ARB; | 2043 image_target = GL_TEXTURE_RECTANGLE_ARB; |
| 2025 #endif | 2044 #endif |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2072 resource_provider_.get(), | 2091 resource_provider_.get(), |
| 2073 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2092 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
| 2074 settings_.renderer_settings.refresh_rate)); | 2093 settings_.renderer_settings.refresh_rate)); |
| 2075 } | 2094 } |
| 2076 | 2095 |
| 2077 void LayerTreeHostImpl::DestroyTileManager() { | 2096 void LayerTreeHostImpl::DestroyTileManager() { |
| 2078 tile_manager_ = nullptr; | 2097 tile_manager_ = nullptr; |
| 2079 resource_pool_ = nullptr; | 2098 resource_pool_ = nullptr; |
| 2080 staging_resource_pool_ = nullptr; | 2099 staging_resource_pool_ = nullptr; |
| 2081 raster_worker_pool_ = nullptr; | 2100 raster_worker_pool_ = nullptr; |
| 2101 gpu_rasterizer_ = nullptr; |
| 2082 single_thread_synchronous_task_graph_runner_ = nullptr; | 2102 single_thread_synchronous_task_graph_runner_ = nullptr; |
| 2083 } | 2103 } |
| 2084 | 2104 |
| 2085 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2105 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
| 2086 // In impl-side painting, synchronize to the pending tree so that it has | 2106 // In impl-side painting, synchronize to the pending tree so that it has |
| 2087 // time to raster before being displayed. | 2107 // time to raster before being displayed. |
| 2088 return settings_.impl_side_painting; | 2108 return settings_.impl_side_painting; |
| 2089 } | 2109 } |
| 2090 | 2110 |
| 2091 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { | 2111 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { |
| (...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3486 } | 3506 } |
| 3487 | 3507 |
| 3488 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3508 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 3489 std::vector<PictureLayerImpl*>::iterator it = | 3509 std::vector<PictureLayerImpl*>::iterator it = |
| 3490 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3510 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
| 3491 DCHECK(it != picture_layers_.end()); | 3511 DCHECK(it != picture_layers_.end()); |
| 3492 picture_layers_.erase(it); | 3512 picture_layers_.erase(it); |
| 3493 } | 3513 } |
| 3494 | 3514 |
| 3495 } // namespace cc | 3515 } // namespace cc |
| OLD | NEW |