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

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

Issue 23694031: Fix race conditions in window snapshot code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated enne and jbauman's feedback. Created 7 years, 3 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 | Annotate | Revision Log
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.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <stack> 8 #include <stack>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 visible_(true), 102 visible_(true),
103 page_scale_factor_(1.f), 103 page_scale_factor_(1.f),
104 min_page_scale_factor_(1.f), 104 min_page_scale_factor_(1.f),
105 max_page_scale_factor_(1.f), 105 max_page_scale_factor_(1.f),
106 trigger_idle_updates_(true), 106 trigger_idle_updates_(true),
107 background_color_(SK_ColorWHITE), 107 background_color_(SK_ColorWHITE),
108 has_transparent_background_(false), 108 has_transparent_background_(false),
109 partial_texture_update_requests_(0), 109 partial_texture_update_requests_(0),
110 in_paint_layer_contents_(false), 110 in_paint_layer_contents_(false),
111 total_frames_used_for_lcd_text_metrics_(0), 111 total_frames_used_for_lcd_text_metrics_(0),
112 tree_id_(s_next_tree_id++) { 112 tree_id_(s_next_tree_id++),
113 next_commit_forces_redraw_(false) {
113 if (settings_.accelerated_animation_enabled) 114 if (settings_.accelerated_animation_enabled)
114 animation_registrar_ = AnimationRegistrar::Create(); 115 animation_registrar_ = AnimationRegistrar::Create();
115 s_num_layer_tree_instances++; 116 s_num_layer_tree_instances++;
116 rendering_stats_instrumentation_->set_record_rendering_stats( 117 rendering_stats_instrumentation_->set_record_rendering_stats(
117 debug_state_.RecordRenderingStats()); 118 debug_state_.RecordRenderingStats());
118 } 119 }
119 120
120 bool LayerTreeHost::Initialize( 121 bool LayerTreeHost::Initialize(
121 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { 122 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
122 if (impl_task_runner.get()) 123 if (impl_task_runner.get())
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 // In impl-side painting, synchronize to the pending tree so that it has 293 // In impl-side painting, synchronize to the pending tree so that it has
293 // time to raster before being displayed. If no pending tree is needed, 294 // time to raster before being displayed. If no pending tree is needed,
294 // synchronization can happen directly to the active tree and 295 // synchronization can happen directly to the active tree and
295 // unlinked contents resources can be reclaimed immediately. 296 // unlinked contents resources can be reclaimed immediately.
296 LayerTreeImpl* sync_tree; 297 LayerTreeImpl* sync_tree;
297 if (settings_.impl_side_painting) { 298 if (settings_.impl_side_painting) {
298 // Commits should not occur while there is already a pending tree. 299 // Commits should not occur while there is already a pending tree.
299 DCHECK(!host_impl->pending_tree()); 300 DCHECK(!host_impl->pending_tree());
300 host_impl->CreatePendingTree(); 301 host_impl->CreatePendingTree();
301 sync_tree = host_impl->pending_tree(); 302 sync_tree = host_impl->pending_tree();
303 if (next_commit_forces_redraw_)
304 sync_tree->ForceRedrawNextActivation();
302 } else { 305 } else {
306 if (next_commit_forces_redraw_)
307 host_impl->SetFullRootLayerDamage();
303 contents_texture_manager_->ReduceMemory(host_impl->resource_provider()); 308 contents_texture_manager_->ReduceMemory(host_impl->resource_provider());
304 sync_tree = host_impl->active_tree(); 309 sync_tree = host_impl->active_tree();
305 } 310 }
306 311
312 next_commit_forces_redraw_ = false;
313
307 sync_tree->set_source_frame_number(source_frame_number()); 314 sync_tree->set_source_frame_number(source_frame_number());
308 315
309 if (needs_full_tree_sync_) 316 if (needs_full_tree_sync_)
310 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees( 317 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees(
311 root_layer(), sync_tree->DetachLayerTree(), sync_tree)); 318 root_layer(), sync_tree->DetachLayerTree(), sync_tree));
312 { 319 {
313 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); 320 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties");
314 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer()); 321 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer());
315 } 322 }
316 323
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 } 542 }
536 543
537 bool LayerTreeHost::CommitRequested() const { 544 bool LayerTreeHost::CommitRequested() const {
538 return proxy_->CommitRequested(); 545 return proxy_->CommitRequested();
539 } 546 }
540 547
541 void LayerTreeHost::SetNextCommitWaitsForActivation() { 548 void LayerTreeHost::SetNextCommitWaitsForActivation() {
542 proxy_->SetNextCommitWaitsForActivation(); 549 proxy_->SetNextCommitWaitsForActivation();
543 } 550 }
544 551
552 void LayerTreeHost::SetNextCommitForcesRedraw() {
553 next_commit_forces_redraw_ = true;
554 }
555
545 void LayerTreeHost::SetAnimationEvents(scoped_ptr<AnimationEventsVector> events, 556 void LayerTreeHost::SetAnimationEvents(scoped_ptr<AnimationEventsVector> events,
546 base::Time wall_clock_time) { 557 base::Time wall_clock_time) {
547 DCHECK(proxy_->IsMainThread()); 558 DCHECK(proxy_->IsMainThread());
548 for (size_t event_index = 0; event_index < events->size(); ++event_index) { 559 for (size_t event_index = 0; event_index < events->size(); ++event_index) {
549 int event_layer_id = (*events)[event_index].layer_id; 560 int event_layer_id = (*events)[event_index].layer_id;
550 561
551 // Use the map of all controllers, not just active ones, since non-active 562 // Use the map of all controllers, not just active ones, since non-active
552 // controllers may still receive events for impl-only animations. 563 // controllers may still receive events for impl-only animations.
553 const AnimationRegistrar::AnimationControllerMap& animation_controllers = 564 const AnimationRegistrar::AnimationControllerMap& animation_controllers =
554 animation_registrar_->all_animation_controllers(); 565 animation_registrar_->all_animation_controllers();
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 void LayerTreeHost::RegisterViewportLayers( 1218 void LayerTreeHost::RegisterViewportLayers(
1208 scoped_refptr<Layer> page_scale_layer, 1219 scoped_refptr<Layer> page_scale_layer,
1209 scoped_refptr<Layer> inner_viewport_scroll_layer, 1220 scoped_refptr<Layer> inner_viewport_scroll_layer,
1210 scoped_refptr<Layer> outer_viewport_scroll_layer) { 1221 scoped_refptr<Layer> outer_viewport_scroll_layer) {
1211 page_scale_layer_ = page_scale_layer; 1222 page_scale_layer_ = page_scale_layer;
1212 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer; 1223 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer;
1213 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer; 1224 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer;
1214 } 1225 }
1215 1226
1216 } // namespace cc 1227 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698