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

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

Issue 1411663002: cc: Split Proxy to eliminate unnecessary dependencies on the impl side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update perf tests. Created 5 years, 2 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 } // namespace 132 } // namespace
133 133
134 LayerTreeHostImpl::FrameData::FrameData() 134 LayerTreeHostImpl::FrameData::FrameData()
135 : render_surface_layer_list(nullptr), has_no_damage(false) {} 135 : render_surface_layer_list(nullptr), has_no_damage(false) {}
136 136
137 LayerTreeHostImpl::FrameData::~FrameData() {} 137 LayerTreeHostImpl::FrameData::~FrameData() {}
138 138
139 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create( 139 scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::Create(
140 const LayerTreeSettings& settings, 140 const LayerTreeSettings& settings,
141 LayerTreeHostImplClient* client, 141 LayerTreeHostImplClient* client,
142 Proxy* proxy, 142 TaskRunnerProvider* task_runner_provider,
143 RenderingStatsInstrumentation* rendering_stats_instrumentation, 143 RenderingStatsInstrumentation* rendering_stats_instrumentation,
144 SharedBitmapManager* shared_bitmap_manager, 144 SharedBitmapManager* shared_bitmap_manager,
145 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 145 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
146 TaskGraphRunner* task_graph_runner, 146 TaskGraphRunner* task_graph_runner,
147 int id) { 147 int id) {
148 return make_scoped_ptr(new LayerTreeHostImpl( 148 return make_scoped_ptr(new LayerTreeHostImpl(
149 settings, client, proxy, rendering_stats_instrumentation, 149 settings, client, task_runner_provider, rendering_stats_instrumentation,
150 shared_bitmap_manager, gpu_memory_buffer_manager, task_graph_runner, id)); 150 shared_bitmap_manager, gpu_memory_buffer_manager, task_graph_runner, id));
151 } 151 }
152 152
153 LayerTreeHostImpl::LayerTreeHostImpl( 153 LayerTreeHostImpl::LayerTreeHostImpl(
154 const LayerTreeSettings& settings, 154 const LayerTreeSettings& settings,
155 LayerTreeHostImplClient* client, 155 LayerTreeHostImplClient* client,
156 Proxy* proxy, 156 TaskRunnerProvider* task_runner_provider,
157 RenderingStatsInstrumentation* rendering_stats_instrumentation, 157 RenderingStatsInstrumentation* rendering_stats_instrumentation,
158 SharedBitmapManager* shared_bitmap_manager, 158 SharedBitmapManager* shared_bitmap_manager,
159 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 159 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
160 TaskGraphRunner* task_graph_runner, 160 TaskGraphRunner* task_graph_runner,
161 int id) 161 int id)
162 : client_(client), 162 : client_(client),
163 proxy_(proxy), 163 task_runner_provider_(task_runner_provider),
164 current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE), 164 current_begin_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE),
165 output_surface_(nullptr), 165 output_surface_(nullptr),
166 content_is_suitable_for_gpu_rasterization_(true), 166 content_is_suitable_for_gpu_rasterization_(true),
167 has_gpu_rasterization_trigger_(false), 167 has_gpu_rasterization_trigger_(false),
168 use_gpu_rasterization_(false), 168 use_gpu_rasterization_(false),
169 use_msaa_(false), 169 use_msaa_(false),
170 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE), 170 gpu_rasterization_status_(GpuRasterizationStatus::OFF_DEVICE),
171 tree_resources_for_gpu_rasterization_dirty_(false), 171 tree_resources_for_gpu_rasterization_dirty_(false),
172 input_handler_client_(NULL), 172 input_handler_client_(NULL),
173 did_lock_scrolling_layer_(false), 173 did_lock_scrolling_layer_(false),
174 wheel_scrolling_(false), 174 wheel_scrolling_(false),
175 scroll_affects_scroll_handler_(false), 175 scroll_affects_scroll_handler_(false),
176 scroll_layer_id_when_mouse_over_scrollbar_(Layer::INVALID_ID), 176 scroll_layer_id_when_mouse_over_scrollbar_(Layer::INVALID_ID),
177 tile_priorities_dirty_(false), 177 tile_priorities_dirty_(false),
178 settings_(settings), 178 settings_(settings),
179 visible_(false), 179 visible_(false),
180 cached_managed_memory_policy_(settings.memory_policy_), 180 cached_managed_memory_policy_(settings.memory_policy_),
181 is_synchronous_single_threaded_(!proxy->HasImplThread() && 181 is_synchronous_single_threaded_(!task_runner_provider->HasImplThread() &&
182 !settings.single_thread_proxy_scheduler), 182 !settings.single_thread_proxy_scheduler),
183 // Must be initialized after is_synchronous_single_threaded_ and proxy_. 183 // Must be initialized after is_synchronous_single_threaded_ and
184 // task_runner_provider_.
184 tile_manager_( 185 tile_manager_(
185 TileManager::Create(this, 186 TileManager::Create(this,
186 GetTaskRunner(), 187 GetTaskRunner(),
187 is_synchronous_single_threaded_ 188 is_synchronous_single_threaded_
188 ? std::numeric_limits<size_t>::max() 189 ? std::numeric_limits<size_t>::max()
189 : settings.scheduled_raster_task_limit, 190 : settings.scheduled_raster_task_limit,
190 settings.use_partial_raster)), 191 settings.use_partial_raster)),
191 pinch_gesture_active_(false), 192 pinch_gesture_active_(false),
192 pinch_gesture_end_should_clear_scrolling_layer_(false), 193 pinch_gesture_end_should_clear_scrolling_layer_(false),
193 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), 194 fps_counter_(
195 FrameRateCounter::Create(task_runner_provider_->HasImplThread())),
194 memory_history_(MemoryHistory::Create()), 196 memory_history_(MemoryHistory::Create()),
195 debug_rect_history_(DebugRectHistory::Create()), 197 debug_rect_history_(DebugRectHistory::Create()),
196 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())), 198 texture_mailbox_deleter_(new TextureMailboxDeleter(GetTaskRunner())),
197 max_memory_needed_bytes_(0), 199 max_memory_needed_bytes_(0),
198 resourceless_software_draw_(false), 200 resourceless_software_draw_(false),
199 animation_registrar_(), 201 animation_registrar_(),
200 rendering_stats_instrumentation_(rendering_stats_instrumentation), 202 rendering_stats_instrumentation_(rendering_stats_instrumentation),
201 micro_benchmark_controller_(this), 203 micro_benchmark_controller_(this),
202 shared_bitmap_manager_(shared_bitmap_manager), 204 shared_bitmap_manager_(shared_bitmap_manager),
203 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 205 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
204 task_graph_runner_(task_graph_runner), 206 task_graph_runner_(task_graph_runner),
205 id_(id), 207 id_(id),
206 requires_high_res_to_draw_(false), 208 requires_high_res_to_draw_(false),
207 is_likely_to_require_a_draw_(false), 209 is_likely_to_require_a_draw_(false),
208 frame_timing_tracker_(FrameTimingTracker::Create(this)) { 210 frame_timing_tracker_(FrameTimingTracker::Create(this)) {
209 if (settings.use_compositor_animation_timelines) { 211 if (settings.use_compositor_animation_timelines) {
210 if (settings.accelerated_animation_enabled) { 212 if (settings.accelerated_animation_enabled) {
211 animation_host_ = AnimationHost::Create(ThreadInstance::IMPL); 213 animation_host_ = AnimationHost::Create(ThreadInstance::IMPL);
212 animation_host_->SetMutatorHostClient(this); 214 animation_host_->SetMutatorHostClient(this);
213 animation_host_->SetSupportsScrollAnimations( 215 animation_host_->SetSupportsScrollAnimations(SupportsImplScrolling());
214 proxy_->SupportsImplScrolling());
215 } 216 }
216 } else { 217 } else {
217 animation_registrar_ = AnimationRegistrar::Create(); 218 animation_registrar_ = AnimationRegistrar::Create();
218 animation_registrar_->set_supports_scroll_animations( 219 animation_registrar_->set_supports_scroll_animations(
219 proxy_->SupportsImplScrolling()); 220 SupportsImplScrolling());
220 } 221 }
221 222
222 DCHECK(proxy_->IsImplThread()); 223 DCHECK(task_runner_provider_->IsImplThread());
223 DidVisibilityChange(this, visible_); 224 DidVisibilityChange(this, visible_);
224 225
225 SetDebugState(settings.initial_debug_state); 226 SetDebugState(settings.initial_debug_state);
226 227
227 // LTHI always has an active tree. 228 // LTHI always has an active tree.
228 active_tree_ = 229 active_tree_ =
229 LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>(), 230 LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>(),
230 new SyncedTopControls, new SyncedElasticOverscroll); 231 new SyncedTopControls, new SyncedElasticOverscroll);
231 232
232 viewport_ = Viewport::Create(this); 233 viewport_ = Viewport::Create(this);
233 234
234 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 235 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
235 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 236 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
236 237
237 top_controls_manager_ = 238 top_controls_manager_ =
238 TopControlsManager::Create(this, 239 TopControlsManager::Create(this,
239 settings.top_controls_show_threshold, 240 settings.top_controls_show_threshold,
240 settings.top_controls_hide_threshold); 241 settings.top_controls_hide_threshold);
241 } 242 }
242 243
243 LayerTreeHostImpl::~LayerTreeHostImpl() { 244 LayerTreeHostImpl::~LayerTreeHostImpl() {
244 DCHECK(proxy_->IsImplThread()); 245 DCHECK(task_runner_provider_->IsImplThread());
245 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()"); 246 TRACE_EVENT0("cc", "LayerTreeHostImpl::~LayerTreeHostImpl()");
246 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 247 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
247 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_); 248 TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
248 249
249 if (input_handler_client_) { 250 if (input_handler_client_) {
250 input_handler_client_->WillShutdown(); 251 input_handler_client_->WillShutdown();
251 input_handler_client_ = NULL; 252 input_handler_client_ = NULL;
252 } 253 }
253 if (scroll_elasticity_helper_) 254 if (scroll_elasticity_helper_)
254 scroll_elasticity_helper_.reset(); 255 scroll_elasticity_helper_.reset();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 294
294 // Ensure all textures are returned so partial texture updates can happen 295 // Ensure all textures are returned so partial texture updates can happen
295 // during the commit. 296 // during the commit.
296 // TODO(ericrk): We should not need to ForceReclaimResources when using 297 // TODO(ericrk): We should not need to ForceReclaimResources when using
297 // Impl-side-painting as it doesn't upload during commits. However, 298 // Impl-side-painting as it doesn't upload during commits. However,
298 // Display::Draw currently relies on resource being reclaimed to block drawing 299 // Display::Draw currently relies on resource being reclaimed to block drawing
299 // between BeginCommit / Swap. See crbug.com/489515. 300 // between BeginCommit / Swap. See crbug.com/489515.
300 if (output_surface_) 301 if (output_surface_)
301 output_surface_->ForceReclaimResources(); 302 output_surface_->ForceReclaimResources();
302 303
303 if (!proxy_->CommitToActiveTree()) 304 if (!CommitToActiveTree())
304 CreatePendingTree(); 305 CreatePendingTree();
305 } 306 }
306 307
307 void LayerTreeHostImpl::CommitComplete() { 308 void LayerTreeHostImpl::CommitComplete() {
308 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); 309 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete");
309 310
310 if (proxy_->CommitToActiveTree()) { 311 if (CommitToActiveTree()) {
311 // We have to activate animations here or "IsActive()" is true on the layers 312 // We have to activate animations here or "IsActive()" is true on the layers
312 // but the animations aren't activated yet so they get ignored by 313 // but the animations aren't activated yet so they get ignored by
313 // UpdateDrawProperties. 314 // UpdateDrawProperties.
314 ActivateAnimations(); 315 ActivateAnimations();
315 } 316 }
316 317
317 // Start animations before UpdateDrawProperties and PrepareTiles, as they can 318 // Start animations before UpdateDrawProperties and PrepareTiles, as they can
318 // change the results. When doing commit to the active tree, this must happen 319 // change the results. When doing commit to the active tree, this must happen
319 // after ActivateAnimations() in order for this ticking to be propogated to 320 // after ActivateAnimations() in order for this ticking to be propogated to
320 // layers on the active tree. 321 // layers on the active tree.
(...skipping 14 matching lines...) Expand all
335 // TODO(vmpstr): Investigate always having PrepareTiles issue 336 // TODO(vmpstr): Investigate always having PrepareTiles issue
336 // NotifyReadyToActivate, instead of handling it here. 337 // NotifyReadyToActivate, instead of handling it here.
337 bool did_prepare_tiles = PrepareTiles(); 338 bool did_prepare_tiles = PrepareTiles();
338 if (!did_prepare_tiles) { 339 if (!did_prepare_tiles) {
339 NotifyReadyToActivate(); 340 NotifyReadyToActivate();
340 341
341 // Ensure we get ReadyToDraw signal even when PrepareTiles not run. This 342 // Ensure we get ReadyToDraw signal even when PrepareTiles not run. This
342 // is important for SingleThreadProxy and impl-side painting case. For 343 // is important for SingleThreadProxy and impl-side painting case. For
343 // STP, we commit to active tree and RequiresHighResToDraw, and set 344 // STP, we commit to active tree and RequiresHighResToDraw, and set
344 // Scheduler to wait for ReadyToDraw signal to avoid Checkerboard. 345 // Scheduler to wait for ReadyToDraw signal to avoid Checkerboard.
345 if (proxy_->CommitToActiveTree()) 346 if (CommitToActiveTree())
346 NotifyReadyToDraw(); 347 NotifyReadyToDraw();
347 } 348 }
348 349
349 micro_benchmark_controller_.DidCompleteCommit(); 350 micro_benchmark_controller_.DidCompleteCommit();
350 } 351 }
351 352
352 bool LayerTreeHostImpl::CanDraw() const { 353 bool LayerTreeHostImpl::CanDraw() const {
353 // Note: If you are changing this function or any other function that might 354 // Note: If you are changing this function or any other function that might
354 // affect the result of CanDraw, make sure to call 355 // affect the result of CanDraw, make sure to call
355 // client_->OnCanDrawStateChanged in the proper places and update the 356 // client_->OnCanDrawStateChanged in the proper places and update the
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 if (EvictedUIResourcesExist()) { 390 if (EvictedUIResourcesExist()) {
390 TRACE_EVENT_INSTANT0( 391 TRACE_EVENT_INSTANT0(
391 "cc", "LayerTreeHostImpl::CanDraw UI resources evicted not recreated", 392 "cc", "LayerTreeHostImpl::CanDraw UI resources evicted not recreated",
392 TRACE_EVENT_SCOPE_THREAD); 393 TRACE_EVENT_SCOPE_THREAD);
393 return false; 394 return false;
394 } 395 }
395 return true; 396 return true;
396 } 397 }
397 398
398 void LayerTreeHostImpl::Animate() { 399 void LayerTreeHostImpl::Animate() {
399 DCHECK(proxy_->IsImplThread()); 400 DCHECK(task_runner_provider_->IsImplThread());
400 base::TimeTicks monotonic_time = CurrentBeginFrameArgs().frame_time; 401 base::TimeTicks monotonic_time = CurrentBeginFrameArgs().frame_time;
401 402
402 // mithro(TODO): Enable these checks. 403 // mithro(TODO): Enable these checks.
403 // DCHECK(!current_begin_frame_tracker_.HasFinished()); 404 // DCHECK(!current_begin_frame_tracker_.HasFinished());
404 // DCHECK(monotonic_time == current_begin_frame_tracker_.Current().frame_time) 405 // DCHECK(monotonic_time == current_begin_frame_tracker_.Current().frame_time)
405 // << "Called animate with unknown frame time!?"; 406 // << "Called animate with unknown frame time!?";
406 407
407 if (input_handler_client_) { 408 if (input_handler_client_) {
408 // This animates fling scrolls. But on Android WebView root flings are 409 // This animates fling scrolls. But on Android WebView root flings are
409 // controlled by the application, so the compositor does not animate them. 410 // controlled by the application, so the compositor does not animate them.
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 // destroyed. 1349 // destroyed.
1349 NotifyAllTileTasksCompleted(); 1350 NotifyAllTileTasksCompleted();
1350 1351
1351 CreateTileManagerResources(); 1352 CreateTileManagerResources();
1352 RecreateTreeResources(); 1353 RecreateTreeResources();
1353 } 1354 }
1354 } 1355 }
1355 1356
1356 void LayerTreeHostImpl::SetTreeActivationCallback( 1357 void LayerTreeHostImpl::SetTreeActivationCallback(
1357 const base::Closure& callback) { 1358 const base::Closure& callback) {
1358 DCHECK(proxy_->IsImplThread()); 1359 DCHECK(task_runner_provider_->IsImplThread());
1359 tree_activation_callback_ = callback; 1360 tree_activation_callback_ = callback;
1360 } 1361 }
1361 1362
1362 void LayerTreeHostImpl::SetManagedMemoryPolicy( 1363 void LayerTreeHostImpl::SetManagedMemoryPolicy(
1363 const ManagedMemoryPolicy& policy) { 1364 const ManagedMemoryPolicy& policy) {
1364 if (cached_managed_memory_policy_ == policy) 1365 if (cached_managed_memory_policy_ == policy)
1365 return; 1366 return;
1366 1367
1367 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy(); 1368 ManagedMemoryPolicy old_policy = ActualManagedMemoryPolicy();
1368 1369
1369 cached_managed_memory_policy_ = policy; 1370 cached_managed_memory_policy_ = policy;
1370 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy(); 1371 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy();
1371 1372
1372 if (old_policy == actual_policy) 1373 if (old_policy == actual_policy)
1373 return; 1374 return;
1374 1375
1375 if (!proxy_->HasImplThread()) { 1376 if (!task_runner_provider_->HasImplThread()) {
1376 // In single-thread mode, this can be called on the main thread by 1377 // In single-thread mode, this can be called on the main thread by
1377 // GLRenderer::OnMemoryAllocationChanged. 1378 // GLRenderer::OnMemoryAllocationChanged.
1378 DebugScopedSetImplThread impl_thread(proxy_); 1379 DebugScopedSetImplThread impl_thread(task_runner_provider_);
1379 UpdateTileManagerMemoryPolicy(actual_policy); 1380 UpdateTileManagerMemoryPolicy(actual_policy);
1380 } else { 1381 } else {
1381 DCHECK(proxy_->IsImplThread()); 1382 DCHECK(task_runner_provider_->IsImplThread());
1382 UpdateTileManagerMemoryPolicy(actual_policy); 1383 UpdateTileManagerMemoryPolicy(actual_policy);
1383 } 1384 }
1384 1385
1385 // If there is already enough memory to draw everything imaginable and the 1386 // If there is already enough memory to draw everything imaginable and the
1386 // new memory limit does not change this, then do not re-commit. Don't bother 1387 // new memory limit does not change this, then do not re-commit. Don't bother
1387 // skipping commits if this is not visible (commits don't happen when not 1388 // skipping commits if this is not visible (commits don't happen when not
1388 // visible, there will almost always be a commit when this becomes visible). 1389 // visible, there will almost always be a commit when this becomes visible).
1389 bool needs_commit = true; 1390 bool needs_commit = true;
1390 if (visible() && 1391 if (visible() &&
1391 actual_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ && 1392 actual_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ &&
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 pending_page_scale_animation->use_anchor, 1980 pending_page_scale_animation->use_anchor,
1980 pending_page_scale_animation->scale, 1981 pending_page_scale_animation->scale,
1981 pending_page_scale_animation->duration); 1982 pending_page_scale_animation->duration);
1982 } 1983 }
1983 // Activation can change the root scroll offset, so inform the synchronous 1984 // Activation can change the root scroll offset, so inform the synchronous
1984 // input handler. 1985 // input handler.
1985 UpdateRootLayerStateForSynchronousInputHandler(); 1986 UpdateRootLayerStateForSynchronousInputHandler();
1986 } 1987 }
1987 1988
1988 void LayerTreeHostImpl::SetVisible(bool visible) { 1989 void LayerTreeHostImpl::SetVisible(bool visible) {
1989 DCHECK(proxy_->IsImplThread()); 1990 DCHECK(task_runner_provider_->IsImplThread());
1990 1991
1991 if (visible_ == visible) 1992 if (visible_ == visible)
1992 return; 1993 return;
1993 visible_ = visible; 1994 visible_ = visible;
1994 DidVisibilityChange(this, visible_); 1995 DidVisibilityChange(this, visible_);
1995 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); 1996 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
1996 1997
1997 // If we just became visible, we have to ensure that we draw high res tiles, 1998 // If we just became visible, we have to ensure that we draw high res tiles,
1998 // to prevent checkerboard/low res flashes. 1999 // to prevent checkerboard/low res flashes.
1999 if (visible_) 2000 if (visible_)
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
2231 if (!output_surface->BindToClient(this)) { 2232 if (!output_surface->BindToClient(this)) {
2232 // Avoid recreating tree resources because we might not have enough 2233 // Avoid recreating tree resources because we might not have enough
2233 // information to do this yet (eg. we don't have a TileManager at this 2234 // information to do this yet (eg. we don't have a TileManager at this
2234 // point). 2235 // point).
2235 return false; 2236 return false;
2236 } 2237 }
2237 2238
2238 output_surface_ = output_surface; 2239 output_surface_ = output_surface;
2239 resource_provider_ = ResourceProvider::Create( 2240 resource_provider_ = ResourceProvider::Create(
2240 output_surface_, shared_bitmap_manager_, gpu_memory_buffer_manager_, 2241 output_surface_, shared_bitmap_manager_, gpu_memory_buffer_manager_,
2241 proxy_->blocking_main_thread_task_runner(), 2242 task_runner_provider_->blocking_main_thread_task_runner(),
2242 settings_.renderer_settings.highp_threshold_min, 2243 settings_.renderer_settings.highp_threshold_min,
2243 settings_.renderer_settings.texture_id_allocation_chunk_size, 2244 settings_.renderer_settings.texture_id_allocation_chunk_size,
2244 settings_.use_image_texture_targets); 2245 settings_.use_image_texture_targets);
2245 2246
2246 CreateAndSetRenderer(); 2247 CreateAndSetRenderer();
2247 2248
2248 // Since the new renderer may be capable of MSAA, update status here. 2249 // Since the new renderer may be capable of MSAA, update status here.
2249 UpdateGpuRasterizationStatus(); 2250 UpdateGpuRasterizationStatus();
2250 2251
2251 CreateTileManagerResources(); 2252 CreateTileManagerResources();
(...skipping 1385 matching lines...) Expand 10 before | Expand all | Expand 10 after
3637 int layer_id) const { 3638 int layer_id) const {
3638 if (active_tree()) { 3639 if (active_tree()) {
3639 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); 3640 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id);
3640 if (layer) 3641 if (layer)
3641 return layer->ScrollOffsetForAnimation(); 3642 return layer->ScrollOffsetForAnimation();
3642 } 3643 }
3643 3644
3644 return gfx::ScrollOffset(); 3645 return gfx::ScrollOffset();
3645 } 3646 }
3646 3647
3648 bool LayerTreeHostImpl::SupportsImplScrolling() const {
3649 // Supported in threaded mode.
3650 return task_runner_provider_->HasImplThread();
3651 }
3652
3653 bool LayerTreeHostImpl::CommitToActiveTree() const {
3654 // In single threaded mode we skip the pending tree and commit directly to the
3655 // active tree.
3656 return !task_runner_provider_->HasImplThread();
3657 }
3658
3647 } // namespace cc 3659 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698