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 1922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1996 pending_tree_->set_needs_update_draw_properties(); | 1995 pending_tree_->set_needs_update_draw_properties(); |
1997 client_->UpdateRendererCapabilitiesOnImplThread(); | 1996 client_->UpdateRendererCapabilitiesOnImplThread(); |
1998 } | 1997 } |
1999 | 1998 |
2000 void LayerTreeHostImpl::CreateAndSetTileManager() { | 1999 void LayerTreeHostImpl::CreateAndSetTileManager() { |
2001 DCHECK(!tile_manager_); | 2000 DCHECK(!tile_manager_); |
2002 DCHECK(settings_.impl_side_painting); | 2001 DCHECK(settings_.impl_side_painting); |
2003 DCHECK(output_surface_); | 2002 DCHECK(output_surface_); |
2004 DCHECK(resource_provider_); | 2003 DCHECK(resource_provider_); |
2005 | 2004 |
2006 rasterizer_ = CreateRasterizer(); | |
2007 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, | 2005 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_, |
2008 &staging_resource_pool_); | 2006 &staging_resource_pool_); |
2009 DCHECK(tile_task_worker_pool_); | 2007 DCHECK(tile_task_worker_pool_); |
2010 DCHECK(resource_pool_); | 2008 DCHECK(resource_pool_); |
2011 | 2009 |
2012 base::SingleThreadTaskRunner* task_runner = | 2010 base::SingleThreadTaskRunner* task_runner = |
2013 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2011 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
2014 : proxy_->MainThreadTaskRunner(); | 2012 : proxy_->MainThreadTaskRunner(); |
2015 DCHECK(task_runner); | 2013 DCHECK(task_runner); |
2016 size_t scheduled_raster_task_limit = | 2014 size_t scheduled_raster_task_limit = |
2017 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() | 2015 IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
2018 : settings_.scheduled_raster_task_limit; | 2016 : settings_.scheduled_raster_task_limit; |
2019 tile_manager_ = | 2017 tile_manager_ = TileManager::Create( |
2020 TileManager::Create(this, task_runner, resource_pool_.get(), | 2018 this, task_runner, resource_pool_.get(), |
2021 tile_task_worker_pool_->AsTileTaskRunner(), | 2019 tile_task_worker_pool_->AsTileTaskRunner(), scheduled_raster_task_limit); |
2022 rasterizer_.get(), scheduled_raster_task_limit); | |
2023 | 2020 |
2024 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2021 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
2025 } | 2022 } |
2026 | 2023 |
2027 scoped_ptr<Rasterizer> LayerTreeHostImpl::CreateRasterizer() { | |
2028 ContextProvider* context_provider = output_surface_->context_provider(); | |
2029 if (use_gpu_rasterization_ && context_provider) { | |
2030 return GpuRasterizer::Create(context_provider, resource_provider_.get(), | |
2031 settings_.use_distance_field_text, | |
2032 settings_.threaded_gpu_rasterization_enabled, | |
2033 settings_.gpu_rasterization_msaa_sample_count); | |
2034 } | |
2035 return SoftwareRasterizer::Create(); | |
2036 } | |
2037 | |
2038 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( | 2024 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool( |
2039 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, | 2025 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool, |
2040 scoped_ptr<ResourcePool>* resource_pool, | 2026 scoped_ptr<ResourcePool>* resource_pool, |
2041 scoped_ptr<ResourcePool>* staging_resource_pool) { | 2027 scoped_ptr<ResourcePool>* staging_resource_pool) { |
2042 base::SingleThreadTaskRunner* task_runner = | 2028 base::SingleThreadTaskRunner* task_runner = |
2043 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2029 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
2044 : proxy_->MainThreadTaskRunner(); | 2030 : proxy_->MainThreadTaskRunner(); |
2045 DCHECK(task_runner); | 2031 DCHECK(task_runner); |
2046 | 2032 |
2047 ContextProvider* context_provider = output_surface_->context_provider(); | 2033 ContextProvider* context_provider = output_surface_->context_provider(); |
(...skipping 13 matching lines...) Expand all Loading... |
2061 DCHECK(!single_thread_synchronous_task_graph_runner_); | 2047 DCHECK(!single_thread_synchronous_task_graph_runner_); |
2062 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); | 2048 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
2063 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | 2049 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
2064 } | 2050 } |
2065 | 2051 |
2066 if (use_gpu_rasterization_) { | 2052 if (use_gpu_rasterization_) { |
2067 *resource_pool = | 2053 *resource_pool = |
2068 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2054 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2069 | 2055 |
2070 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( | 2056 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( |
2071 task_runner, task_graph_runner, | 2057 task_runner, task_graph_runner, context_provider, |
2072 static_cast<GpuRasterizer*>(rasterizer_.get())); | 2058 resource_provider_.get(), settings_.use_distance_field_text, |
| 2059 settings_.gpu_rasterization_msaa_sample_count); |
2073 return; | 2060 return; |
2074 } | 2061 } |
2075 | 2062 |
2076 if (GetRendererCapabilities().using_image) { | 2063 if (GetRendererCapabilities().using_image) { |
2077 unsigned image_target = settings_.use_image_texture_target; | 2064 unsigned image_target = settings_.use_image_texture_target; |
2078 DCHECK_IMPLIES( | 2065 DCHECK_IMPLIES( |
2079 image_target == GL_TEXTURE_RECTANGLE_ARB, | 2066 image_target == GL_TEXTURE_RECTANGLE_ARB, |
2080 context_provider->ContextCapabilities().gpu.texture_rectangle); | 2067 context_provider->ContextCapabilities().gpu.texture_rectangle); |
2081 DCHECK_IMPLIES( | 2068 DCHECK_IMPLIES( |
2082 image_target == GL_TEXTURE_EXTERNAL_OES, | 2069 image_target == GL_TEXTURE_EXTERNAL_OES, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2132 base::TimeTicks end_time = expected_next_main_frame_args.frame_time; | 2119 base::TimeTicks end_time = expected_next_main_frame_args.frame_time; |
2133 frame_timing_tracker_->SaveMainFrameTimeStamps( | 2120 frame_timing_tracker_->SaveMainFrameTimeStamps( |
2134 request_ids, start_time, end_time, active_tree_->source_frame_number()); | 2121 request_ids, start_time, end_time, active_tree_->source_frame_number()); |
2135 } | 2122 } |
2136 | 2123 |
2137 void LayerTreeHostImpl::DestroyTileManager() { | 2124 void LayerTreeHostImpl::DestroyTileManager() { |
2138 tile_manager_ = nullptr; | 2125 tile_manager_ = nullptr; |
2139 resource_pool_ = nullptr; | 2126 resource_pool_ = nullptr; |
2140 staging_resource_pool_ = nullptr; | 2127 staging_resource_pool_ = nullptr; |
2141 tile_task_worker_pool_ = nullptr; | 2128 tile_task_worker_pool_ = nullptr; |
2142 rasterizer_ = nullptr; | |
2143 single_thread_synchronous_task_graph_runner_ = nullptr; | 2129 single_thread_synchronous_task_graph_runner_ = nullptr; |
2144 } | 2130 } |
2145 | 2131 |
2146 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { | 2132 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { |
2147 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; | 2133 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; |
2148 } | 2134 } |
2149 | 2135 |
2150 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2136 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
2151 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2137 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
2152 } | 2138 } |
(...skipping 1291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3444 new_target.SetToMin(layer_impl->MaxScrollOffset()); | 3430 new_target.SetToMin(layer_impl->MaxScrollOffset()); |
3445 | 3431 |
3446 curve->UpdateTarget( | 3432 curve->UpdateTarget( |
3447 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) | 3433 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) |
3448 .InSecondsF(), | 3434 .InSecondsF(), |
3449 new_target); | 3435 new_target); |
3450 | 3436 |
3451 return true; | 3437 return true; |
3452 } | 3438 } |
3453 } // namespace cc | 3439 } // namespace cc |
OLD | NEW |