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 |