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

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

Issue 999173004: cc: Move worker threads to content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment and webview fix Created 5 years, 9 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 <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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698