Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 1910213005: cc: Refactor TileTaskWorkerPool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@task_states
Patch Set: feedback Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 #include "cc/output/compositor_frame_metadata.h" 56 #include "cc/output/compositor_frame_metadata.h"
57 #include "cc/output/copy_output_request.h" 57 #include "cc/output/copy_output_request.h"
58 #include "cc/output/delegating_renderer.h" 58 #include "cc/output/delegating_renderer.h"
59 #include "cc/output/gl_renderer.h" 59 #include "cc/output/gl_renderer.h"
60 #include "cc/output/software_renderer.h" 60 #include "cc/output/software_renderer.h"
61 #include "cc/output/texture_mailbox_deleter.h" 61 #include "cc/output/texture_mailbox_deleter.h"
62 #include "cc/quads/render_pass_draw_quad.h" 62 #include "cc/quads/render_pass_draw_quad.h"
63 #include "cc/quads/shared_quad_state.h" 63 #include "cc/quads/shared_quad_state.h"
64 #include "cc/quads/solid_color_draw_quad.h" 64 #include "cc/quads/solid_color_draw_quad.h"
65 #include "cc/quads/texture_draw_quad.h" 65 #include "cc/quads/texture_draw_quad.h"
66 #include "cc/raster/bitmap_tile_task_worker_pool.h" 66 #include "cc/raster/bitmap_raster_buffer_provider.h"
67 #include "cc/raster/gpu_raster_buffer_provider.h"
67 #include "cc/raster/gpu_rasterizer.h" 68 #include "cc/raster/gpu_rasterizer.h"
68 #include "cc/raster/gpu_tile_task_worker_pool.h" 69 #include "cc/raster/one_copy_raster_buffer_provider.h"
69 #include "cc/raster/one_copy_tile_task_worker_pool.h" 70 #include "cc/raster/raster_buffer_provider.h"
70 #include "cc/raster/synchronous_task_graph_runner.h" 71 #include "cc/raster/synchronous_task_graph_runner.h"
71 #include "cc/raster/tile_task_worker_pool.h" 72 #include "cc/raster/zero_copy_raster_buffer_provider.h"
72 #include "cc/raster/zero_copy_tile_task_worker_pool.h"
73 #include "cc/resources/memory_history.h" 73 #include "cc/resources/memory_history.h"
74 #include "cc/resources/resource_pool.h" 74 #include "cc/resources/resource_pool.h"
75 #include "cc/resources/ui_resource_bitmap.h" 75 #include "cc/resources/ui_resource_bitmap.h"
76 #include "cc/scheduler/delay_based_time_source.h" 76 #include "cc/scheduler/delay_based_time_source.h"
77 #include "cc/tiles/eviction_tile_priority_queue.h" 77 #include "cc/tiles/eviction_tile_priority_queue.h"
78 #include "cc/tiles/gpu_image_decode_controller.h" 78 #include "cc/tiles/gpu_image_decode_controller.h"
79 #include "cc/tiles/picture_layer_tiling.h" 79 #include "cc/tiles/picture_layer_tiling.h"
80 #include "cc/tiles/raster_tile_priority_queue.h" 80 #include "cc/tiles/raster_tile_priority_queue.h"
81 #include "cc/tiles/software_image_decode_controller.h" 81 #include "cc/tiles/software_image_decode_controller.h"
82 #include "cc/tiles/tile_task_manager.h"
82 #include "cc/trees/damage_tracker.h" 83 #include "cc/trees/damage_tracker.h"
83 #include "cc/trees/draw_property_utils.h" 84 #include "cc/trees/draw_property_utils.h"
84 #include "cc/trees/latency_info_swap_promise_monitor.h" 85 #include "cc/trees/latency_info_swap_promise_monitor.h"
85 #include "cc/trees/layer_tree_host.h" 86 #include "cc/trees/layer_tree_host.h"
86 #include "cc/trees/layer_tree_host_common.h" 87 #include "cc/trees/layer_tree_host_common.h"
87 #include "cc/trees/layer_tree_impl.h" 88 #include "cc/trees/layer_tree_impl.h"
88 #include "cc/trees/single_thread_proxy.h" 89 #include "cc/trees/single_thread_proxy.h"
89 #include "cc/trees/tree_synchronizer.h" 90 #include "cc/trees/tree_synchronizer.h"
90 #include "gpu/GLES2/gl2extchromium.h" 91 #include "gpu/GLES2/gl2extchromium.h"
91 #include "gpu/command_buffer/client/gles2_interface.h" 92 #include "gpu/command_buffer/client/gles2_interface.h"
(...skipping 2052 matching lines...) Expand 10 before | Expand all | Expand 10 after
2144 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be 2145 // See note in LayerTreeImpl::UpdateDrawProperties. Renderer needs to be
2145 // initialized to get max texture size. Also, after releasing resources, 2146 // initialized to get max texture size. Also, after releasing resources,
2146 // trees need another update to generate new ones. 2147 // trees need another update to generate new ones.
2147 active_tree_->set_needs_update_draw_properties(); 2148 active_tree_->set_needs_update_draw_properties();
2148 if (pending_tree_) 2149 if (pending_tree_)
2149 pending_tree_->set_needs_update_draw_properties(); 2150 pending_tree_->set_needs_update_draw_properties();
2150 client_->UpdateRendererCapabilitiesOnImplThread(); 2151 client_->UpdateRendererCapabilitiesOnImplThread();
2151 } 2152 }
2152 2153
2153 void LayerTreeHostImpl::CreateTileManagerResources() { 2154 void LayerTreeHostImpl::CreateTileManagerResources() {
2154 CreateResourceAndTileTaskWorkerPool(&tile_task_worker_pool_, &resource_pool_); 2155 std::unique_ptr<RasterBufferProvider> raster_buffer_provider;
2156 CreateResourceAndRasterBufferProvider(&raster_buffer_provider,
2157 &resource_pool_);
2155 2158
2156 if (use_gpu_rasterization_) { 2159 if (use_gpu_rasterization_) {
2157 image_decode_controller_ = base::WrapUnique(new GpuImageDecodeController( 2160 image_decode_controller_ = base::WrapUnique(new GpuImageDecodeController(
2158 output_surface_->worker_context_provider(), 2161 output_surface_->worker_context_provider(),
2159 settings_.renderer_settings.preferred_tile_format)); 2162 settings_.renderer_settings.preferred_tile_format));
2160 } else { 2163 } else {
2161 image_decode_controller_ = 2164 image_decode_controller_ =
2162 base::WrapUnique(new SoftwareImageDecodeController( 2165 base::WrapUnique(new SoftwareImageDecodeController(
2163 settings_.renderer_settings.preferred_tile_format)); 2166 settings_.renderer_settings.preferred_tile_format));
2164 } 2167 }
2165 2168
2166 // TODO(vmpstr): Initialize tile task limit at ctor time.
2167 tile_manager_->SetResources(
2168 resource_pool_.get(), tile_task_worker_pool_.get(),
2169 image_decode_controller_.get(),
2170 is_synchronous_single_threaded_ ? std::numeric_limits<size_t>::max()
2171 : settings_.scheduled_raster_task_limit,
2172 use_gpu_rasterization_);
2173 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
2174 }
2175
2176 void LayerTreeHostImpl::CreateResourceAndTileTaskWorkerPool(
2177 std::unique_ptr<TileTaskWorkerPool>* tile_task_worker_pool,
2178 std::unique_ptr<ResourcePool>* resource_pool) {
2179 DCHECK(GetTaskRunner());
2180 // TODO(vmpstr): Make this a DCHECK (or remove) when crbug.com/419086 is
2181 // resolved.
2182 CHECK(resource_provider_);
2183
2184 // Pass the single-threaded synchronous task graph runner to the worker pool 2169 // Pass the single-threaded synchronous task graph runner to the worker pool
2185 // if we're in synchronous single-threaded mode. 2170 // if we're in synchronous single-threaded mode.
2186 TaskGraphRunner* task_graph_runner = task_graph_runner_; 2171 TaskGraphRunner* task_graph_runner = task_graph_runner_;
2187 if (is_synchronous_single_threaded_) { 2172 if (is_synchronous_single_threaded_) {
2188 DCHECK(!single_thread_synchronous_task_graph_runner_); 2173 DCHECK(!single_thread_synchronous_task_graph_runner_);
2189 single_thread_synchronous_task_graph_runner_.reset( 2174 single_thread_synchronous_task_graph_runner_.reset(
2190 new SynchronousTaskGraphRunner); 2175 new SynchronousTaskGraphRunner);
2191 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); 2176 task_graph_runner = single_thread_synchronous_task_graph_runner_.get();
2192 } 2177 }
2193 2178
2179 tile_task_manager_ = TileTaskManagerImpl::Create(
2180 std::move(raster_buffer_provider), task_graph_runner);
2181
2182 // TODO(vmpstr): Initialize tile task limit at ctor time.
2183 tile_manager_->SetResources(
2184 resource_pool_.get(), image_decode_controller_.get(),
2185 tile_task_manager_.get(),
2186 is_synchronous_single_threaded_ ? std::numeric_limits<size_t>::max()
2187 : settings_.scheduled_raster_task_limit,
2188 use_gpu_rasterization_);
2189 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
2190 }
2191
2192 void LayerTreeHostImpl::CreateResourceAndRasterBufferProvider(
2193 std::unique_ptr<RasterBufferProvider>* raster_buffer_provider,
2194 std::unique_ptr<ResourcePool>* resource_pool) {
2195 DCHECK(GetTaskRunner());
2196 // TODO(vmpstr): Make this a DCHECK (or remove) when crbug.com/419086 is
2197 // resolved.
2198 CHECK(resource_provider_);
2199
2194 ContextProvider* context_provider = output_surface_->context_provider(); 2200 ContextProvider* context_provider = output_surface_->context_provider();
2195 if (!context_provider) { 2201 if (!context_provider) {
2196 *resource_pool = 2202 *resource_pool =
2197 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); 2203 ResourcePool::Create(resource_provider_.get(), GetTaskRunner());
2198 2204
2199 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( 2205 *raster_buffer_provider =
2200 GetTaskRunner(), task_graph_runner, resource_provider_.get()); 2206 BitmapRasterBufferProvider::Create(resource_provider_.get());
2201 return; 2207 return;
2202 } 2208 }
2203 2209
2204 if (use_gpu_rasterization_) { 2210 if (use_gpu_rasterization_) {
2205 DCHECK(resource_provider_->output_surface()->worker_context_provider()); 2211 DCHECK(resource_provider_->output_surface()->worker_context_provider());
2206 2212
2207 *resource_pool = 2213 *resource_pool =
2208 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); 2214 ResourcePool::Create(resource_provider_.get(), GetTaskRunner());
2209 2215
2210 int msaa_sample_count = use_msaa_ ? RequestedMSAASampleCount() : 0; 2216 int msaa_sample_count = use_msaa_ ? RequestedMSAASampleCount() : 0;
2211 2217
2212 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( 2218 *raster_buffer_provider = GpuRasterBufferProvider::Create(
2213 GetTaskRunner(), task_graph_runner, context_provider, 2219 context_provider, resource_provider_.get(),
2214 resource_provider_.get(), settings_.use_distance_field_text, 2220 settings_.use_distance_field_text, msaa_sample_count);
2215 msaa_sample_count);
2216 return; 2221 return;
2217 } 2222 }
2218 2223
2219 DCHECK(GetRendererCapabilities().using_image); 2224 DCHECK(GetRendererCapabilities().using_image);
2220 2225
2221 bool use_zero_copy = settings_.use_zero_copy; 2226 bool use_zero_copy = settings_.use_zero_copy;
2222 // TODO(reveman): Remove this when mojo supports worker contexts. 2227 // TODO(reveman): Remove this when mojo supports worker contexts.
2223 // crbug.com/522440 2228 // crbug.com/522440
2224 if (!resource_provider_->output_surface()->worker_context_provider()) { 2229 if (!resource_provider_->output_surface()->worker_context_provider()) {
2225 LOG(ERROR) 2230 LOG(ERROR)
2226 << "Forcing zero-copy tile initialization as worker context is missing"; 2231 << "Forcing zero-copy tile initialization as worker context is missing";
2227 use_zero_copy = true; 2232 use_zero_copy = true;
2228 } 2233 }
2229 2234
2230 if (use_zero_copy) { 2235 if (use_zero_copy) {
2231 *resource_pool = ResourcePool::CreateForGpuMemoryBufferResources( 2236 *resource_pool = ResourcePool::CreateForGpuMemoryBufferResources(
2232 resource_provider_.get(), GetTaskRunner()); 2237 resource_provider_.get(), GetTaskRunner());
2233 2238
2234 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( 2239 *raster_buffer_provider = ZeroCopyRasterBufferProvider::Create(
2235 GetTaskRunner(), task_graph_runner, resource_provider_.get(), 2240 resource_provider_.get(),
2236 settings_.renderer_settings.preferred_tile_format); 2241 settings_.renderer_settings.preferred_tile_format);
2237 return; 2242 return;
2238 } 2243 }
2239 2244
2240 *resource_pool = 2245 *resource_pool =
2241 ResourcePool::Create(resource_provider_.get(), GetTaskRunner()); 2246 ResourcePool::Create(resource_provider_.get(), GetTaskRunner());
2242 2247
2243 int max_copy_texture_chromium_size = context_provider->ContextCapabilities() 2248 int max_copy_texture_chromium_size = context_provider->ContextCapabilities()
2244 .gpu.max_copy_texture_chromium_size; 2249 .gpu.max_copy_texture_chromium_size;
2245 2250
2246 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( 2251 *raster_buffer_provider = OneCopyRasterBufferProvider::Create(
2247 GetTaskRunner(), task_graph_runner, context_provider, 2252 GetTaskRunner(), context_provider, resource_provider_.get(),
2248 resource_provider_.get(), max_copy_texture_chromium_size, 2253 max_copy_texture_chromium_size, settings_.use_partial_raster,
2249 settings_.use_partial_raster, settings_.max_staging_buffer_usage_in_bytes, 2254 settings_.max_staging_buffer_usage_in_bytes,
2250 settings_.renderer_settings.preferred_tile_format); 2255 settings_.renderer_settings.preferred_tile_format);
2251 } 2256 }
2252 2257
2253 void LayerTreeHostImpl::RecordMainFrameTiming( 2258 void LayerTreeHostImpl::RecordMainFrameTiming(
2254 const BeginFrameArgs& start_of_main_frame_args, 2259 const BeginFrameArgs& start_of_main_frame_args,
2255 const BeginFrameArgs& expected_next_main_frame_args) { 2260 const BeginFrameArgs& expected_next_main_frame_args) {
2256 std::vector<int64_t> request_ids; 2261 std::vector<int64_t> request_ids;
2257 active_tree_->GatherFrameTimingRequestIds(&request_ids); 2262 active_tree_->GatherFrameTimingRequestIds(&request_ids);
2258 if (request_ids.empty()) 2263 if (request_ids.empty())
2259 return; 2264 return;
(...skipping 14 matching lines...) Expand all
2274 void LayerTreeHostImpl::SetLayerTreeMutator(LayerTreeMutator* mutator) { 2279 void LayerTreeHostImpl::SetLayerTreeMutator(LayerTreeMutator* mutator) {
2275 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), 2280 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"),
2276 "LayerTreeHostImpl::SetLayerTreeMutator"); 2281 "LayerTreeHostImpl::SetLayerTreeMutator");
2277 mutator_ = mutator; 2282 mutator_ = mutator;
2278 } 2283 }
2279 2284
2280 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() { 2285 void LayerTreeHostImpl::CleanUpTileManagerAndUIResources() {
2281 ClearUIResources(); 2286 ClearUIResources();
2282 tile_manager_->FinishTasksAndCleanUp(); 2287 tile_manager_->FinishTasksAndCleanUp();
2283 resource_pool_ = nullptr; 2288 resource_pool_ = nullptr;
2284 tile_task_worker_pool_ = nullptr; 2289 tile_task_manager_ = nullptr;
2285 single_thread_synchronous_task_graph_runner_ = nullptr; 2290 single_thread_synchronous_task_graph_runner_ = nullptr;
2286 image_decode_controller_ = nullptr; 2291 image_decode_controller_ = nullptr;
2287 } 2292 }
2288 2293
2289 void LayerTreeHostImpl::ReleaseOutputSurface() { 2294 void LayerTreeHostImpl::ReleaseOutputSurface() {
2290 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface"); 2295 TRACE_EVENT0("cc", "LayerTreeHostImpl::ReleaseOutputSurface");
2291 2296
2292 // Since we will create a new resource provider, we cannot continue to use 2297 // Since we will create a new resource provider, we cannot continue to use
2293 // the old resources (i.e. render_surfaces and texture IDs). Clear them 2298 // the old resources (i.e. render_surfaces and texture IDs). Clear them
2294 // before we destroy the old resource provider. 2299 // before we destroy the old resource provider.
(...skipping 1685 matching lines...) Expand 10 before | Expand all | Expand 10 after
3980 return task_runner_provider_->HasImplThread(); 3985 return task_runner_provider_->HasImplThread();
3981 } 3986 }
3982 3987
3983 bool LayerTreeHostImpl::CommitToActiveTree() const { 3988 bool LayerTreeHostImpl::CommitToActiveTree() const {
3984 // In single threaded mode we skip the pending tree and commit directly to the 3989 // In single threaded mode we skip the pending tree and commit directly to the
3985 // active tree. 3990 // active tree.
3986 return !task_runner_provider_->HasImplThread(); 3991 return !task_runner_provider_->HasImplThread();
3987 } 3992 }
3988 3993
3989 } // namespace cc 3994 } // namespace cc
OLDNEW
« cc/raster/bitmap_raster_buffer_provider.cc ('K') | « cc/trees/layer_tree_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698