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