Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 733773005: cc: GPU rasterize tiles synchronously in PrepareToDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/thread_proxy.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/thread_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698