| 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 |