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

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: Added screenshot sync test to telemetry unittests, updated cc unittest Created 7 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 | 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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 visible_(true), 125 visible_(true),
126 page_scale_factor_(1.f), 126 page_scale_factor_(1.f),
127 min_page_scale_factor_(1.f), 127 min_page_scale_factor_(1.f),
128 max_page_scale_factor_(1.f), 128 max_page_scale_factor_(1.f),
129 trigger_idle_updates_(true), 129 trigger_idle_updates_(true),
130 background_color_(SK_ColorWHITE), 130 background_color_(SK_ColorWHITE),
131 has_transparent_background_(false), 131 has_transparent_background_(false),
132 partial_texture_update_requests_(0), 132 partial_texture_update_requests_(0),
133 in_paint_layer_contents_(false), 133 in_paint_layer_contents_(false),
134 total_frames_used_for_lcd_text_metrics_(0), 134 total_frames_used_for_lcd_text_metrics_(0),
135 tree_id_(s_next_tree_id++) { 135 tree_id_(s_next_tree_id++),
136 next_commit_forces_redraw_(false) {
136 if (settings_.accelerated_animation_enabled) 137 if (settings_.accelerated_animation_enabled)
137 animation_registrar_ = AnimationRegistrar::Create(); 138 animation_registrar_ = AnimationRegistrar::Create();
138 s_num_layer_tree_instances++; 139 s_num_layer_tree_instances++;
139 rendering_stats_instrumentation_->set_record_rendering_stats( 140 rendering_stats_instrumentation_->set_record_rendering_stats(
140 debug_state_.RecordRenderingStats()); 141 debug_state_.RecordRenderingStats());
141 } 142 }
142 143
143 bool LayerTreeHost::Initialize( 144 bool LayerTreeHost::Initialize(
144 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { 145 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
145 if (impl_task_runner.get()) 146 if (impl_task_runner.get())
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 // In impl-side painting, synchronize to the pending tree so that it has 316 // In impl-side painting, synchronize to the pending tree so that it has
316 // time to raster before being displayed. If no pending tree is needed, 317 // time to raster before being displayed. If no pending tree is needed,
317 // synchronization can happen directly to the active tree and 318 // synchronization can happen directly to the active tree and
318 // unlinked contents resources can be reclaimed immediately. 319 // unlinked contents resources can be reclaimed immediately.
319 LayerTreeImpl* sync_tree; 320 LayerTreeImpl* sync_tree;
320 if (settings_.impl_side_painting) { 321 if (settings_.impl_side_painting) {
321 // Commits should not occur while there is already a pending tree. 322 // Commits should not occur while there is already a pending tree.
322 DCHECK(!host_impl->pending_tree()); 323 DCHECK(!host_impl->pending_tree());
323 host_impl->CreatePendingTree(); 324 host_impl->CreatePendingTree();
324 sync_tree = host_impl->pending_tree(); 325 sync_tree = host_impl->pending_tree();
326 if (next_commit_forces_redraw_)
327 sync_tree->ForceRedrawNextActivation();
325 } else { 328 } else {
329 if (next_commit_forces_redraw_)
330 host_impl->SetFullRootLayerDamage();
326 contents_texture_manager_->ReduceMemory(host_impl->resource_provider()); 331 contents_texture_manager_->ReduceMemory(host_impl->resource_provider());
327 sync_tree = host_impl->active_tree(); 332 sync_tree = host_impl->active_tree();
328 } 333 }
329 334
335 next_commit_forces_redraw_ = false;
336
330 sync_tree->set_source_frame_number(source_frame_number()); 337 sync_tree->set_source_frame_number(source_frame_number());
331 338
332 if (needs_full_tree_sync_) 339 if (needs_full_tree_sync_)
333 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees( 340 sync_tree->SetRootLayer(TreeSynchronizer::SynchronizeTrees(
334 root_layer(), sync_tree->DetachLayerTree(), sync_tree)); 341 root_layer(), sync_tree->DetachLayerTree(), sync_tree));
335 { 342 {
336 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); 343 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties");
337 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer()); 344 TreeSynchronizer::PushProperties(root_layer(), sync_tree->root_layer());
338 } 345 }
339 346
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 } 565 }
559 566
560 bool LayerTreeHost::CommitRequested() const { 567 bool LayerTreeHost::CommitRequested() const {
561 return proxy_->CommitRequested(); 568 return proxy_->CommitRequested();
562 } 569 }
563 570
564 void LayerTreeHost::SetNextCommitWaitsForActivation() { 571 void LayerTreeHost::SetNextCommitWaitsForActivation() {
565 proxy_->SetNextCommitWaitsForActivation(); 572 proxy_->SetNextCommitWaitsForActivation();
566 } 573 }
567 574
575 void LayerTreeHost::SetNextCommitForcesRedraw() {
576 next_commit_forces_redraw_ = true;
577 }
578
568 void LayerTreeHost::SetAnimationEvents(scoped_ptr<AnimationEventsVector> events, 579 void LayerTreeHost::SetAnimationEvents(scoped_ptr<AnimationEventsVector> events,
569 base::Time wall_clock_time) { 580 base::Time wall_clock_time) {
570 DCHECK(proxy_->IsMainThread()); 581 DCHECK(proxy_->IsMainThread());
571 for (size_t event_index = 0; event_index < events->size(); ++event_index) { 582 for (size_t event_index = 0; event_index < events->size(); ++event_index) {
572 int event_layer_id = (*events)[event_index].layer_id; 583 int event_layer_id = (*events)[event_index].layer_id;
573 584
574 // Use the map of all controllers, not just active ones, since non-active 585 // Use the map of all controllers, not just active ones, since non-active
575 // controllers may still receive events for impl-only animations. 586 // controllers may still receive events for impl-only animations.
576 const AnimationRegistrar::AnimationControllerMap& animation_controllers = 587 const AnimationRegistrar::AnimationControllerMap& animation_controllers =
577 animation_registrar_->all_animation_controllers(); 588 animation_registrar_->all_animation_controllers();
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 void LayerTreeHost::RegisterViewportLayers( 1246 void LayerTreeHost::RegisterViewportLayers(
1236 scoped_refptr<Layer> page_scale_layer, 1247 scoped_refptr<Layer> page_scale_layer,
1237 scoped_refptr<Layer> inner_viewport_scroll_layer, 1248 scoped_refptr<Layer> inner_viewport_scroll_layer,
1238 scoped_refptr<Layer> outer_viewport_scroll_layer) { 1249 scoped_refptr<Layer> outer_viewport_scroll_layer) {
1239 page_scale_layer_ = page_scale_layer; 1250 page_scale_layer_ = page_scale_layer;
1240 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer; 1251 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer;
1241 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer; 1252 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer;
1242 } 1253 }
1243 1254
1244 } // namespace cc 1255 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698