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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 | 162 |
163 LayerTreeHostImpl::FrameData::~FrameData() {} | 163 LayerTreeHostImpl::FrameData::~FrameData() {} |
164 | 164 |
165 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( | 165 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( |
166 const LayerTreeSettings& settings, | 166 const LayerTreeSettings& settings, |
167 LayerTreeHostImplClient* client, | 167 LayerTreeHostImplClient* client, |
168 Proxy* proxy, | 168 Proxy* proxy, |
169 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 169 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
170 SharedBitmapManager* shared_bitmap_manager, | 170 SharedBitmapManager* shared_bitmap_manager, |
171 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 171 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| 172 TaskGraphRunner* task_graph_runner, |
172 int id) { | 173 int id) { |
173 return make_scoped_ptr(new LayerTreeHostImpl(settings, | 174 return make_scoped_ptr(new LayerTreeHostImpl( |
174 client, | 175 settings, client, proxy, rendering_stats_instrumentation, |
175 proxy, | 176 shared_bitmap_manager, gpu_memory_buffer_manager, task_graph_runner, id)); |
176 rendering_stats_instrumentation, | |
177 shared_bitmap_manager, | |
178 gpu_memory_buffer_manager, | |
179 id)); | |
180 } | 177 } |
181 | 178 |
182 LayerTreeHostImpl::LayerTreeHostImpl( | 179 LayerTreeHostImpl::LayerTreeHostImpl( |
183 const LayerTreeSettings& settings, | 180 const LayerTreeSettings& settings, |
184 LayerTreeHostImplClient* client, | 181 LayerTreeHostImplClient* client, |
185 Proxy* proxy, | 182 Proxy* proxy, |
186 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 183 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
187 SharedBitmapManager* shared_bitmap_manager, | 184 SharedBitmapManager* shared_bitmap_manager, |
188 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 185 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| 186 TaskGraphRunner* task_graph_runner, |
189 int id) | 187 int id) |
190 : client_(client), | 188 : client_(client), |
191 proxy_(proxy), | 189 proxy_(proxy), |
192 use_gpu_rasterization_(false), | 190 use_gpu_rasterization_(false), |
193 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE), | 191 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE), |
194 input_handler_client_(NULL), | 192 input_handler_client_(NULL), |
195 did_lock_scrolling_layer_(false), | 193 did_lock_scrolling_layer_(false), |
196 should_bubble_scrolls_(false), | 194 should_bubble_scrolls_(false), |
197 wheel_scrolling_(false), | 195 wheel_scrolling_(false), |
198 scroll_affects_scroll_handler_(false), | 196 scroll_affects_scroll_handler_(false), |
(...skipping 18 matching lines...) Expand all Loading... |
217 max_memory_needed_bytes_(0), | 215 max_memory_needed_bytes_(0), |
218 zero_budget_(false), | 216 zero_budget_(false), |
219 device_scale_factor_(1.f), | 217 device_scale_factor_(1.f), |
220 resourceless_software_draw_(false), | 218 resourceless_software_draw_(false), |
221 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), | 219 begin_impl_frame_interval_(BeginFrameArgs::DefaultInterval()), |
222 animation_registrar_(AnimationRegistrar::Create()), | 220 animation_registrar_(AnimationRegistrar::Create()), |
223 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 221 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
224 micro_benchmark_controller_(this), | 222 micro_benchmark_controller_(this), |
225 shared_bitmap_manager_(shared_bitmap_manager), | 223 shared_bitmap_manager_(shared_bitmap_manager), |
226 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), | 224 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
| 225 task_graph_runner_(task_graph_runner), |
227 id_(id), | 226 id_(id), |
228 requires_high_res_to_draw_(false), | 227 requires_high_res_to_draw_(false), |
229 is_likely_to_require_a_draw_(false), | 228 is_likely_to_require_a_draw_(false), |
230 frame_timing_tracker_(FrameTimingTracker::Create()) { | 229 frame_timing_tracker_(FrameTimingTracker::Create()) { |
231 DCHECK(proxy_->IsImplThread()); | 230 DCHECK(proxy_->IsImplThread()); |
232 DidVisibilityChange(this, visible_); | 231 DidVisibilityChange(this, visible_); |
233 animation_registrar_->set_supports_scroll_animations( | 232 animation_registrar_->set_supports_scroll_animations( |
234 proxy_->SupportsImplScrolling()); | 233 proxy_->SupportsImplScrolling()); |
235 | 234 |
236 SetDebugState(settings.initial_debug_state); | 235 SetDebugState(settings.initial_debug_state); |
(...skipping 1787 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2024 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2023 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
2025 : proxy_->MainThreadTaskRunner(); | 2024 : proxy_->MainThreadTaskRunner(); |
2026 DCHECK(task_runner); | 2025 DCHECK(task_runner); |
2027 | 2026 |
2028 ContextProvider* context_provider = output_surface_->context_provider(); | 2027 ContextProvider* context_provider = output_surface_->context_provider(); |
2029 if (!context_provider) { | 2028 if (!context_provider) { |
2030 *resource_pool = | 2029 *resource_pool = |
2031 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2030 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2032 | 2031 |
2033 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( | 2032 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( |
2034 task_runner, TileTaskWorkerPool::GetTaskGraphRunner(), | 2033 task_runner, task_graph_runner_, resource_provider_.get()); |
2035 resource_provider_.get()); | |
2036 return; | 2034 return; |
2037 } | 2035 } |
2038 | 2036 |
2039 if (use_gpu_rasterization_) { | 2037 if (use_gpu_rasterization_) { |
2040 *resource_pool = | 2038 *resource_pool = |
2041 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2039 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2042 | 2040 |
2043 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( | 2041 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( |
2044 task_runner, TileTaskWorkerPool::GetTaskGraphRunner(), | 2042 task_runner, task_graph_runner_, |
2045 static_cast<GpuRasterizer*>(rasterizer_.get())); | 2043 static_cast<GpuRasterizer*>(rasterizer_.get())); |
2046 return; | 2044 return; |
2047 } | 2045 } |
2048 | 2046 |
2049 if (GetRendererCapabilities().using_image) { | 2047 if (GetRendererCapabilities().using_image) { |
2050 unsigned image_target = settings_.use_image_texture_target; | 2048 unsigned image_target = settings_.use_image_texture_target; |
2051 DCHECK_IMPLIES( | 2049 DCHECK_IMPLIES( |
2052 image_target == GL_TEXTURE_RECTANGLE_ARB, | 2050 image_target == GL_TEXTURE_RECTANGLE_ARB, |
2053 context_provider->ContextCapabilities().gpu.texture_rectangle); | 2051 context_provider->ContextCapabilities().gpu.texture_rectangle); |
2054 DCHECK_IMPLIES( | 2052 DCHECK_IMPLIES( |
2055 image_target == GL_TEXTURE_EXTERNAL_OES, | 2053 image_target == GL_TEXTURE_EXTERNAL_OES, |
2056 context_provider->ContextCapabilities().gpu.egl_image_external); | 2054 context_provider->ContextCapabilities().gpu.egl_image_external); |
2057 | 2055 |
2058 if (settings_.use_zero_copy || IsSynchronousSingleThreaded()) { | 2056 if (settings_.use_zero_copy || IsSynchronousSingleThreaded()) { |
2059 *resource_pool = | 2057 *resource_pool = |
2060 ResourcePool::Create(resource_provider_.get(), image_target); | 2058 ResourcePool::Create(resource_provider_.get(), image_target); |
2061 | 2059 |
2062 TaskGraphRunner* task_graph_runner; | 2060 TaskGraphRunner* task_graph_runner; |
2063 if (IsSynchronousSingleThreaded()) { | 2061 if (IsSynchronousSingleThreaded()) { |
2064 DCHECK(!single_thread_synchronous_task_graph_runner_); | 2062 DCHECK(!single_thread_synchronous_task_graph_runner_); |
2065 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); | 2063 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
2066 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | 2064 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
2067 } else { | 2065 } else { |
2068 task_graph_runner = TileTaskWorkerPool::GetTaskGraphRunner(); | 2066 task_graph_runner = task_graph_runner_; |
2069 } | 2067 } |
2070 | 2068 |
2071 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( | 2069 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( |
2072 task_runner, task_graph_runner, resource_provider_.get()); | 2070 task_runner, task_graph_runner, resource_provider_.get()); |
2073 return; | 2071 return; |
2074 } | 2072 } |
2075 | 2073 |
2076 if (settings_.use_one_copy) { | 2074 if (settings_.use_one_copy) { |
2077 // We need to create a staging resource pool when using copy rasterizer. | 2075 // We need to create a staging resource pool when using copy rasterizer. |
2078 *staging_resource_pool = | 2076 *staging_resource_pool = |
2079 ResourcePool::Create(resource_provider_.get(), image_target); | 2077 ResourcePool::Create(resource_provider_.get(), image_target); |
2080 *resource_pool = | 2078 *resource_pool = |
2081 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2079 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); |
2082 | 2080 |
2083 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( | 2081 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( |
2084 task_runner, TileTaskWorkerPool::GetTaskGraphRunner(), | 2082 task_runner, task_graph_runner_, context_provider, |
2085 context_provider, resource_provider_.get(), | 2083 resource_provider_.get(), staging_resource_pool_.get()); |
2086 staging_resource_pool_.get()); | |
2087 return; | 2084 return; |
2088 } | 2085 } |
2089 } | 2086 } |
2090 | 2087 |
2091 // Synchronous single-threaded mode depends on tiles being ready to | 2088 // Synchronous single-threaded mode depends on tiles being ready to |
2092 // draw when raster is complete. Therefore, it must use one of zero | 2089 // draw when raster is complete. Therefore, it must use one of zero |
2093 // copy, software raster, or GPU raster (in the branches above). | 2090 // copy, software raster, or GPU raster (in the branches above). |
2094 DCHECK(!IsSynchronousSingleThreaded()); | 2091 DCHECK(!IsSynchronousSingleThreaded()); |
2095 | 2092 |
2096 *resource_pool = ResourcePool::Create( | 2093 *resource_pool = ResourcePool::Create( |
2097 resource_provider_.get(), GL_TEXTURE_2D); | 2094 resource_provider_.get(), GL_TEXTURE_2D); |
2098 | 2095 |
2099 *tile_task_worker_pool = PixelBufferTileTaskWorkerPool::Create( | 2096 *tile_task_worker_pool = PixelBufferTileTaskWorkerPool::Create( |
2100 task_runner, TileTaskWorkerPool::GetTaskGraphRunner(), context_provider, | 2097 task_runner, task_graph_runner_, context_provider, |
2101 resource_provider_.get(), | 2098 resource_provider_.get(), |
2102 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2099 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
2103 settings_.renderer_settings.refresh_rate)); | 2100 settings_.renderer_settings.refresh_rate)); |
2104 } | 2101 } |
2105 | 2102 |
2106 void LayerTreeHostImpl::DestroyTileManager() { | 2103 void LayerTreeHostImpl::DestroyTileManager() { |
2107 tile_manager_ = nullptr; | 2104 tile_manager_ = nullptr; |
2108 resource_pool_ = nullptr; | 2105 resource_pool_ = nullptr; |
2109 staging_resource_pool_ = nullptr; | 2106 staging_resource_pool_ = nullptr; |
2110 tile_task_worker_pool_ = nullptr; | 2107 tile_task_worker_pool_ = nullptr; |
(...skipping 1356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3467 new_target.SetToMin(layer_impl->MaxScrollOffset()); | 3464 new_target.SetToMin(layer_impl->MaxScrollOffset()); |
3468 | 3465 |
3469 curve->UpdateTarget( | 3466 curve->UpdateTarget( |
3470 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) | 3467 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) |
3471 .InSecondsF(), | 3468 .InSecondsF(), |
3472 new_target); | 3469 new_target); |
3473 | 3470 |
3474 return true; | 3471 return true; |
3475 } | 3472 } |
3476 } // namespace cc | 3473 } // namespace cc |
OLD | NEW |