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

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

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 months 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/layer_tree_host_perftest.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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "cc/output/copy_output_request.h" 42 #include "cc/output/copy_output_request.h"
43 #include "cc/output/delegating_renderer.h" 43 #include "cc/output/delegating_renderer.h"
44 #include "cc/output/gl_renderer.h" 44 #include "cc/output/gl_renderer.h"
45 #include "cc/output/software_renderer.h" 45 #include "cc/output/software_renderer.h"
46 #include "cc/quads/render_pass_draw_quad.h" 46 #include "cc/quads/render_pass_draw_quad.h"
47 #include "cc/quads/shared_quad_state.h" 47 #include "cc/quads/shared_quad_state.h"
48 #include "cc/quads/solid_color_draw_quad.h" 48 #include "cc/quads/solid_color_draw_quad.h"
49 #include "cc/quads/texture_draw_quad.h" 49 #include "cc/quads/texture_draw_quad.h"
50 #include "cc/resources/bitmap_tile_task_worker_pool.h" 50 #include "cc/resources/bitmap_tile_task_worker_pool.h"
51 #include "cc/resources/eviction_tile_priority_queue.h" 51 #include "cc/resources/eviction_tile_priority_queue.h"
52 #include "cc/resources/gpu_rasterizer.h"
52 #include "cc/resources/gpu_tile_task_worker_pool.h" 53 #include "cc/resources/gpu_tile_task_worker_pool.h"
53 #include "cc/resources/memory_history.h" 54 #include "cc/resources/memory_history.h"
54 #include "cc/resources/one_copy_tile_task_worker_pool.h" 55 #include "cc/resources/one_copy_tile_task_worker_pool.h"
55 #include "cc/resources/picture_layer_tiling.h" 56 #include "cc/resources/picture_layer_tiling.h"
56 #include "cc/resources/pixel_buffer_tile_task_worker_pool.h" 57 #include "cc/resources/pixel_buffer_tile_task_worker_pool.h"
57 #include "cc/resources/prioritized_resource_manager.h" 58 #include "cc/resources/prioritized_resource_manager.h"
58 #include "cc/resources/raster_tile_priority_queue.h" 59 #include "cc/resources/raster_tile_priority_queue.h"
59 #include "cc/resources/resource_pool.h" 60 #include "cc/resources/resource_pool.h"
61 #include "cc/resources/software_rasterizer.h"
60 #include "cc/resources/texture_mailbox_deleter.h" 62 #include "cc/resources/texture_mailbox_deleter.h"
61 #include "cc/resources/tile_task_worker_pool.h" 63 #include "cc/resources/tile_task_worker_pool.h"
62 #include "cc/resources/ui_resource_bitmap.h" 64 #include "cc/resources/ui_resource_bitmap.h"
63 #include "cc/resources/zero_copy_tile_task_worker_pool.h" 65 #include "cc/resources/zero_copy_tile_task_worker_pool.h"
64 #include "cc/scheduler/delay_based_time_source.h" 66 #include "cc/scheduler/delay_based_time_source.h"
65 #include "cc/trees/damage_tracker.h" 67 #include "cc/trees/damage_tracker.h"
66 #include "cc/trees/layer_tree_host.h" 68 #include "cc/trees/layer_tree_host.h"
67 #include "cc/trees/layer_tree_host_common.h" 69 #include "cc/trees/layer_tree_host_common.h"
68 #include "cc/trees/layer_tree_impl.h" 70 #include "cc/trees/layer_tree_impl.h"
69 #include "cc/trees/occlusion_tracker.h" 71 #include "cc/trees/occlusion_tracker.h"
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 469
468 scoped_ptr<SwapPromiseMonitor> 470 scoped_ptr<SwapPromiseMonitor>
469 LayerTreeHostImpl::CreateLatencyInfoSwapPromiseMonitor( 471 LayerTreeHostImpl::CreateLatencyInfoSwapPromiseMonitor(
470 ui::LatencyInfo* latency) { 472 ui::LatencyInfo* latency) {
471 return make_scoped_ptr( 473 return make_scoped_ptr(
472 new LatencyInfoSwapPromiseMonitor(latency, NULL, this)); 474 new LatencyInfoSwapPromiseMonitor(latency, NULL, this));
473 } 475 }
474 476
475 ScrollElasticityHelper* LayerTreeHostImpl::CreateScrollElasticityHelper() { 477 ScrollElasticityHelper* LayerTreeHostImpl::CreateScrollElasticityHelper() {
476 DCHECK(!scroll_elasticity_helper_); 478 DCHECK(!scroll_elasticity_helper_);
477 scroll_elasticity_helper_.reset( 479 if (settings_.enable_elastic_overscroll) {
478 ScrollElasticityHelper::CreateForLayerTreeHostImpl(this)); 480 scroll_elasticity_helper_.reset(
481 ScrollElasticityHelper::CreateForLayerTreeHostImpl(this));
482 }
479 return scroll_elasticity_helper_.get(); 483 return scroll_elasticity_helper_.get();
480 } 484 }
481 485
482 void LayerTreeHostImpl::QueueSwapPromiseForMainThreadScrollUpdate( 486 void LayerTreeHostImpl::QueueSwapPromiseForMainThreadScrollUpdate(
483 scoped_ptr<SwapPromise> swap_promise) { 487 scoped_ptr<SwapPromise> swap_promise) {
484 swap_promises_for_main_thread_scroll_update_.push_back(swap_promise.Pass()); 488 swap_promises_for_main_thread_scroll_update_.push_back(swap_promise.Pass());
485 } 489 }
486 490
487 void LayerTreeHostImpl::TrackDamageForAllSurfaces( 491 void LayerTreeHostImpl::TrackDamageForAllSurfaces(
488 LayerImpl* root_draw_layer, 492 LayerImpl* root_draw_layer,
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 } 1054 }
1051 1055
1052 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { 1056 DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) {
1053 TRACE_EVENT1("cc", 1057 TRACE_EVENT1("cc",
1054 "LayerTreeHostImpl::PrepareToDraw", 1058 "LayerTreeHostImpl::PrepareToDraw",
1055 "SourceFrameNumber", 1059 "SourceFrameNumber",
1056 active_tree_->source_frame_number()); 1060 active_tree_->source_frame_number());
1057 if (input_handler_client_) 1061 if (input_handler_client_)
1058 input_handler_client_->ReconcileElasticOverscrollAndRootScroll(); 1062 input_handler_client_->ReconcileElasticOverscrollAndRootScroll();
1059 1063
1060 // This will cause NotifyTileStateChanged() to be called for any visible tiles
1061 // that completed, which will add damage to the frame for them so they appear
1062 // as part of the current frame being drawn.
1063 if (settings().impl_side_painting)
1064 tile_manager_->UpdateVisibleTiles();
1065
1066 UMA_HISTOGRAM_CUSTOM_COUNTS( 1064 UMA_HISTOGRAM_CUSTOM_COUNTS(
1067 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20); 1065 "Compositing.NumActiveLayers", active_tree_->NumLayers(), 1, 400, 20);
1068 1066
1069 bool ok = active_tree_->UpdateDrawProperties(); 1067 bool ok = active_tree_->UpdateDrawProperties();
1070 DCHECK(ok) << "UpdateDrawProperties failed during draw"; 1068 DCHECK(ok) << "UpdateDrawProperties failed during draw";
1071 1069
1070 // This will cause NotifyTileStateChanged() to be called for any visible tiles
1071 // that completed, which will add damage to the frame for them so they appear
1072 // as part of the current frame being drawn.
1073 if (settings().impl_side_painting)
1074 tile_manager_->UpdateVisibleTiles(global_tile_state_);
1075
1072 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); 1076 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList();
1073 frame->render_passes.clear(); 1077 frame->render_passes.clear();
1074 frame->render_passes_by_id.clear(); 1078 frame->render_passes_by_id.clear();
1075 frame->will_draw_layers.clear(); 1079 frame->will_draw_layers.clear();
1076 frame->has_no_damage = false; 1080 frame->has_no_damage = false;
1077 1081
1078 if (active_tree_->root_layer()) { 1082 if (active_tree_->root_layer()) {
1079 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_; 1083 gfx::Rect device_viewport_damage_rect = viewport_damage_rect_;
1080 viewport_damage_rect_ = gfx::Rect(); 1084 viewport_damage_rect_ = gfx::Rect();
1081 1085
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 active_tree_->top_controls_height()); 1812 active_tree_->top_controls_height());
1809 } 1813 }
1810 1814
1811 UpdateViewportContainerSizes(); 1815 UpdateViewportContainerSizes();
1812 } else { 1816 } else {
1813 active_tree_->ProcessUIResourceRequestQueue(); 1817 active_tree_->ProcessUIResourceRequestQueue();
1814 } 1818 }
1815 1819
1816 active_tree_->DidBecomeActive(); 1820 active_tree_->DidBecomeActive();
1817 ActivateAnimations(); 1821 ActivateAnimations();
1818 if (settings_.impl_side_painting) 1822 if (settings_.impl_side_painting) {
1819 client_->RenewTreePriority(); 1823 client_->RenewTreePriority();
1824 // If we have any picture layers, then by activating we also modified tile
1825 // priorities.
1826 if (!picture_layers_.empty())
1827 DidModifyTilePriorities();
1828 }
1820 1829
1821 client_->OnCanDrawStateChanged(CanDraw()); 1830 client_->OnCanDrawStateChanged(CanDraw());
1822 client_->DidActivateSyncTree(); 1831 client_->DidActivateSyncTree();
1823 if (!tree_activation_callback_.is_null()) 1832 if (!tree_activation_callback_.is_null())
1824 tree_activation_callback_.Run(); 1833 tree_activation_callback_.Run();
1825 1834
1826 if (debug_state_.continuous_painting) { 1835 if (debug_state_.continuous_painting) {
1827 const RenderingStats& stats = 1836 const RenderingStats& stats =
1828 rendering_stats_instrumentation_->GetRenderingStats(); 1837 rendering_stats_instrumentation_->GetRenderingStats();
1829 // TODO(hendrikw): This requires a different metric when we commit directly 1838 // TODO(hendrikw): This requires a different metric when we commit directly
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 pending_tree_->set_needs_update_draw_properties(); 1958 pending_tree_->set_needs_update_draw_properties();
1950 client_->UpdateRendererCapabilitiesOnImplThread(); 1959 client_->UpdateRendererCapabilitiesOnImplThread();
1951 } 1960 }
1952 1961
1953 void LayerTreeHostImpl::CreateAndSetTileManager() { 1962 void LayerTreeHostImpl::CreateAndSetTileManager() {
1954 DCHECK(!tile_manager_); 1963 DCHECK(!tile_manager_);
1955 DCHECK(settings_.impl_side_painting); 1964 DCHECK(settings_.impl_side_painting);
1956 DCHECK(output_surface_); 1965 DCHECK(output_surface_);
1957 DCHECK(resource_provider_); 1966 DCHECK(resource_provider_);
1958 1967
1968 rasterizer_ = CreateRasterizer();
1959 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, 1969 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_,
1960 &staging_resource_pool_); 1970 &staging_resource_pool_);
1961 DCHECK(tile_task_worker_pool_); 1971 DCHECK(tile_task_worker_pool_);
1962 DCHECK(resource_pool_); 1972 DCHECK(resource_pool_);
1963 1973
1964 base::SingleThreadTaskRunner* task_runner = 1974 base::SingleThreadTaskRunner* task_runner =
1965 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() 1975 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner()
1966 : proxy_->MainThreadTaskRunner(); 1976 : proxy_->MainThreadTaskRunner();
1967 DCHECK(task_runner); 1977 DCHECK(task_runner);
1968 size_t scheduled_raster_task_limit = 1978 size_t scheduled_raster_task_limit =
1969 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() 1979 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max()
1970 : settings_.scheduled_raster_task_limit; 1980 : settings_.scheduled_raster_task_limit;
1971 tile_manager_ = TileManager::Create( 1981 tile_manager_ =
1972 this, task_runner, resource_pool_.get(), 1982 TileManager::Create(this, task_runner, resource_pool_.get(),
1973 tile_task_worker_pool_->AsTileTaskRunner(), scheduled_raster_task_limit); 1983 tile_task_worker_pool_->AsTileTaskRunner(),
1984 rasterizer_.get(), scheduled_raster_task_limit);
1974 1985
1975 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); 1986 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
1976 } 1987 }
1977 1988
1989 scoped_ptr<Rasterizer> LayerTreeHostImpl::CreateRasterizer() {
1990 ContextProvider* context_provider = output_surface_->context_provider();
1991 if (use_gpu_rasterization_ && context_provider) {
1992 return GpuRasterizer::Create(context_provider, resource_provider_.get(),
1993 settings_.use_distance_field_text, false);
1994 }
1995 return SoftwareRasterizer::Create();
1996 }
1997
1978 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( 1998 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool(
1979 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, 1999 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool,
1980 scoped_ptr<ResourcePool>* resource_pool, 2000 scoped_ptr<ResourcePool>* resource_pool,
1981 scoped_ptr<ResourcePool>* staging_resource_pool) { 2001 scoped_ptr<ResourcePool>* staging_resource_pool) {
1982 base::SingleThreadTaskRunner* task_runner = 2002 base::SingleThreadTaskRunner* task_runner =
1983 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() 2003 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner()
1984 : proxy_->MainThreadTaskRunner(); 2004 : proxy_->MainThreadTaskRunner();
1985 DCHECK(task_runner); 2005 DCHECK(task_runner);
1986 2006
1987 ContextProvider* context_provider = output_surface_->context_provider(); 2007 ContextProvider* context_provider = output_surface_->context_provider();
1988 if (!context_provider) { 2008 if (!context_provider) {
1989 *resource_pool = 2009 *resource_pool =
1990 ResourcePool::Create(resource_provider_.get(), 2010 ResourcePool::Create(resource_provider_.get(),
1991 GL_TEXTURE_2D, 2011 GL_TEXTURE_2D,
1992 resource_provider_->best_texture_format()); 2012 resource_provider_->best_texture_format());
1993 2013
1994 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( 2014 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create(
1995 task_runner, TileTaskWorkerPool::GetTaskGraphRunner(), 2015 task_runner, TileTaskWorkerPool::GetTaskGraphRunner(),
1996 resource_provider_.get()); 2016 resource_provider_.get());
1997 return; 2017 return;
1998 } 2018 }
1999 2019
2000 if (use_gpu_rasterization_) { 2020 if (use_gpu_rasterization_) {
2001 *resource_pool = 2021 *resource_pool =
2002 ResourcePool::Create(resource_provider_.get(), 2022 ResourcePool::Create(resource_provider_.get(),
2003 GL_TEXTURE_2D, 2023 GL_TEXTURE_2D,
2004 resource_provider_->best_texture_format()); 2024 resource_provider_->best_texture_format());
2005 2025
2006 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( 2026 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create(
2007 task_runner, context_provider, resource_provider_.get(), 2027 task_runner, TileTaskWorkerPool::GetTaskGraphRunner());
2008 settings_.use_distance_field_text);
2009 return; 2028 return;
2010 } 2029 }
2011 2030
2012 if (GetRendererCapabilities().using_image) { 2031 if (GetRendererCapabilities().using_image) {
2013 unsigned image_target = settings_.use_image_texture_target; 2032 unsigned image_target = settings_.use_image_texture_target;
2014 DCHECK_IMPLIES( 2033 DCHECK_IMPLIES(
2015 image_target == GL_TEXTURE_RECTANGLE_ARB, 2034 image_target == GL_TEXTURE_RECTANGLE_ARB,
2016 context_provider->ContextCapabilities().gpu.texture_rectangle); 2035 context_provider->ContextCapabilities().gpu.texture_rectangle);
2017 DCHECK_IMPLIES( 2036 DCHECK_IMPLIES(
2018 image_target == GL_TEXTURE_EXTERNAL_OES, 2037 image_target == GL_TEXTURE_EXTERNAL_OES,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2063 resource_provider_.get(), 2082 resource_provider_.get(),
2064 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), 2083 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(),
2065 settings_.renderer_settings.refresh_rate)); 2084 settings_.renderer_settings.refresh_rate));
2066 } 2085 }
2067 2086
2068 void LayerTreeHostImpl::DestroyTileManager() { 2087 void LayerTreeHostImpl::DestroyTileManager() {
2069 tile_manager_ = nullptr; 2088 tile_manager_ = nullptr;
2070 resource_pool_ = nullptr; 2089 resource_pool_ = nullptr;
2071 staging_resource_pool_ = nullptr; 2090 staging_resource_pool_ = nullptr;
2072 tile_task_worker_pool_ = nullptr; 2091 tile_task_worker_pool_ = nullptr;
2092 rasterizer_ = nullptr;
2073 single_thread_synchronous_task_graph_runner_ = nullptr; 2093 single_thread_synchronous_task_graph_runner_ = nullptr;
2074 } 2094 }
2075 2095
2076 bool LayerTreeHostImpl::UsePendingTreeForSync() const { 2096 bool LayerTreeHostImpl::UsePendingTreeForSync() const {
2077 // In impl-side painting, synchronize to the pending tree so that it has 2097 // In impl-side painting, synchronize to the pending tree so that it has
2078 // time to raster before being displayed. 2098 // time to raster before being displayed.
2079 return settings_.impl_side_painting; 2099 return settings_.impl_side_painting;
2080 } 2100 }
2081 2101
2082 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { 2102 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const {
(...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after
3481 } 3501 }
3482 3502
3483 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3503 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3484 std::vector<PictureLayerImpl*>::iterator it = 3504 std::vector<PictureLayerImpl*>::iterator it =
3485 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3505 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3486 DCHECK(it != picture_layers_.end()); 3506 DCHECK(it != picture_layers_.end());
3487 picture_layers_.erase(it); 3507 picture_layers_.erase(it);
3488 } 3508 }
3489 3509
3490 } // namespace cc 3510 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698