| 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 #include <set> | 10 #include <set> |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 #include "cc/trees/layer_tree_host_common.h" | 73 #include "cc/trees/layer_tree_host_common.h" |
| 74 #include "cc/trees/layer_tree_impl.h" | 74 #include "cc/trees/layer_tree_impl.h" |
| 75 #include "cc/trees/single_thread_proxy.h" | 75 #include "cc/trees/single_thread_proxy.h" |
| 76 #include "cc/trees/tree_synchronizer.h" | 76 #include "cc/trees/tree_synchronizer.h" |
| 77 #include "gpu/GLES2/gl2extchromium.h" | 77 #include "gpu/GLES2/gl2extchromium.h" |
| 78 #include "gpu/command_buffer/client/gles2_interface.h" | 78 #include "gpu/command_buffer/client/gles2_interface.h" |
| 79 #include "ui/gfx/geometry/rect_conversions.h" | 79 #include "ui/gfx/geometry/rect_conversions.h" |
| 80 #include "ui/gfx/geometry/scroll_offset.h" | 80 #include "ui/gfx/geometry/scroll_offset.h" |
| 81 #include "ui/gfx/geometry/size_conversions.h" | 81 #include "ui/gfx/geometry/size_conversions.h" |
| 82 #include "ui/gfx/geometry/vector2d_conversions.h" | 82 #include "ui/gfx/geometry/vector2d_conversions.h" |
| 83 #include "ui/gfx/gpu_memory_buffer.h" |
| 83 | 84 |
| 84 namespace cc { | 85 namespace cc { |
| 85 namespace { | 86 namespace { |
| 86 | 87 |
| 87 // Small helper class that saves the current viewport location as the user sees | 88 // Small helper class that saves the current viewport location as the user sees |
| 88 // it and resets to the same location. | 89 // it and resets to the same location. |
| 89 class ViewportAnchor { | 90 class ViewportAnchor { |
| 90 public: | 91 public: |
| 91 ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll) | 92 ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll) |
| 92 : inner_(inner_scroll), | 93 : inner_(inner_scroll), |
| (...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2096 // if we're in synchronous single-threaded mode. | 2097 // if we're in synchronous single-threaded mode. |
| 2097 TaskGraphRunner* task_graph_runner = task_graph_runner_; | 2098 TaskGraphRunner* task_graph_runner = task_graph_runner_; |
| 2098 if (is_synchronous_single_threaded_) { | 2099 if (is_synchronous_single_threaded_) { |
| 2099 DCHECK(!single_thread_synchronous_task_graph_runner_); | 2100 DCHECK(!single_thread_synchronous_task_graph_runner_); |
| 2100 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); | 2101 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
| 2101 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | 2102 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
| 2102 } | 2103 } |
| 2103 | 2104 |
| 2104 ContextProvider* context_provider = output_surface_->context_provider(); | 2105 ContextProvider* context_provider = output_surface_->context_provider(); |
| 2105 if (!context_provider) { | 2106 if (!context_provider) { |
| 2106 *resource_pool = | 2107 *resource_pool = ResourcePool::Create( |
| 2107 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2108 resource_provider_.get(), |
| 2109 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1, |
| 2110 GL_TEXTURE_2D)); |
| 2108 | 2111 |
| 2109 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( | 2112 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( |
| 2110 GetTaskRunner(), task_graph_runner, resource_provider_.get()); | 2113 GetTaskRunner(), task_graph_runner, resource_provider_.get()); |
| 2111 return; | 2114 return; |
| 2112 } | 2115 } |
| 2113 | 2116 |
| 2114 if (use_gpu_rasterization_) { | 2117 if (use_gpu_rasterization_) { |
| 2115 *resource_pool = | 2118 *resource_pool = ResourcePool::Create( |
| 2116 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2119 resource_provider_.get(), |
| 2120 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1, |
| 2121 GL_TEXTURE_2D)); |
| 2117 | 2122 |
| 2118 int msaa_sample_count = | 2123 int msaa_sample_count = |
| 2119 use_msaa_ ? settings_.gpu_rasterization_msaa_sample_count : 0; | 2124 use_msaa_ ? settings_.gpu_rasterization_msaa_sample_count : 0; |
| 2120 | 2125 |
| 2121 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( | 2126 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( |
| 2122 GetTaskRunner(), task_graph_runner, context_provider, | 2127 GetTaskRunner(), task_graph_runner, context_provider, |
| 2123 resource_provider_.get(), settings_.use_distance_field_text, | 2128 resource_provider_.get(), settings_.use_distance_field_text, |
| 2124 msaa_sample_count); | 2129 msaa_sample_count); |
| 2125 return; | 2130 return; |
| 2126 } | 2131 } |
| 2127 | 2132 |
| 2128 DCHECK(GetRendererCapabilities().using_image); | 2133 DCHECK(GetRendererCapabilities().using_image); |
| 2129 unsigned image_target = settings_.use_image_texture_target; | 2134 std::vector<uint> image_targets = settings_.use_image_texture_targets; |
| 2130 DCHECK_IMPLIES(image_target == GL_TEXTURE_RECTANGLE_ARB, | |
| 2131 context_provider->ContextCapabilities().gpu.texture_rectangle); | |
| 2132 DCHECK_IMPLIES( | |
| 2133 image_target == GL_TEXTURE_EXTERNAL_OES, | |
| 2134 context_provider->ContextCapabilities().gpu.egl_image_external); | |
| 2135 | 2135 |
| 2136 if (settings_.use_zero_copy) { | 2136 if (settings_.use_zero_copy) { |
| 2137 *resource_pool = | 2137 *resource_pool = |
| 2138 ResourcePool::Create(resource_provider_.get(), image_target); | 2138 ResourcePool::Create(resource_provider_.get(), image_targets); |
| 2139 | 2139 |
| 2140 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( | 2140 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( |
| 2141 GetTaskRunner(), task_graph_runner, resource_provider_.get()); | 2141 GetTaskRunner(), task_graph_runner, resource_provider_.get()); |
| 2142 return; | 2142 return; |
| 2143 } | 2143 } |
| 2144 | 2144 |
| 2145 if (settings_.use_one_copy) { | 2145 if (settings_.use_one_copy) { |
| 2146 // Synchronous single-threaded mode depends on tiles being ready to | 2146 // Synchronous single-threaded mode depends on tiles being ready to |
| 2147 // draw when raster is complete. Therefore, it must use one of zero | 2147 // draw when raster is complete. Therefore, it must use one of zero |
| 2148 // copy, software raster, or GPU raster. | 2148 // copy, software raster, or GPU raster. |
| 2149 DCHECK(!is_synchronous_single_threaded_); | 2149 DCHECK(!is_synchronous_single_threaded_); |
| 2150 | 2150 |
| 2151 // We need to create a staging resource pool when using copy rasterizer. | 2151 // We need to create a staging resource pool when using copy rasterizer. |
| 2152 *staging_resource_pool = | 2152 *staging_resource_pool = |
| 2153 ResourcePool::Create(resource_provider_.get(), image_target); | 2153 ResourcePool::Create(resource_provider_.get(), image_targets); |
| 2154 *resource_pool = | 2154 *resource_pool = ResourcePool::Create( |
| 2155 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); | 2155 resource_provider_.get(), |
| 2156 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1, |
| 2157 GL_TEXTURE_2D)); |
| 2156 | 2158 |
| 2157 int max_copy_texture_chromium_size = | 2159 int max_copy_texture_chromium_size = |
| 2158 context_provider->ContextCapabilities() | 2160 context_provider->ContextCapabilities() |
| 2159 .gpu.max_copy_texture_chromium_size; | 2161 .gpu.max_copy_texture_chromium_size; |
| 2160 | 2162 |
| 2161 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( | 2163 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( |
| 2162 GetTaskRunner(), task_graph_runner, context_provider, | 2164 GetTaskRunner(), task_graph_runner, context_provider, |
| 2163 resource_provider_.get(), staging_resource_pool_.get(), | 2165 resource_provider_.get(), staging_resource_pool_.get(), |
| 2164 max_copy_texture_chromium_size, | 2166 max_copy_texture_chromium_size, |
| 2165 settings_.use_persistent_map_for_gpu_memory_buffers); | 2167 settings_.use_persistent_map_for_gpu_memory_buffers); |
| 2166 return; | 2168 return; |
| 2167 } | 2169 } |
| 2168 | 2170 |
| 2169 // Synchronous single-threaded mode depends on tiles being ready to | 2171 // Synchronous single-threaded mode depends on tiles being ready to |
| 2170 // draw when raster is complete. Therefore, it must use one of zero | 2172 // draw when raster is complete. Therefore, it must use one of zero |
| 2171 // copy, software raster, or GPU raster (in the branches above). | 2173 // copy, software raster, or GPU raster (in the branches above). |
| 2172 DCHECK(!is_synchronous_single_threaded_); | 2174 DCHECK(!is_synchronous_single_threaded_); |
| 2173 | 2175 |
| 2174 *resource_pool = ResourcePool::Create( | 2176 *resource_pool = ResourcePool::Create( |
| 2175 resource_provider_.get(), GL_TEXTURE_2D); | 2177 resource_provider_.get(), |
| 2178 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1, GL_TEXTURE_2D)); |
| 2176 | 2179 |
| 2177 *tile_task_worker_pool = PixelBufferTileTaskWorkerPool::Create( | 2180 *tile_task_worker_pool = PixelBufferTileTaskWorkerPool::Create( |
| 2178 GetTaskRunner(), task_graph_runner_, context_provider, | 2181 GetTaskRunner(), task_graph_runner_, context_provider, |
| 2179 resource_provider_.get(), | 2182 resource_provider_.get(), |
| 2180 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2183 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
| 2181 settings_.renderer_settings.refresh_rate)); | 2184 settings_.renderer_settings.refresh_rate)); |
| 2182 } | 2185 } |
| 2183 | 2186 |
| 2184 void LayerTreeHostImpl::RecordMainFrameTiming( | 2187 void LayerTreeHostImpl::RecordMainFrameTiming( |
| 2185 const BeginFrameArgs& start_of_main_frame_args, | 2188 const BeginFrameArgs& start_of_main_frame_args, |
| (...skipping 1421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3607 if (active_tree()) { | 3610 if (active_tree()) { |
| 3608 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); | 3611 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); |
| 3609 if (layer) | 3612 if (layer) |
| 3610 return layer->ScrollOffsetForAnimation(); | 3613 return layer->ScrollOffsetForAnimation(); |
| 3611 } | 3614 } |
| 3612 | 3615 |
| 3613 return gfx::ScrollOffset(); | 3616 return gfx::ScrollOffset(); |
| 3614 } | 3617 } |
| 3615 | 3618 |
| 3616 } // namespace cc | 3619 } // namespace cc |
| OLD | NEW |