| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 2178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2189 } | 2189 } |
| 2190 | 2190 |
| 2191 void LayerTreeHostImpl::CreateResourceAndRasterBufferProvider( | 2191 void LayerTreeHostImpl::CreateResourceAndRasterBufferProvider( |
| 2192 std::unique_ptr<RasterBufferProvider>* raster_buffer_provider, | 2192 std::unique_ptr<RasterBufferProvider>* raster_buffer_provider, |
| 2193 std::unique_ptr<ResourcePool>* resource_pool) { | 2193 std::unique_ptr<ResourcePool>* resource_pool) { |
| 2194 DCHECK(GetTaskRunner()); | 2194 DCHECK(GetTaskRunner()); |
| 2195 // TODO(vmpstr): Make this a DCHECK (or remove) when crbug.com/419086 is | 2195 // TODO(vmpstr): Make this a DCHECK (or remove) when crbug.com/419086 is |
| 2196 // resolved. | 2196 // resolved. |
| 2197 CHECK(resource_provider_); | 2197 CHECK(resource_provider_); |
| 2198 | 2198 |
| 2199 ContextProvider* context_provider = output_surface_->context_provider(); | 2199 ContextProvider* compositor_context_provider = |
| 2200 if (!context_provider) { | 2200 output_surface_->context_provider(); |
| 2201 if (!compositor_context_provider) { |
| 2201 *resource_pool = | 2202 *resource_pool = |
| 2202 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); | 2203 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); |
| 2203 | 2204 |
| 2204 *raster_buffer_provider = | 2205 *raster_buffer_provider = |
| 2205 BitmapRasterBufferProvider::Create(resource_provider_.get()); | 2206 BitmapRasterBufferProvider::Create(resource_provider_.get()); |
| 2206 return; | 2207 return; |
| 2207 } | 2208 } |
| 2208 | 2209 |
| 2210 ContextProvider* worker_context_provider = |
| 2211 output_surface_->worker_context_provider(); |
| 2209 if (use_gpu_rasterization_) { | 2212 if (use_gpu_rasterization_) { |
| 2210 DCHECK(resource_provider_->output_surface()->worker_context_provider()); | 2213 DCHECK(worker_context_provider); |
| 2211 | 2214 |
| 2212 *resource_pool = | 2215 *resource_pool = |
| 2213 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); | 2216 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); |
| 2214 | 2217 |
| 2215 int msaa_sample_count = use_msaa_ ? RequestedMSAASampleCount() : 0; | 2218 int msaa_sample_count = use_msaa_ ? RequestedMSAASampleCount() : 0; |
| 2216 | 2219 |
| 2217 *raster_buffer_provider = GpuRasterBufferProvider::Create( | 2220 *raster_buffer_provider = base::MakeUnique<GpuRasterBufferProvider>( |
| 2218 context_provider, resource_provider_.get(), | 2221 compositor_context_provider, worker_context_provider, |
| 2219 settings_.use_distance_field_text, msaa_sample_count); | 2222 resource_provider_.get(), settings_.use_distance_field_text, |
| 2223 msaa_sample_count); |
| 2220 return; | 2224 return; |
| 2221 } | 2225 } |
| 2222 | 2226 |
| 2223 DCHECK(GetRendererCapabilities().using_image); | 2227 DCHECK(GetRendererCapabilities().using_image); |
| 2224 | 2228 |
| 2225 bool use_zero_copy = settings_.use_zero_copy; | 2229 bool use_zero_copy = settings_.use_zero_copy; |
| 2226 // TODO(reveman): Remove this when mojo supports worker contexts. | 2230 // TODO(reveman): Remove this when mojo supports worker contexts. |
| 2227 // crbug.com/522440 | 2231 // crbug.com/522440 |
| 2228 if (!resource_provider_->output_surface()->worker_context_provider()) { | 2232 if (!worker_context_provider) { |
| 2229 LOG(ERROR) | 2233 LOG(ERROR) |
| 2230 << "Forcing zero-copy tile initialization as worker context is missing"; | 2234 << "Forcing zero-copy tile initialization as worker context is missing"; |
| 2231 use_zero_copy = true; | 2235 use_zero_copy = true; |
| 2232 } | 2236 } |
| 2233 | 2237 |
| 2234 if (use_zero_copy) { | 2238 if (use_zero_copy) { |
| 2235 *resource_pool = ResourcePool::CreateForGpuMemoryBufferResources( | 2239 *resource_pool = ResourcePool::CreateForGpuMemoryBufferResources( |
| 2236 resource_provider_.get(), GetTaskRunner()); | 2240 resource_provider_.get(), GetTaskRunner()); |
| 2237 | 2241 |
| 2238 *raster_buffer_provider = ZeroCopyRasterBufferProvider::Create( | 2242 *raster_buffer_provider = ZeroCopyRasterBufferProvider::Create( |
| 2239 resource_provider_.get(), | 2243 resource_provider_.get(), |
| 2240 settings_.renderer_settings.preferred_tile_format); | 2244 settings_.renderer_settings.preferred_tile_format); |
| 2241 return; | 2245 return; |
| 2242 } | 2246 } |
| 2243 | 2247 |
| 2244 *resource_pool = | 2248 *resource_pool = |
| 2245 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); | 2249 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); |
| 2246 | 2250 |
| 2247 const int max_copy_texture_chromium_size = | 2251 const int max_copy_texture_chromium_size = |
| 2248 context_provider->ContextCapabilities().max_copy_texture_chromium_size; | 2252 compositor_context_provider->ContextCapabilities() |
| 2253 .max_copy_texture_chromium_size; |
| 2249 | 2254 |
| 2250 *raster_buffer_provider = OneCopyRasterBufferProvider::Create( | 2255 *raster_buffer_provider = base::MakeUnique<OneCopyRasterBufferProvider>( |
| 2251 GetTaskRunner(), context_provider, resource_provider_.get(), | 2256 GetTaskRunner(), compositor_context_provider, worker_context_provider, |
| 2252 max_copy_texture_chromium_size, settings_.use_partial_raster, | 2257 resource_provider_.get(), max_copy_texture_chromium_size, |
| 2253 settings_.max_staging_buffer_usage_in_bytes, | 2258 settings_.use_partial_raster, settings_.max_staging_buffer_usage_in_bytes, |
| 2254 settings_.renderer_settings.preferred_tile_format); | 2259 settings_.renderer_settings.preferred_tile_format); |
| 2255 } | 2260 } |
| 2256 | 2261 |
| 2257 void LayerTreeHostImpl::SetLayerTreeMutator(LayerTreeMutator* mutator) { | 2262 void LayerTreeHostImpl::SetLayerTreeMutator(LayerTreeMutator* mutator) { |
| 2258 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), | 2263 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), |
| 2259 "LayerTreeHostImpl::SetLayerTreeMutator"); | 2264 "LayerTreeHostImpl::SetLayerTreeMutator"); |
| 2260 mutator_ = mutator; | 2265 mutator_ = mutator; |
| 2261 } | 2266 } |
| 2262 | 2267 |
| 2263 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() { | 2268 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2300 | 2305 |
| 2301 ReleaseOutputSurface(); | 2306 ReleaseOutputSurface(); |
| 2302 if (!output_surface->BindToClient(this)) { | 2307 if (!output_surface->BindToClient(this)) { |
| 2303 // Avoid recreating tree resources because we might not have enough | 2308 // Avoid recreating tree resources because we might not have enough |
| 2304 // information to do this yet (eg. we don't have a TileManager at this | 2309 // information to do this yet (eg. we don't have a TileManager at this |
| 2305 // point). | 2310 // point). |
| 2306 return false; | 2311 return false; |
| 2307 } | 2312 } |
| 2308 | 2313 |
| 2309 output_surface_ = output_surface; | 2314 output_surface_ = output_surface; |
| 2310 resource_provider_ = ResourceProvider::Create( | 2315 resource_provider_ = base::MakeUnique<ResourceProvider>( |
| 2311 output_surface_, shared_bitmap_manager_, gpu_memory_buffer_manager_, | 2316 output_surface_->context_provider(), shared_bitmap_manager_, |
| 2317 gpu_memory_buffer_manager_, |
| 2312 task_runner_provider_->blocking_main_thread_task_runner(), | 2318 task_runner_provider_->blocking_main_thread_task_runner(), |
| 2313 settings_.renderer_settings.highp_threshold_min, | 2319 settings_.renderer_settings.highp_threshold_min, |
| 2314 settings_.renderer_settings.texture_id_allocation_chunk_size, | 2320 settings_.renderer_settings.texture_id_allocation_chunk_size, |
| 2321 output_surface_->capabilities().delegated_sync_points_required, |
| 2315 settings_.renderer_settings.use_gpu_memory_buffer_resources, | 2322 settings_.renderer_settings.use_gpu_memory_buffer_resources, |
| 2316 settings_.use_image_texture_targets); | 2323 settings_.use_image_texture_targets); |
| 2317 | 2324 |
| 2318 CreateAndSetRenderer(); | 2325 CreateAndSetRenderer(); |
| 2319 | 2326 |
| 2320 // Since the new renderer may be capable of MSAA, update status here. | 2327 // Since the new renderer may be capable of MSAA, update status here. |
| 2321 UpdateGpuRasterizationStatus(); | 2328 UpdateGpuRasterizationStatus(); |
| 2322 | 2329 |
| 2323 CreateTileManagerResources(); | 2330 CreateTileManagerResources(); |
| 2324 RecreateTreeResources(); | 2331 RecreateTreeResources(); |
| (...skipping 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4005 const { | 4012 const { |
| 4006 return fixed_raster_scale_attempted_scale_change_history_.count() >= | 4013 return fixed_raster_scale_attempted_scale_change_history_.count() >= |
| 4007 kFixedRasterScaleAttemptedScaleChangeThreshold; | 4014 kFixedRasterScaleAttemptedScaleChangeThreshold; |
| 4008 } | 4015 } |
| 4009 | 4016 |
| 4010 void LayerTreeHostImpl::SetFixedRasterScaleAttemptedToChangeScale() { | 4017 void LayerTreeHostImpl::SetFixedRasterScaleAttemptedToChangeScale() { |
| 4011 fixed_raster_scale_attempted_scale_change_history_.set(0); | 4018 fixed_raster_scale_attempted_scale_change_history_.set(0); |
| 4012 } | 4019 } |
| 4013 | 4020 |
| 4014 } // namespace cc | 4021 } // namespace cc |
| OLD | NEW |