| 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 #include <map> | 9 #include <map> |
| 10 | 10 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 #include "cc/resources/eviction_tile_priority_queue.h" | 53 #include "cc/resources/eviction_tile_priority_queue.h" |
| 54 #include "cc/resources/gpu_rasterizer.h" | 54 #include "cc/resources/gpu_rasterizer.h" |
| 55 #include "cc/resources/gpu_tile_task_worker_pool.h" | 55 #include "cc/resources/gpu_tile_task_worker_pool.h" |
| 56 #include "cc/resources/memory_history.h" | 56 #include "cc/resources/memory_history.h" |
| 57 #include "cc/resources/one_copy_tile_task_worker_pool.h" | 57 #include "cc/resources/one_copy_tile_task_worker_pool.h" |
| 58 #include "cc/resources/picture_layer_tiling.h" | 58 #include "cc/resources/picture_layer_tiling.h" |
| 59 #include "cc/resources/pixel_buffer_tile_task_worker_pool.h" | 59 #include "cc/resources/pixel_buffer_tile_task_worker_pool.h" |
| 60 #include "cc/resources/prioritized_resource_manager.h" | 60 #include "cc/resources/prioritized_resource_manager.h" |
| 61 #include "cc/resources/raster_tile_priority_queue.h" | 61 #include "cc/resources/raster_tile_priority_queue.h" |
| 62 #include "cc/resources/resource_pool.h" | 62 #include "cc/resources/resource_pool.h" |
| 63 #include "cc/resources/software_rasterizer.h" | |
| 64 #include "cc/resources/texture_mailbox_deleter.h" | 63 #include "cc/resources/texture_mailbox_deleter.h" |
| 65 #include "cc/resources/tile_task_worker_pool.h" | 64 #include "cc/resources/tile_task_worker_pool.h" |
| 66 #include "cc/resources/ui_resource_bitmap.h" | 65 #include "cc/resources/ui_resource_bitmap.h" |
| 67 #include "cc/resources/zero_copy_tile_task_worker_pool.h" | 66 #include "cc/resources/zero_copy_tile_task_worker_pool.h" |
| 68 #include "cc/scheduler/delay_based_time_source.h" | 67 #include "cc/scheduler/delay_based_time_source.h" |
| 69 #include "cc/trees/damage_tracker.h" | 68 #include "cc/trees/damage_tracker.h" |
| 70 #include "cc/trees/latency_info_swap_promise_monitor.h" | 69 #include "cc/trees/latency_info_swap_promise_monitor.h" |
| 71 #include "cc/trees/layer_tree_host.h" | 70 #include "cc/trees/layer_tree_host.h" |
| 72 #include "cc/trees/layer_tree_host_common.h" | 71 #include "cc/trees/layer_tree_host_common.h" |
| 73 #include "cc/trees/layer_tree_impl.h" | 72 #include "cc/trees/layer_tree_impl.h" |
| (...skipping 1918 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1992 pending_tree_->set_needs_update_draw_properties(); | 1991 pending_tree_->set_needs_update_draw_properties(); |
| 1993 client_->UpdateRendererCapabilitiesOnImplThread(); | 1992 client_->UpdateRendererCapabilitiesOnImplThread(); |
| 1994 } | 1993 } |
| 1995 | 1994 |
| 1996 void LayerTreeHostImpl::CreateAndSetTileManager() { | 1995 void LayerTreeHostImpl::CreateAndSetTileManager() { |
| 1997 DCHECK(!tile_manager_); | 1996 DCHECK(!tile_manager_); |
| 1998 DCHECK(settings_.impl_side_painting); | 1997 DCHECK(settings_.impl_side_painting); |
| 1999 DCHECK(output_surface_); | 1998 DCHECK(output_surface_); |
| 2000 DCHECK(resource_provider_); | 1999 DCHECK(resource_provider_); |
| 2001 | 2000 |
| 2002 rasterizer_ = CreateRasterizer(); | |
| 2003 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, | 2001 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, |
| 2004 &staging_resource_pool_); | 2002 &staging_resource_pool_); |
| 2005 DCHECK(tile_task_worker_pool_); | 2003 DCHECK(tile_task_worker_pool_); |
| 2006 DCHECK(resource_pool_); | 2004 DCHECK(resource_pool_); |
| 2007 | 2005 |
| 2008 base::SingleThreadTaskRunner* task_runner = | 2006 base::SingleThreadTaskRunner* task_runner = |
| 2009 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2007 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2010 : proxy_->MainThreadTaskRunner(); | 2008 : proxy_->MainThreadTaskRunner(); |
| 2011 DCHECK(task_runner); | 2009 DCHECK(task_runner); |
| 2012 size_t scheduled_raster_task_limit = | 2010 size_t scheduled_raster_task_limit = |
| 2013 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() | 2011 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
| 2014 : settings_.scheduled_raster_task_limit; | 2012 : settings_.scheduled_raster_task_limit; |
| 2015 tile_manager_ = | 2013 tile_manager_ = TileManager::Create( |
| 2016 TileManager::Create(this, task_runner, resource_pool_.get(), | 2014 this, task_runner, resource_pool_.get(), |
| 2017 tile_task_worker_pool_->AsTileTaskRunner(), | 2015 tile_task_worker_pool_->AsTileTaskRunner(), scheduled_raster_task_limit); |
| 2018 rasterizer_.get(), scheduled_raster_task_limit); | |
| 2019 | 2016 |
| 2020 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2017 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 2021 } | 2018 } |
| 2022 | 2019 |
| 2023 scoped_ptr<Rasterizer> LayerTreeHostImpl::CreateRasterizer() { | |
| 2024 ContextProvider* context_provider = output_surface_->context_provider(); | |
| 2025 if (use_gpu_rasterization_ && context_provider) { | |
| 2026 return GpuRasterizer::Create(context_provider, resource_provider_.get(), | |
| 2027 settings_.use_distance_field_text, | |
| 2028 settings_.threaded_gpu_rasterization_enabled, | |
| 2029 settings_.gpu_rasterization_msaa_sample_count); | |
| 2030 } | |
| 2031 return SoftwareRasterizer::Create(); | |
| 2032 } | |
| 2033 | |
| 2034 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( | 2020 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( |
| 2035 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, | 2021 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, |
| 2036 scoped_ptr<ResourcePool>* resource_pool, | 2022 scoped_ptr<ResourcePool>* resource_pool, |
| 2037 scoped_ptr<ResourcePool>* staging_resource_pool) { | 2023 scoped_ptr<ResourcePool>* staging_resource_pool) { |
| 2038 base::SingleThreadTaskRunner* task_runner = | 2024 base::SingleThreadTaskRunner* task_runner = |
| 2039 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2025 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2040 : proxy_->MainThreadTaskRunner(); | 2026 : proxy_->MainThreadTaskRunner(); |
| 2041 DCHECK(task_runner); | 2027 DCHECK(task_runner); |
| 2042 | 2028 |
| 2043 ContextProvider* context_provider = output_surface_->context_provider(); | 2029 ContextProvider* context_provider = output_surface_->context_provider(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2057 DCHECK(!single_thread_synchronous_task_graph_runner_); | 2043 DCHECK(!single_thread_synchronous_task_graph_runner_); |
| 2058 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); | 2044 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
| 2059 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | 2045 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
| 2060 } | 2046 } |
| 2061 | 2047 |
| 2062 if (use_gpu_rasterization_) { | 2048 if (use_gpu_rasterization_) { |
| 2063 *resource_pool = | 2049 *resource_pool = |
| 2064 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2050 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
| 2065 | 2051 |
| 2066 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( | 2052 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( |
| 2067 task_runner, task_graph_runner, | 2053 task_runner, task_graph_runner, context_provider, |
| 2068 static_cast<GpuRasterizer*>(rasterizer_.get())); | 2054 resource_provider_.get(), settings_.use_distance_field_text, |
| 2055 settings_.gpu_rasterization_msaa_sample_count); |
| 2069 return; | 2056 return; |
| 2070 } | 2057 } |
| 2071 | 2058 |
| 2072 if (GetRendererCapabilities().using_image) { | 2059 if (GetRendererCapabilities().using_image) { |
| 2073 unsigned image_target = settings_.use_image_texture_target; | 2060 unsigned image_target = settings_.use_image_texture_target; |
| 2074 DCHECK_IMPLIES( | 2061 DCHECK_IMPLIES( |
| 2075 image_target == GL_TEXTURE_RECTANGLE_ARB, | 2062 image_target == GL_TEXTURE_RECTANGLE_ARB, |
| 2076 context_provider->ContextCapabilities().gpu.texture_rectangle); | 2063 context_provider->ContextCapabilities().gpu.texture_rectangle); |
| 2077 DCHECK_IMPLIES( | 2064 DCHECK_IMPLIES( |
| 2078 image_target == GL_TEXTURE_EXTERNAL_OES, | 2065 image_target == GL_TEXTURE_EXTERNAL_OES, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2114 resource_provider_.get(), | 2101 resource_provider_.get(), |
| 2115 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2102 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
| 2116 settings_.renderer_settings.refresh_rate)); | 2103 settings_.renderer_settings.refresh_rate)); |
| 2117 } | 2104 } |
| 2118 | 2105 |
| 2119 void LayerTreeHostImpl::DestroyTileManager() { | 2106 void LayerTreeHostImpl::DestroyTileManager() { |
| 2120 tile_manager_ = nullptr; | 2107 tile_manager_ = nullptr; |
| 2121 resource_pool_ = nullptr; | 2108 resource_pool_ = nullptr; |
| 2122 staging_resource_pool_ = nullptr; | 2109 staging_resource_pool_ = nullptr; |
| 2123 tile_task_worker_pool_ = nullptr; | 2110 tile_task_worker_pool_ = nullptr; |
| 2124 rasterizer_ = nullptr; | |
| 2125 single_thread_synchronous_task_graph_runner_ = nullptr; | 2111 single_thread_synchronous_task_graph_runner_ = nullptr; |
| 2126 } | 2112 } |
| 2127 | 2113 |
| 2128 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { | 2114 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { |
| 2129 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; | 2115 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; |
| 2130 } | 2116 } |
| 2131 | 2117 |
| 2132 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2118 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
| 2133 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2119 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
| 2134 } | 2120 } |
| (...skipping 1291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3426 new_target.SetToMin(layer_impl->MaxScrollOffset()); | 3412 new_target.SetToMin(layer_impl->MaxScrollOffset()); |
| 3427 | 3413 |
| 3428 curve->UpdateTarget( | 3414 curve->UpdateTarget( |
| 3429 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) | 3415 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) |
| 3430 .InSecondsF(), | 3416 .InSecondsF(), |
| 3431 new_target); | 3417 new_target); |
| 3432 | 3418 |
| 3433 return true; | 3419 return true; |
| 3434 } | 3420 } |
| 3435 } // namespace cc | 3421 } // namespace cc |
| OLD | NEW |