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

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

Issue 2183403002: cc: Move data to LayerTree from LayerTreeHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@layer_tree_change
Patch Set: Missed one test. Created 4 years, 4 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.h ('k') | cc/trees/layer_tree_host_common.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.h" 5 #include "cc/trees/layer_tree_host.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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 #include "ui/gfx/geometry/size_conversions.h" 61 #include "ui/gfx/geometry/size_conversions.h"
62 #include "ui/gfx/geometry/vector2d_conversions.h" 62 #include "ui/gfx/geometry/vector2d_conversions.h"
63 63
64 namespace { 64 namespace {
65 static base::StaticAtomicSequenceNumber s_layer_tree_host_sequence_number; 65 static base::StaticAtomicSequenceNumber s_layer_tree_host_sequence_number;
66 } 66 }
67 67
68 namespace cc { 68 namespace cc {
69 namespace { 69 namespace {
70 70
71 Layer* UpdateAndGetLayer(Layer* current_layer,
72 int layer_id,
73 LayerTree* layer_tree) {
74 if (layer_id == Layer::INVALID_ID) {
75 if (current_layer)
76 current_layer->SetLayerTreeHost(nullptr);
77
78 return nullptr;
79 }
80 Layer* layer = layer_tree->LayerById(layer_id);
81 DCHECK(layer);
82 if (current_layer && current_layer != layer)
83 current_layer->SetLayerTreeHost(nullptr);
84
85 return layer;
86 }
87
88 std::unique_ptr<base::trace_event::TracedValue> 71 std::unique_ptr<base::trace_event::TracedValue>
89 ComputeLayerTreeHostProtoSizeSplitAsValue(proto::LayerTreeHost* proto) { 72 ComputeLayerTreeHostProtoSizeSplitAsValue(proto::LayerTreeHost* proto) {
90 std::unique_ptr<base::trace_event::TracedValue> value( 73 std::unique_ptr<base::trace_event::TracedValue> value(
91 new base::trace_event::TracedValue()); 74 new base::trace_event::TracedValue());
92 base::CheckedNumeric<int> base_layer_properties_size = 0; 75 base::CheckedNumeric<int> base_layer_properties_size = 0;
93 base::CheckedNumeric<int> picture_layer_properties_size = 0; 76 base::CheckedNumeric<int> picture_layer_properties_size = 0;
94 base::CheckedNumeric<int> display_item_list_size = 0; 77 base::CheckedNumeric<int> display_item_list_size = 0;
95 base::CheckedNumeric<int> drawing_display_items_size = 0; 78 base::CheckedNumeric<int> drawing_display_items_size = 0;
96 79
97 const proto::LayerUpdate& layer_update_proto = proto->layer_updates(); 80 const proto::LayerUpdate& layer_update_proto = proto->layer_updates();
(...skipping 13 matching lines...) Expand all
111 94
112 for (int j = 0; j < display_list_proto.items_size(); ++j) { 95 for (int j = 0; j < display_list_proto.items_size(); ++j) {
113 const proto::DisplayItem& display_item = display_list_proto.items(j); 96 const proto::DisplayItem& display_item = display_list_proto.items(j);
114 if (display_item.type() == proto::DisplayItem::Type_Drawing) 97 if (display_item.type() == proto::DisplayItem::Type_Drawing)
115 drawing_display_items_size += display_item.ByteSize(); 98 drawing_display_items_size += display_item.ByteSize();
116 } 99 }
117 } 100 }
118 } 101 }
119 102
120 value->SetInteger("TotalLayerTreeHostProtoSize", proto->ByteSize()); 103 value->SetInteger("TotalLayerTreeHostProtoSize", proto->ByteSize());
121 value->SetInteger("LayerTreeHierarchySize", proto->root_layer().ByteSize()); 104 value->SetInteger("LayerTreeHierarchySize",
105 proto->layer_tree().root_layer().ByteSize());
122 value->SetInteger("LayerUpdatesSize", proto->layer_updates().ByteSize()); 106 value->SetInteger("LayerUpdatesSize", proto->layer_updates().ByteSize());
123 value->SetInteger("PropertyTreesSize", proto->property_trees().ByteSize()); 107 value->SetInteger("PropertyTreesSize",
108 proto->layer_tree().property_trees().ByteSize());
124 109
125 // LayerUpdate size breakdown. 110 // LayerUpdate size breakdown.
126 value->SetInteger("TotalBasePropertiesSize", 111 value->SetInteger("TotalBasePropertiesSize",
127 base_layer_properties_size.ValueOrDefault(-1)); 112 base_layer_properties_size.ValueOrDefault(-1));
128 value->SetInteger("PictureLayerPropertiesSize", 113 value->SetInteger("PictureLayerPropertiesSize",
129 picture_layer_properties_size.ValueOrDefault(-1)); 114 picture_layer_properties_size.ValueOrDefault(-1));
130 value->SetInteger("DisplayItemListSize", 115 value->SetInteger("DisplayItemListSize",
131 display_item_list_size.ValueOrDefault(-1)); 116 display_item_list_size.ValueOrDefault(-1));
132 value->SetInteger("DrawingDisplayItemsSize", 117 value->SetInteger("DrawingDisplayItemsSize",
133 drawing_display_items_size.ValueOrDefault(-1)); 118 drawing_display_items_size.ValueOrDefault(-1));
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 DCHECK(params->image_serialization_processor); 190 DCHECK(params->image_serialization_processor);
206 191
207 std::unique_ptr<LayerTreeHost> layer_tree_host( 192 std::unique_ptr<LayerTreeHost> layer_tree_host(
208 new LayerTreeHost(params, CompositorMode::REMOTE)); 193 new LayerTreeHost(params, CompositorMode::REMOTE));
209 layer_tree_host->InitializeRemoteClient( 194 layer_tree_host->InitializeRemoteClient(
210 remote_proto_channel, params->main_task_runner, impl_task_runner); 195 remote_proto_channel, params->main_task_runner, impl_task_runner);
211 return layer_tree_host; 196 return layer_tree_host;
212 } 197 }
213 198
214 LayerTreeHost::LayerTreeHost(InitParams* params, CompositorMode mode) 199 LayerTreeHost::LayerTreeHost(InitParams* params, CompositorMode mode)
200 : LayerTreeHost(
201 params,
202 mode,
203 base::MakeUnique<LayerTree>(std::move(params->animation_host),
204 this)) {}
205
206 LayerTreeHost::LayerTreeHost(InitParams* params,
207 CompositorMode mode,
208 std::unique_ptr<LayerTree> layer_tree)
215 : micro_benchmark_controller_(this), 209 : micro_benchmark_controller_(this),
210 layer_tree_(std::move(layer_tree)),
216 next_ui_resource_id_(1), 211 next_ui_resource_id_(1),
217 compositor_mode_(mode), 212 compositor_mode_(mode),
218 needs_full_tree_sync_(true),
219 needs_meta_info_recomputation_(true),
220 client_(params->client), 213 client_(params->client),
221 source_frame_number_(0), 214 source_frame_number_(0),
222 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()), 215 rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()),
223 output_surface_lost_(true), 216 output_surface_lost_(true),
224 settings_(*params->settings), 217 settings_(*params->settings),
225 debug_state_(settings_.initial_debug_state), 218 debug_state_(settings_.initial_debug_state),
226 top_controls_shrink_blink_size_(false),
227 top_controls_height_(0.f),
228 top_controls_shown_ratio_(0.f),
229 device_scale_factor_(1.f),
230 painted_device_scale_factor_(1.f),
231 visible_(false), 219 visible_(false),
232 page_scale_factor_(1.f),
233 min_page_scale_factor_(1.f),
234 max_page_scale_factor_(1.f),
235 has_gpu_rasterization_trigger_(false), 220 has_gpu_rasterization_trigger_(false),
236 content_is_suitable_for_gpu_rasterization_(true), 221 content_is_suitable_for_gpu_rasterization_(true),
237 gpu_rasterization_histogram_recorded_(false), 222 gpu_rasterization_histogram_recorded_(false),
238 background_color_(SK_ColorWHITE),
239 has_transparent_background_(false),
240 have_scroll_event_handlers_(false),
241 event_listener_properties_(),
242 did_complete_scale_animation_(false), 223 did_complete_scale_animation_(false),
243 id_(s_layer_tree_host_sequence_number.GetNext() + 1), 224 id_(s_layer_tree_host_sequence_number.GetNext() + 1),
244 next_commit_forces_redraw_(false), 225 next_commit_forces_redraw_(false),
245 shared_bitmap_manager_(params->shared_bitmap_manager), 226 shared_bitmap_manager_(params->shared_bitmap_manager),
246 gpu_memory_buffer_manager_(params->gpu_memory_buffer_manager), 227 gpu_memory_buffer_manager_(params->gpu_memory_buffer_manager),
247 task_graph_runner_(params->task_graph_runner), 228 task_graph_runner_(params->task_graph_runner),
248 image_serialization_processor_(params->image_serialization_processor), 229 image_serialization_processor_(params->image_serialization_processor),
249 surface_client_id_(0u), 230 surface_client_id_(0u),
250 next_surface_sequence_(1u), 231 next_surface_sequence_(1u) {
251 layer_tree_(std::move(params->animation_host)) {
252 DCHECK(task_graph_runner_); 232 DCHECK(task_graph_runner_);
233 DCHECK(layer_tree_);
253 234
254 layer_tree_.animation_host()->SetMutatorHostClient(this); 235 layer_tree_->animation_host()->SetMutatorHostClient(this);
255 236
256 rendering_stats_instrumentation_->set_record_rendering_stats( 237 rendering_stats_instrumentation_->set_record_rendering_stats(
257 debug_state_.RecordRenderingStats()); 238 debug_state_.RecordRenderingStats());
258 } 239 }
259 240
260 void LayerTreeHost::InitializeThreaded( 241 void LayerTreeHost::InitializeThreaded(
261 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, 242 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
262 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, 243 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
263 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { 244 std::unique_ptr<BeginFrameSource> external_begin_frame_source) {
264 task_runner_provider_ = 245 task_runner_provider_ =
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 336
356 void LayerTreeHost::InitializeProxy( 337 void LayerTreeHost::InitializeProxy(
357 std::unique_ptr<Proxy> proxy, 338 std::unique_ptr<Proxy> proxy,
358 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { 339 std::unique_ptr<BeginFrameSource> external_begin_frame_source) {
359 TRACE_EVENT0("cc", "LayerTreeHost::InitializeForReal"); 340 TRACE_EVENT0("cc", "LayerTreeHost::InitializeForReal");
360 DCHECK(task_runner_provider_); 341 DCHECK(task_runner_provider_);
361 342
362 proxy_ = std::move(proxy); 343 proxy_ = std::move(proxy);
363 proxy_->Start(std::move(external_begin_frame_source)); 344 proxy_->Start(std::move(external_begin_frame_source));
364 345
365 layer_tree_.animation_host()->SetSupportsScrollAnimations( 346 layer_tree_->animation_host()->SetSupportsScrollAnimations(
366 proxy_->SupportsImplScrolling()); 347 proxy_->SupportsImplScrolling());
367 } 348 }
368 349
369 LayerTreeHost::~LayerTreeHost() { 350 LayerTreeHost::~LayerTreeHost() {
370 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost"); 351 TRACE_EVENT0("cc", "LayerTreeHost::~LayerTreeHost");
371 352
372 layer_tree_.animation_host()->SetMutatorHostClient(nullptr); 353 // Clear any references into the LayerTreeHost.
373 354 layer_tree_.reset();
374 if (root_layer_.get())
375 root_layer_->SetLayerTreeHost(NULL);
376 355
377 DCHECK(swap_promise_monitor_.empty()); 356 DCHECK(swap_promise_monitor_.empty());
378 357
379 BreakSwapPromises(SwapPromise::COMMIT_FAILS); 358 BreakSwapPromises(SwapPromise::COMMIT_FAILS);
380 359
381 if (proxy_) { 360 if (proxy_) {
382 DCHECK(task_runner_provider_->IsMainThread()); 361 DCHECK(task_runner_provider_->IsMainThread());
383 proxy_->Stop(); 362 proxy_->Stop();
384 363
385 // Proxy must be destroyed before the Task Runner Provider. 364 // Proxy must be destroyed before the Task Runner Provider.
386 proxy_ = nullptr; 365 proxy_ = nullptr;
387 } 366 }
388
389 // We must clear any pointers into the layer tree prior to destroying it.
390 RegisterViewportLayers(NULL, NULL, NULL, NULL);
391
392 if (root_layer_.get()) {
393 // The layer tree must be destroyed before the layer tree host. We've
394 // made a contract with our animation controllers that the animation_host
395 // will outlive them, and we must make good.
396 root_layer_ = NULL;
397 }
398 } 367 }
399 368
400 void LayerTreeHost::WillBeginMainFrame() { 369 void LayerTreeHost::WillBeginMainFrame() {
401 devtools_instrumentation::WillBeginMainThreadFrame(id(), 370 devtools_instrumentation::WillBeginMainThreadFrame(id(),
402 source_frame_number()); 371 source_frame_number());
403 client_->WillBeginMainFrame(); 372 client_->WillBeginMainFrame();
404 } 373 }
405 374
406 void LayerTreeHost::DidBeginMainFrame() { 375 void LayerTreeHost::DidBeginMainFrame() {
407 client_->DidBeginMainFrame(); 376 client_->DidBeginMainFrame();
(...skipping 21 matching lines...) Expand all
429 // should be delayed until the LayerTreeHost::CommitComplete, which will run 398 // should be delayed until the LayerTreeHost::CommitComplete, which will run
430 // after the commit, but on the main thread. 399 // after the commit, but on the main thread.
431 void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) { 400 void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) {
432 DCHECK(!IsRemoteServer()); 401 DCHECK(!IsRemoteServer());
433 DCHECK(task_runner_provider_->IsImplThread()); 402 DCHECK(task_runner_provider_->IsImplThread());
434 403
435 bool is_new_trace; 404 bool is_new_trace;
436 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); 405 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
437 if (is_new_trace && 406 if (is_new_trace &&
438 frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() && 407 frame_viewer_instrumentation::IsTracingLayerTreeSnapshots() &&
439 root_layer()) { 408 layer_tree_->root_layer()) {
440 LayerTreeHostCommon::CallFunctionForEveryLayer( 409 LayerTreeHostCommon::CallFunctionForEveryLayer(
441 this, [](Layer* layer) { layer->DidBeginTracing(); }); 410 this, [](Layer* layer) { layer->DidBeginTracing(); });
442 } 411 }
443 412
444 LayerTreeImpl* sync_tree = host_impl->sync_tree(); 413 LayerTreeImpl* sync_tree = host_impl->sync_tree();
445 414
446 if (next_commit_forces_redraw_) { 415 if (next_commit_forces_redraw_) {
447 sync_tree->ForceRedrawNextActivation(); 416 sync_tree->ForceRedrawNextActivation();
448 next_commit_forces_redraw_ = false; 417 next_commit_forces_redraw_ = false;
449 } 418 }
450 419
451 sync_tree->set_source_frame_number(source_frame_number()); 420 sync_tree->set_source_frame_number(source_frame_number());
452 421
453 if (needs_full_tree_sync_) 422 if (layer_tree_->needs_full_tree_sync())
454 TreeSynchronizer::SynchronizeTrees(root_layer(), sync_tree); 423 TreeSynchronizer::SynchronizeTrees(layer_tree_->root_layer(), sync_tree);
455 424
456 sync_tree->set_needs_full_tree_sync(needs_full_tree_sync_); 425 layer_tree_->PushPropertiesTo(sync_tree);
457 needs_full_tree_sync_ = false;
458
459 if (hud_layer_.get()) {
460 LayerImpl* hud_impl = sync_tree->LayerById(hud_layer_->id());
461 sync_tree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl));
462 } else {
463 sync_tree->set_hud_layer(NULL);
464 }
465
466 sync_tree->set_background_color(background_color_);
467 sync_tree->set_has_transparent_background(has_transparent_background_);
468 sync_tree->set_have_scroll_event_handlers(have_scroll_event_handlers_);
469 sync_tree->set_event_listener_properties(
470 EventListenerClass::kTouchStartOrMove,
471 event_listener_properties(EventListenerClass::kTouchStartOrMove));
472 sync_tree->set_event_listener_properties(
473 EventListenerClass::kMouseWheel,
474 event_listener_properties(EventListenerClass::kMouseWheel));
475 sync_tree->set_event_listener_properties(
476 EventListenerClass::kTouchEndOrCancel,
477 event_listener_properties(EventListenerClass::kTouchEndOrCancel));
478
479 if (page_scale_layer_.get() && inner_viewport_scroll_layer_.get()) {
480 sync_tree->SetViewportLayersFromIds(
481 overscroll_elasticity_layer_.get() ? overscroll_elasticity_layer_->id()
482 : Layer::INVALID_ID,
483 page_scale_layer_->id(), inner_viewport_scroll_layer_->id(),
484 outer_viewport_scroll_layer_.get() ? outer_viewport_scroll_layer_->id()
485 : Layer::INVALID_ID);
486 DCHECK(inner_viewport_scroll_layer_->IsContainerForFixedPositionLayers());
487 } else {
488 sync_tree->ClearViewportLayers();
489 }
490
491 sync_tree->RegisterSelection(selection_);
492
493 bool property_trees_changed_on_active_tree =
494 sync_tree->IsActiveTree() && sync_tree->property_trees()->changed;
495 // Property trees may store damage status. We preserve the sync tree damage
496 // status by pushing the damage status from sync tree property trees to main
497 // thread property trees or by moving it onto the layers.
498 if (root_layer_ && property_trees_changed_on_active_tree) {
499 if (property_trees_.sequence_number ==
500 sync_tree->property_trees()->sequence_number)
501 sync_tree->property_trees()->PushChangeTrackingTo(&property_trees_);
502 else
503 sync_tree->MoveChangeTrackingToLayers();
504 }
505 // Setting property trees must happen before pushing the page scale.
506 sync_tree->SetPropertyTrees(&property_trees_);
507
508 sync_tree->PushPageScaleFromMainThread(
509 page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_);
510 sync_tree->elastic_overscroll()->PushFromMainThread(elastic_overscroll_);
511 if (sync_tree->IsActiveTree())
512 sync_tree->elastic_overscroll()->PushPendingToActive();
513 426
514 sync_tree->PassSwapPromises(std::move(swap_promise_list_)); 427 sync_tree->PassSwapPromises(std::move(swap_promise_list_));
515 428
516 sync_tree->set_top_controls_shrink_blink_size(
517 top_controls_shrink_blink_size_);
518 sync_tree->set_top_controls_height(top_controls_height_);
519 sync_tree->PushTopControlsFromMainThread(top_controls_shown_ratio_);
520
521 host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_); 429 host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_);
522 host_impl->SetContentIsSuitableForGpuRasterization( 430 host_impl->SetContentIsSuitableForGpuRasterization(
523 content_is_suitable_for_gpu_rasterization_); 431 content_is_suitable_for_gpu_rasterization_);
524 RecordGpuRasterizationHistogram(); 432 RecordGpuRasterizationHistogram();
525 433
526 host_impl->SetViewportSize(device_viewport_size_); 434 host_impl->SetViewportSize(layer_tree_->device_viewport_size());
527 // TODO(senorblanco): Move this up so that it happens before GPU rasterization 435 // TODO(senorblanco): Move this to LayerTree::PushPropertiesTo so that it
528 // properties are set, since those trigger an update of GPU rasterization 436 // happens before GPU rasterization properties are set, since those trigger an
529 // status, which depends on the device scale factor. (crbug.com/535700) 437 // update of GPU rasterization status, which depends on the device scale
530 sync_tree->SetDeviceScaleFactor(device_scale_factor_); 438 // factor. (crbug.com/535700)
531 sync_tree->set_painted_device_scale_factor(painted_device_scale_factor_); 439 sync_tree->SetDeviceScaleFactor(layer_tree_->device_scale_factor());
532 host_impl->SetDebugState(debug_state_); 440 host_impl->SetDebugState(debug_state_);
533 if (pending_page_scale_animation_) {
534 sync_tree->SetPendingPageScaleAnimation(
535 std::move(pending_page_scale_animation_));
536 }
537 441
538 if (!ui_resource_request_queue_.empty()) { 442 if (!ui_resource_request_queue_.empty()) {
539 sync_tree->set_ui_resource_request_queue(ui_resource_request_queue_); 443 sync_tree->set_ui_resource_request_queue(ui_resource_request_queue_);
540 ui_resource_request_queue_.clear(); 444 ui_resource_request_queue_.clear();
541 } 445 }
542 446
543 DCHECK(!sync_tree->ViewportSizeInvalid());
544
545 sync_tree->set_has_ever_been_drawn(false);
546
547 { 447 {
548 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties"); 448 TRACE_EVENT0("cc", "LayerTreeHost::PushProperties");
549 449
550 TreeSynchronizer::PushLayerProperties(&layer_tree_, sync_tree); 450 TreeSynchronizer::PushLayerProperties(layer_tree_.get(), sync_tree);
551 451
552 // This must happen after synchronizing property trees and after push 452 // This must happen after synchronizing property trees and after push
553 // properties, which updates property tree indices, but before animation 453 // properties, which updates property tree indices, but before animation
554 // host pushes properties as animation host push properties can change 454 // host pushes properties as animation host push properties can change
555 // Animation::InEffect and we want the old InEffect value for updating 455 // Animation::InEffect and we want the old InEffect value for updating
556 // property tree scrolling and animation. 456 // property tree scrolling and animation.
557 sync_tree->UpdatePropertyTreeScrollingAndAnimationFromMainThread(); 457 sync_tree->UpdatePropertyTreeScrollingAndAnimationFromMainThread();
558 458
559 TRACE_EVENT0("cc", "LayerTreeHost::AnimationHost::PushProperties"); 459 TRACE_EVENT0("cc", "LayerTreeHost::AnimationHost::PushProperties");
560 DCHECK(host_impl->animation_host()); 460 DCHECK(host_impl->animation_host());
561 layer_tree_.animation_host()->PushPropertiesTo(host_impl->animation_host()); 461 layer_tree_->animation_host()->PushPropertiesTo(
loyso (OOO) 2016/08/16 02:55:41 Notice that AnimationHost is owned by LayerTree, b
Khushal 2016/08/16 04:28:53 It can be done there too, we can just pass the imp
Khushal 2016/08/16 21:47:36 I'll land this now because this change is mostly m
462 host_impl->animation_host());
562 } 463 }
563 464
564 // This must happen after synchronizing property trees and after pushing 465 // This must happen after synchronizing property trees and after pushing
565 // properties, which updates the clobber_active_value flag. 466 // properties, which updates the clobber_active_value flag.
566 sync_tree->UpdatePropertyTreeScrollOffset(&property_trees_); 467 sync_tree->UpdatePropertyTreeScrollOffset(layer_tree_->property_trees());
567 468
568 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl); 469 micro_benchmark_controller_.ScheduleImplBenchmarks(host_impl);
569 property_trees_.ResetAllChangeTracking(); 470 layer_tree_->property_trees()->ResetAllChangeTracking();
570 } 471 }
571 472
572 void LayerTreeHost::WillCommit() { 473 void LayerTreeHost::WillCommit() {
573 OnCommitForSwapPromises(); 474 OnCommitForSwapPromises();
574 client_->WillCommit(); 475 client_->WillCommit();
575 } 476 }
576 477
577 void LayerTreeHost::UpdateHudLayer() { 478 void LayerTreeHost::UpdateHudLayer() {
578 if (debug_state_.ShowHudInfo()) {
579 if (!hud_layer_.get()) {
580 hud_layer_ = HeadsUpDisplayLayer::Create();
581 }
582
583 if (root_layer_.get() && !hud_layer_->parent())
584 root_layer_->AddChild(hud_layer_);
585 } else if (hud_layer_.get()) {
586 hud_layer_->RemoveFromParent();
587 hud_layer_ = NULL;
588 }
589 } 479 }
590 480
591 void LayerTreeHost::CommitComplete() { 481 void LayerTreeHost::CommitComplete() {
592 source_frame_number_++; 482 source_frame_number_++;
593 client_->DidCommit(); 483 client_->DidCommit();
594 if (did_complete_scale_animation_) { 484 if (did_complete_scale_animation_) {
595 client_->DidCompletePageScaleAnimation(); 485 client_->DidCompletePageScaleAnimation();
596 did_complete_scale_animation_ = false; 486 did_complete_scale_animation_ = false;
597 } 487 }
598 } 488 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 client_->DidFailToInitializeOutputSurface(); 528 client_->DidFailToInitializeOutputSurface();
639 } 529 }
640 530
641 std::unique_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl( 531 std::unique_ptr<LayerTreeHostImpl> LayerTreeHost::CreateLayerTreeHostImpl(
642 LayerTreeHostImplClient* client) { 532 LayerTreeHostImplClient* client) {
643 DCHECK(!IsRemoteServer()); 533 DCHECK(!IsRemoteServer());
644 DCHECK(task_runner_provider_->IsImplThread()); 534 DCHECK(task_runner_provider_->IsImplThread());
645 535
646 const bool supports_impl_scrolling = task_runner_provider_->HasImplThread(); 536 const bool supports_impl_scrolling = task_runner_provider_->HasImplThread();
647 std::unique_ptr<AnimationHost> animation_host_impl = 537 std::unique_ptr<AnimationHost> animation_host_impl =
648 layer_tree_.animation_host()->CreateImplInstance(supports_impl_scrolling); 538 layer_tree_->animation_host()->CreateImplInstance(
539 supports_impl_scrolling);
649 540
650 std::unique_ptr<LayerTreeHostImpl> host_impl = LayerTreeHostImpl::Create( 541 std::unique_ptr<LayerTreeHostImpl> host_impl = LayerTreeHostImpl::Create(
651 settings_, client, task_runner_provider_.get(), 542 settings_, client, task_runner_provider_.get(),
652 rendering_stats_instrumentation_.get(), shared_bitmap_manager_, 543 rendering_stats_instrumentation_.get(), shared_bitmap_manager_,
653 gpu_memory_buffer_manager_, task_graph_runner_, 544 gpu_memory_buffer_manager_, task_graph_runner_,
654 std::move(animation_host_impl), id_); 545 std::move(animation_host_impl), id_);
655 host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_); 546 host_impl->SetHasGpuRasterizationTrigger(has_gpu_rasterization_trigger_);
656 host_impl->SetContentIsSuitableForGpuRasterization( 547 host_impl->SetContentIsSuitableForGpuRasterization(
657 content_is_suitable_for_gpu_rasterization_); 548 content_is_suitable_for_gpu_rasterization_);
658 shared_bitmap_manager_ = NULL; 549 shared_bitmap_manager_ = NULL;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 void LayerTreeHost::SetNeedsAnimate() { 584 void LayerTreeHost::SetNeedsAnimate() {
694 proxy_->SetNeedsAnimate(); 585 proxy_->SetNeedsAnimate();
695 NotifySwapPromiseMonitorsOfSetNeedsCommit(); 586 NotifySwapPromiseMonitorsOfSetNeedsCommit();
696 } 587 }
697 588
698 void LayerTreeHost::SetNeedsUpdateLayers() { 589 void LayerTreeHost::SetNeedsUpdateLayers() {
699 proxy_->SetNeedsUpdateLayers(); 590 proxy_->SetNeedsUpdateLayers();
700 NotifySwapPromiseMonitorsOfSetNeedsCommit(); 591 NotifySwapPromiseMonitorsOfSetNeedsCommit();
701 } 592 }
702 593
703 void LayerTreeHost::SetPropertyTreesNeedRebuild() {
704 property_trees_.needs_rebuild = true;
705 SetNeedsUpdateLayers();
706 }
707
708 void LayerTreeHost::SetNeedsCommit() { 594 void LayerTreeHost::SetNeedsCommit() {
709 proxy_->SetNeedsCommit(); 595 proxy_->SetNeedsCommit();
710 NotifySwapPromiseMonitorsOfSetNeedsCommit(); 596 NotifySwapPromiseMonitorsOfSetNeedsCommit();
711 } 597 }
712 598
713 void LayerTreeHost::SetNeedsFullTreeSync() {
714 needs_full_tree_sync_ = true;
715 needs_meta_info_recomputation_ = true;
716
717 property_trees_.needs_rebuild = true;
718 SetNeedsCommit();
719 }
720
721 void LayerTreeHost::SetNeedsMetaInfoRecomputation(bool needs_recomputation) {
722 needs_meta_info_recomputation_ = needs_recomputation;
723 }
724
725 void LayerTreeHost::SetNeedsRedraw() { 599 void LayerTreeHost::SetNeedsRedraw() {
726 SetNeedsRedrawRect(gfx::Rect(device_viewport_size_)); 600 SetNeedsRedrawRect(gfx::Rect(layer_tree_->device_viewport_size()));
727 } 601 }
728 602
729 void LayerTreeHost::SetNeedsRedrawRect(const gfx::Rect& damage_rect) { 603 void LayerTreeHost::SetNeedsRedrawRect(const gfx::Rect& damage_rect) {
730 proxy_->SetNeedsRedraw(damage_rect); 604 proxy_->SetNeedsRedraw(damage_rect);
731 } 605 }
732 606
733 bool LayerTreeHost::CommitRequested() const { 607 bool LayerTreeHost::CommitRequested() const {
734 return proxy_->CommitRequested(); 608 return proxy_->CommitRequested();
735 } 609 }
736 610
737 bool LayerTreeHost::BeginMainFrameRequested() const { 611 bool LayerTreeHost::BeginMainFrameRequested() const {
738 return proxy_->BeginMainFrameRequested(); 612 return proxy_->BeginMainFrameRequested();
739 } 613 }
740 614
741 void LayerTreeHost::SetNextCommitWaitsForActivation() { 615 void LayerTreeHost::SetNextCommitWaitsForActivation() {
742 proxy_->SetNextCommitWaitsForActivation(); 616 proxy_->SetNextCommitWaitsForActivation();
743 } 617 }
744 618
745 void LayerTreeHost::SetNextCommitForcesRedraw() { 619 void LayerTreeHost::SetNextCommitForcesRedraw() {
746 next_commit_forces_redraw_ = true; 620 next_commit_forces_redraw_ = true;
747 proxy_->SetNeedsUpdateLayers(); 621 proxy_->SetNeedsUpdateLayers();
748 } 622 }
749 623
750 void LayerTreeHost::SetAnimationEvents( 624 void LayerTreeHost::SetAnimationEvents(
751 std::unique_ptr<AnimationEvents> events) { 625 std::unique_ptr<AnimationEvents> events) {
752 DCHECK(task_runner_provider_->IsMainThread()); 626 DCHECK(task_runner_provider_->IsMainThread());
753 layer_tree_.animation_host()->SetAnimationEvents(std::move(events)); 627 layer_tree_->animation_host()->SetAnimationEvents(std::move(events));
754 }
755
756 void LayerTreeHost::SetRootLayer(scoped_refptr<Layer> root_layer) {
757 if (root_layer_.get() == root_layer.get())
758 return;
759
760 if (root_layer_.get())
761 root_layer_->SetLayerTreeHost(NULL);
762 root_layer_ = root_layer;
763 if (root_layer_.get()) {
764 DCHECK(!root_layer_->parent());
765 root_layer_->SetLayerTreeHost(this);
766 }
767
768 if (hud_layer_.get())
769 hud_layer_->RemoveFromParent();
770
771 // Reset gpu rasterization flag.
772 // This flag is sticky until a new tree comes along.
773 content_is_suitable_for_gpu_rasterization_ = true;
774 gpu_rasterization_histogram_recorded_ = false;
775
776 SetNeedsFullTreeSync();
777 } 628 }
778 629
779 void LayerTreeHost::SetDebugState(const LayerTreeDebugState& debug_state) { 630 void LayerTreeHost::SetDebugState(const LayerTreeDebugState& debug_state) {
780 LayerTreeDebugState new_debug_state = 631 LayerTreeDebugState new_debug_state =
781 LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state); 632 LayerTreeDebugState::Unite(settings_.initial_debug_state, debug_state);
782 633
783 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state)) 634 if (LayerTreeDebugState::Equal(debug_state_, new_debug_state))
784 return; 635 return;
785 636
786 debug_state_ = new_debug_state; 637 debug_state_ = new_debug_state;
787 638
788 rendering_stats_instrumentation_->set_record_rendering_stats( 639 rendering_stats_instrumentation_->set_record_rendering_stats(
789 debug_state_.RecordRenderingStats()); 640 debug_state_.RecordRenderingStats());
790 641
791 SetNeedsCommit(); 642 SetNeedsCommit();
792 } 643 }
793 644
645 void LayerTreeHost::ResetGpuRasterizationTracking() {
646 content_is_suitable_for_gpu_rasterization_ = true;
647 gpu_rasterization_histogram_recorded_ = false;
648 }
649
794 void LayerTreeHost::SetHasGpuRasterizationTrigger(bool has_trigger) { 650 void LayerTreeHost::SetHasGpuRasterizationTrigger(bool has_trigger) {
795 if (has_trigger == has_gpu_rasterization_trigger_) 651 if (has_trigger == has_gpu_rasterization_trigger_)
796 return; 652 return;
797 653
798 has_gpu_rasterization_trigger_ = has_trigger; 654 has_gpu_rasterization_trigger_ = has_trigger;
799 TRACE_EVENT_INSTANT1("cc", 655 TRACE_EVENT_INSTANT1("cc",
800 "LayerTreeHost::SetHasGpuRasterizationTrigger", 656 "LayerTreeHost::SetHasGpuRasterizationTrigger",
801 TRACE_EVENT_SCOPE_THREAD, 657 TRACE_EVENT_SCOPE_THREAD,
802 "has_trigger", 658 "has_trigger",
803 has_gpu_rasterization_trigger_); 659 has_gpu_rasterization_trigger_);
804 } 660 }
805 661
806 void LayerTreeHost::SetViewportSize(const gfx::Size& device_viewport_size) {
807 if (device_viewport_size == device_viewport_size_)
808 return;
809
810 device_viewport_size_ = device_viewport_size;
811
812 SetPropertyTreesNeedRebuild();
813 SetNeedsCommit();
814 }
815
816 void LayerTreeHost::SetTopControlsHeight(float height, bool shrink) {
817 if (top_controls_height_ == height &&
818 top_controls_shrink_blink_size_ == shrink)
819 return;
820
821 top_controls_height_ = height;
822 top_controls_shrink_blink_size_ = shrink;
823 SetNeedsCommit();
824 }
825
826 void LayerTreeHost::SetTopControlsShownRatio(float ratio) {
827 if (top_controls_shown_ratio_ == ratio)
828 return;
829
830 top_controls_shown_ratio_ = ratio;
831 SetNeedsCommit();
832 }
833
834 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) { 662 void LayerTreeHost::ApplyPageScaleDeltaFromImplSide(float page_scale_delta) {
835 DCHECK(CommitRequested()); 663 DCHECK(CommitRequested());
836 if (page_scale_delta == 1.f) 664 if (page_scale_delta == 1.f)
837 return; 665 return;
838 page_scale_factor_ *= page_scale_delta; 666 float page_scale = layer_tree_->page_scale_factor() * page_scale_delta;
839 SetPropertyTreesNeedRebuild(); 667 layer_tree_->SetPageScaleFromImplSide(page_scale);
840 }
841
842 void LayerTreeHost::SetPageScaleFactorAndLimits(float page_scale_factor,
843 float min_page_scale_factor,
844 float max_page_scale_factor) {
845 if (page_scale_factor == page_scale_factor_ &&
846 min_page_scale_factor == min_page_scale_factor_ &&
847 max_page_scale_factor == max_page_scale_factor_)
848 return;
849
850 page_scale_factor_ = page_scale_factor;
851 min_page_scale_factor_ = min_page_scale_factor;
852 max_page_scale_factor_ = max_page_scale_factor;
853 SetPropertyTreesNeedRebuild();
854 SetNeedsCommit();
855 } 668 }
856 669
857 void LayerTreeHost::SetVisible(bool visible) { 670 void LayerTreeHost::SetVisible(bool visible) {
858 if (visible_ == visible) 671 if (visible_ == visible)
859 return; 672 return;
860 visible_ = visible; 673 visible_ = visible;
861 proxy_->SetVisible(visible); 674 proxy_->SetVisible(visible);
862 } 675 }
863 676
864 void LayerTreeHost::StartPageScaleAnimation(const gfx::Vector2d& target_offset,
865 bool use_anchor,
866 float scale,
867 base::TimeDelta duration) {
868 pending_page_scale_animation_.reset(
869 new PendingPageScaleAnimation(
870 target_offset,
871 use_anchor,
872 scale,
873 duration));
874
875 SetNeedsCommit();
876 }
877
878 bool LayerTreeHost::HasPendingPageScaleAnimation() const {
879 return !!pending_page_scale_animation_.get();
880 }
881
882 void LayerTreeHost::NotifyInputThrottledUntilCommit() { 677 void LayerTreeHost::NotifyInputThrottledUntilCommit() {
883 proxy_->NotifyInputThrottledUntilCommit(); 678 proxy_->NotifyInputThrottledUntilCommit();
884 } 679 }
885 680
886 void LayerTreeHost::LayoutAndUpdateLayers() { 681 void LayerTreeHost::LayoutAndUpdateLayers() {
887 DCHECK(IsSingleThreaded()); 682 DCHECK(IsSingleThreaded());
888 // This function is only valid when not using the scheduler. 683 // This function is only valid when not using the scheduler.
889 DCHECK(!settings_.single_thread_proxy_scheduler); 684 DCHECK(!settings_.single_thread_proxy_scheduler);
890 SingleThreadProxy* proxy = static_cast<SingleThreadProxy*>(proxy_.get()); 685 SingleThreadProxy* proxy = static_cast<SingleThreadProxy*>(proxy_.get());
891 686
(...skipping 13 matching lines...) Expand all
905 DCHECK(IsSingleThreaded()); 700 DCHECK(IsSingleThreaded());
906 // This function is only valid when not using the scheduler. 701 // This function is only valid when not using the scheduler.
907 DCHECK(!settings_.single_thread_proxy_scheduler); 702 DCHECK(!settings_.single_thread_proxy_scheduler);
908 SingleThreadProxy* proxy = static_cast<SingleThreadProxy*>(proxy_.get()); 703 SingleThreadProxy* proxy = static_cast<SingleThreadProxy*>(proxy_.get());
909 704
910 proxy->CompositeImmediately(frame_begin_time); 705 proxy->CompositeImmediately(frame_begin_time);
911 } 706 }
912 707
913 bool LayerTreeHost::UpdateLayers() { 708 bool LayerTreeHost::UpdateLayers() {
914 DCHECK(!output_surface_lost_); 709 DCHECK(!output_surface_lost_);
915 if (!root_layer()) 710 if (!layer_tree_->root_layer())
916 return false; 711 return false;
917 DCHECK(!root_layer()->parent()); 712 DCHECK(!layer_tree_->root_layer()->parent());
918 bool result = DoUpdateLayers(root_layer()); 713 bool result = DoUpdateLayers(layer_tree_->root_layer());
919 micro_benchmark_controller_.DidUpdateLayers(); 714 micro_benchmark_controller_.DidUpdateLayers();
920 return result || next_commit_forces_redraw_; 715 return result || next_commit_forces_redraw_;
921 } 716 }
922 717
923 LayerListIterator<Layer> LayerTreeHost::begin() const { 718 LayerListIterator<Layer> LayerTreeHost::begin() const {
924 return LayerListIterator<Layer>(root_layer_.get()); 719 return LayerListIterator<Layer>(layer_tree_->root_layer());
925 } 720 }
926 721
927 LayerListIterator<Layer> LayerTreeHost::end() const { 722 LayerListIterator<Layer> LayerTreeHost::end() const {
928 return LayerListIterator<Layer>(nullptr); 723 return LayerListIterator<Layer>(nullptr);
929 } 724 }
930 725
931 LayerListReverseIterator<Layer> LayerTreeHost::rbegin() { 726 LayerListReverseIterator<Layer> LayerTreeHost::rbegin() {
932 return LayerListReverseIterator<Layer>(root_layer_.get()); 727 return LayerListReverseIterator<Layer>(layer_tree_->root_layer());
933 } 728 }
934 729
935 LayerListReverseIterator<Layer> LayerTreeHost::rend() { 730 LayerListReverseIterator<Layer> LayerTreeHost::rend() {
936 return LayerListReverseIterator<Layer>(nullptr); 731 return LayerListReverseIterator<Layer>(nullptr);
937 } 732 }
938 733
939 void LayerTreeHost::DidCompletePageScaleAnimation() { 734 void LayerTreeHost::DidCompletePageScaleAnimation() {
940 did_complete_scale_animation_ = true; 735 did_complete_scale_animation_ = true;
941 } 736 }
942 737
(...skipping 17 matching lines...) Expand all
960 // Record how many pages actually get gpu rasterization when enabled. 755 // Record how many pages actually get gpu rasterization when enabled.
961 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationUsed", 756 UMA_HISTOGRAM_BOOLEAN("Renderer4.GpuRasterizationUsed",
962 (has_gpu_rasterization_trigger_ && 757 (has_gpu_rasterization_trigger_ &&
963 content_is_suitable_for_gpu_rasterization_)); 758 content_is_suitable_for_gpu_rasterization_));
964 } 759 }
965 760
966 gpu_rasterization_histogram_recorded_ = true; 761 gpu_rasterization_histogram_recorded_ = true;
967 } 762 }
968 763
969 void LayerTreeHost::BuildPropertyTreesForTesting() { 764 void LayerTreeHost::BuildPropertyTreesForTesting() {
970 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer_.get()); 765 PropertyTreeBuilder::PreCalculateMetaInformation(layer_tree_->root_layer());
971 gfx::Transform identity_transform; 766 gfx::Transform identity_transform;
972 PropertyTreeBuilder::BuildPropertyTrees( 767 PropertyTreeBuilder::BuildPropertyTrees(
973 root_layer_.get(), page_scale_layer_.get(), 768 layer_tree_->root_layer(), layer_tree_->page_scale_layer(),
974 inner_viewport_scroll_layer_.get(), outer_viewport_scroll_layer_.get(), 769 layer_tree_->inner_viewport_scroll_layer(),
975 overscroll_elasticity_layer_.get(), elastic_overscroll_, 770 layer_tree_->outer_viewport_scroll_layer(),
976 page_scale_factor_, device_scale_factor_, 771 layer_tree_->overscroll_elasticity_layer(), elastic_overscroll_,
977 gfx::Rect(device_viewport_size_), identity_transform, &property_trees_); 772 layer_tree_->page_scale_factor(), layer_tree_->device_scale_factor(),
773 gfx::Rect(layer_tree_->device_viewport_size()), identity_transform,
774 layer_tree_->property_trees());
978 } 775 }
979 776
980 static void SetElementIdForTesting(Layer* layer) { 777 static void SetElementIdForTesting(Layer* layer) {
981 layer->SetElementId(LayerIdToElementIdForTesting(layer->id())); 778 layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
982 } 779 }
983 780
984 void LayerTreeHost::SetElementIdsForTesting() { 781 void LayerTreeHost::SetElementIdsForTesting() {
985 LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting); 782 LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting);
986 } 783 }
987 784
988 bool LayerTreeHost::UsingSharedMemoryResources() { 785 bool LayerTreeHost::UsingSharedMemoryResources() {
989 return GetRendererCapabilities().using_shared_memory_resources; 786 return GetRendererCapabilities().using_shared_memory_resources;
990 } 787 }
991 788
992 bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) { 789 bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) {
993 TRACE_EVENT1("cc", "LayerTreeHost::DoUpdateLayers", "source_frame_number", 790 TRACE_EVENT1("cc", "LayerTreeHost::DoUpdateLayers", "source_frame_number",
994 source_frame_number()); 791 source_frame_number());
995 792
793 layer_tree_->UpdateHudLayer(debug_state_.ShowHudInfo());
996 UpdateHudLayer(); 794 UpdateHudLayer();
997 795
998 Layer* root_scroll = 796 Layer* root_scroll =
999 PropertyTreeBuilder::FindFirstScrollableLayer(root_layer); 797 PropertyTreeBuilder::FindFirstScrollableLayer(root_layer);
1000 Layer* page_scale_layer = page_scale_layer_.get(); 798 Layer* page_scale_layer = layer_tree_->page_scale_layer();
1001 if (!page_scale_layer && root_scroll) 799 if (!page_scale_layer && root_scroll)
1002 page_scale_layer = root_scroll->parent(); 800 page_scale_layer = root_scroll->parent();
1003 801
1004 if (hud_layer_.get()) { 802 if (layer_tree_->hud_layer()) {
1005 hud_layer_->PrepareForCalculateDrawProperties(device_viewport_size(), 803 layer_tree_->hud_layer()->PrepareForCalculateDrawProperties(
1006 device_scale_factor_); 804 layer_tree_->device_viewport_size(),
805 layer_tree_->device_scale_factor());
1007 } 806 }
1008 807
1009 gfx::Transform identity_transform; 808 gfx::Transform identity_transform;
1010 LayerList update_layer_list; 809 LayerList update_layer_list;
1011 810
1012 { 811 {
1013 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::BuildPropertyTrees"); 812 TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::BuildPropertyTrees");
1014 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"), 813 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"),
1015 "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees"); 814 "LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees");
1016 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer); 815 PropertyTreeBuilder::PreCalculateMetaInformation(root_layer);
1017 bool can_render_to_separate_surface = true; 816 bool can_render_to_separate_surface = true;
817 PropertyTrees* property_trees = layer_tree_->property_trees();
1018 if (!settings_.use_layer_lists) { 818 if (!settings_.use_layer_lists) {
1019 // If use_layer_lists is set, then the property trees should have been 819 // If use_layer_lists is set, then the property trees should have been
1020 // built by the client already. 820 // built by the client already.
1021 PropertyTreeBuilder::BuildPropertyTrees( 821 PropertyTreeBuilder::BuildPropertyTrees(
1022 root_layer, page_scale_layer, inner_viewport_scroll_layer_.get(), 822 root_layer, page_scale_layer,
1023 outer_viewport_scroll_layer_.get(), 823 layer_tree_->inner_viewport_scroll_layer(),
1024 overscroll_elasticity_layer_.get(), elastic_overscroll_, 824 layer_tree_->outer_viewport_scroll_layer(),
1025 page_scale_factor_, device_scale_factor_, 825 layer_tree_->overscroll_elasticity_layer(), elastic_overscroll_,
1026 gfx::Rect(device_viewport_size_), identity_transform, 826 layer_tree_->page_scale_factor(), layer_tree_->device_scale_factor(),
1027 &property_trees_); 827 gfx::Rect(layer_tree_->device_viewport_size()), identity_transform,
828 property_trees);
1028 TRACE_EVENT_INSTANT1("cc", 829 TRACE_EVENT_INSTANT1("cc",
1029 "LayerTreeHost::UpdateLayers_BuiltPropertyTrees", 830 "LayerTreeHost::UpdateLayers_BuiltPropertyTrees",
1030 TRACE_EVENT_SCOPE_THREAD, "property_trees", 831 TRACE_EVENT_SCOPE_THREAD, "property_trees",
1031 property_trees_.AsTracedValue()); 832 property_trees->AsTracedValue());
1032 } else { 833 } else {
1033 TRACE_EVENT_INSTANT1("cc", 834 TRACE_EVENT_INSTANT1("cc",
1034 "LayerTreeHost::UpdateLayers_ReceivedPropertyTrees", 835 "LayerTreeHost::UpdateLayers_ReceivedPropertyTrees",
1035 TRACE_EVENT_SCOPE_THREAD, "property_trees", 836 TRACE_EVENT_SCOPE_THREAD, "property_trees",
1036 property_trees_.AsTracedValue()); 837 property_trees->AsTracedValue());
1037 } 838 }
1038 draw_property_utils::UpdatePropertyTrees(&property_trees_, 839 draw_property_utils::UpdatePropertyTrees(property_trees,
1039 can_render_to_separate_surface); 840 can_render_to_separate_surface);
1040 draw_property_utils::FindLayersThatNeedUpdates( 841 draw_property_utils::FindLayersThatNeedUpdates(
1041 this, property_trees_.transform_tree, property_trees_.effect_tree, 842 this, property_trees->transform_tree, property_trees->effect_tree,
1042 &update_layer_list); 843 &update_layer_list);
1043 } 844 }
1044 845
1045 for (const auto& layer : update_layer_list) 846 for (const auto& layer : update_layer_list)
1046 layer->SavePaintProperties(); 847 layer->SavePaintProperties();
1047 848
1048 bool content_is_suitable_for_gpu = true; 849 bool content_is_suitable_for_gpu = true;
1049 bool did_paint_content = 850 bool did_paint_content = layer_tree_->UpdateLayers(
1050 layer_tree_.UpdateLayers(update_layer_list, &content_is_suitable_for_gpu); 851 update_layer_list, &content_is_suitable_for_gpu);
1051 852
1052 if (content_is_suitable_for_gpu) { 853 if (content_is_suitable_for_gpu) {
1053 ++num_consecutive_frames_suitable_for_gpu_; 854 ++num_consecutive_frames_suitable_for_gpu_;
1054 if (num_consecutive_frames_suitable_for_gpu_ >= 855 if (num_consecutive_frames_suitable_for_gpu_ >=
1055 kNumFramesToConsiderBeforeGpuRasterization) { 856 kNumFramesToConsiderBeforeGpuRasterization) {
1056 content_is_suitable_for_gpu_rasterization_ = true; 857 content_is_suitable_for_gpu_rasterization_ = true;
1057 } 858 }
1058 } else { 859 } else {
1059 num_consecutive_frames_suitable_for_gpu_ = 0; 860 num_consecutive_frames_suitable_for_gpu_ = 0;
1060 content_is_suitable_for_gpu_rasterization_ = false; 861 content_is_suitable_for_gpu_rasterization_ = false;
1061 } 862 }
1062 return did_paint_content; 863 return did_paint_content;
1063 } 864 }
1064 865
1065 void LayerTreeHost::ApplyViewportDeltas(ScrollAndScaleSet* info) { 866 void LayerTreeHost::ApplyViewportDeltas(ScrollAndScaleSet* info) {
1066 gfx::Vector2dF inner_viewport_scroll_delta; 867 gfx::Vector2dF inner_viewport_scroll_delta;
1067 if (info->inner_viewport_scroll.layer_id != Layer::INVALID_ID) 868 if (info->inner_viewport_scroll.layer_id != Layer::INVALID_ID)
1068 inner_viewport_scroll_delta = info->inner_viewport_scroll.scroll_delta; 869 inner_viewport_scroll_delta = info->inner_viewport_scroll.scroll_delta;
1069 870
1070 if (inner_viewport_scroll_delta.IsZero() && info->page_scale_delta == 1.f && 871 if (inner_viewport_scroll_delta.IsZero() && info->page_scale_delta == 1.f &&
1071 info->elastic_overscroll_delta.IsZero() && !info->top_controls_delta) 872 info->elastic_overscroll_delta.IsZero() && !info->top_controls_delta)
1072 return; 873 return;
1073 874
1074 // Preemptively apply the scroll offset and scale delta here before sending 875 // Preemptively apply the scroll offset and scale delta here before sending
1075 // it to the client. If the client comes back and sets it to the same 876 // it to the client. If the client comes back and sets it to the same
1076 // value, then the layer can early out without needing a full commit. 877 // value, then the layer can early out without needing a full commit.
1077 if (inner_viewport_scroll_layer_.get()) { 878 if (layer_tree_->inner_viewport_scroll_layer()) {
1078 inner_viewport_scroll_layer_->SetScrollOffsetFromImplSide( 879 layer_tree_->inner_viewport_scroll_layer()->SetScrollOffsetFromImplSide(
1079 gfx::ScrollOffsetWithDelta( 880 gfx::ScrollOffsetWithDelta(
1080 inner_viewport_scroll_layer_->scroll_offset(), 881 layer_tree_->inner_viewport_scroll_layer()->scroll_offset(),
1081 inner_viewport_scroll_delta)); 882 inner_viewport_scroll_delta));
1082 } 883 }
1083 884
1084 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta); 885 ApplyPageScaleDeltaFromImplSide(info->page_scale_delta);
1085 elastic_overscroll_ += info->elastic_overscroll_delta; 886 elastic_overscroll_ += info->elastic_overscroll_delta;
1086 // TODO(ccameron): pass the elastic overscroll here so that input events 887 // TODO(ccameron): pass the elastic overscroll here so that input events
1087 // may be translated appropriately. 888 // may be translated appropriately.
1088 client_->ApplyViewportDeltas(inner_viewport_scroll_delta, gfx::Vector2dF(), 889 client_->ApplyViewportDeltas(inner_viewport_scroll_delta, gfx::Vector2dF(),
1089 info->elastic_overscroll_delta, 890 info->elastic_overscroll_delta,
1090 info->page_scale_delta, 891 info->page_scale_delta,
1091 info->top_controls_delta); 892 info->top_controls_delta);
1092 SetNeedsUpdateLayers(); 893 SetNeedsUpdateLayers();
1093 } 894 }
1094 895
1095 void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) { 896 void LayerTreeHost::ApplyScrollAndScale(ScrollAndScaleSet* info) {
1096 for (auto& swap_promise : info->swap_promises) { 897 for (auto& swap_promise : info->swap_promises) {
1097 TRACE_EVENT_WITH_FLOW1("input,benchmark", 898 TRACE_EVENT_WITH_FLOW1("input,benchmark",
1098 "LatencyInfo.Flow", 899 "LatencyInfo.Flow",
1099 TRACE_ID_DONT_MANGLE(swap_promise->TraceId()), 900 TRACE_ID_DONT_MANGLE(swap_promise->TraceId()),
1100 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, 901 TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT,
1101 "step", "Main thread scroll update"); 902 "step", "Main thread scroll update");
1102 QueueSwapPromise(std::move(swap_promise)); 903 QueueSwapPromise(std::move(swap_promise));
1103 } 904 }
1104 905
1105 if (root_layer_.get()) { 906 if (layer_tree_->root_layer()) {
1106 for (size_t i = 0; i < info->scrolls.size(); ++i) { 907 for (size_t i = 0; i < info->scrolls.size(); ++i) {
1107 Layer* layer = LayerById(info->scrolls[i].layer_id); 908 Layer* layer = LayerById(info->scrolls[i].layer_id);
1108 if (!layer) 909 if (!layer)
1109 continue; 910 continue;
1110 layer->SetScrollOffsetFromImplSide(gfx::ScrollOffsetWithDelta( 911 layer->SetScrollOffsetFromImplSide(gfx::ScrollOffsetWithDelta(
1111 layer->scroll_offset(), info->scrolls[i].scroll_delta)); 912 layer->scroll_offset(), info->scrolls[i].scroll_delta));
1112 SetNeedsUpdateLayers(); 913 SetNeedsUpdateLayers();
1113 } 914 }
1114 } 915 }
1115 916
1116 // This needs to happen after scroll deltas have been sent to prevent top 917 // This needs to happen after scroll deltas have been sent to prevent top
1117 // controls from clamping the layout viewport both on the compositor and 918 // controls from clamping the layout viewport both on the compositor and
1118 // on the main thread. 919 // on the main thread.
1119 ApplyViewportDeltas(info); 920 ApplyViewportDeltas(info);
1120 } 921 }
1121 922
1122 void LayerTreeHost::SetDeviceScaleFactor(float device_scale_factor) {
1123 if (device_scale_factor == device_scale_factor_)
1124 return;
1125 device_scale_factor_ = device_scale_factor;
1126
1127 property_trees_.needs_rebuild = true;
1128 SetNeedsCommit();
1129 }
1130
1131 void LayerTreeHost::SetPaintedDeviceScaleFactor(
1132 float painted_device_scale_factor) {
1133 if (painted_device_scale_factor == painted_device_scale_factor_)
1134 return;
1135 painted_device_scale_factor_ = painted_device_scale_factor;
1136
1137 SetNeedsCommit();
1138 }
1139
1140 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints, 923 void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints,
1141 TopControlsState current, 924 TopControlsState current,
1142 bool animate) { 925 bool animate) {
1143 // Top controls are only used in threaded or remote mode. 926 // Top controls are only used in threaded or remote mode.
1144 DCHECK(IsThreaded() || IsRemoteServer()); 927 DCHECK(IsThreaded() || IsRemoteServer());
1145 proxy_->UpdateTopControlsState(constraints, current, animate); 928 proxy_->UpdateTopControlsState(constraints, current, animate);
1146 } 929 }
1147 930
1148 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) { 931 void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) {
1149 AnimationHost* animation_host = layer_tree_.animation_host(); 932 AnimationHost* animation_host = layer_tree_->animation_host();
1150 std::unique_ptr<AnimationEvents> events = animation_host->CreateEvents(); 933 std::unique_ptr<AnimationEvents> events = animation_host->CreateEvents();
1151 934
1152 if (animation_host->AnimateLayers(monotonic_time)) 935 if (animation_host->AnimateLayers(monotonic_time))
1153 animation_host->UpdateAnimationState(true, events.get()); 936 animation_host->UpdateAnimationState(true, events.get());
1154 937
1155 if (!events->events_.empty()) 938 if (!events->events_.empty())
1156 property_trees_.needs_rebuild = true; 939 layer_tree_->property_trees()->needs_rebuild = true;
1157 } 940 }
1158 941
1159 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) { 942 UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
1160 DCHECK(client); 943 DCHECK(client);
1161 944
1162 UIResourceId next_id = next_ui_resource_id_++; 945 UIResourceId next_id = next_ui_resource_id_++;
1163 DCHECK(ui_resource_client_map_.find(next_id) == 946 DCHECK(ui_resource_client_map_.find(next_id) ==
1164 ui_resource_client_map_.end()); 947 ui_resource_client_map_.end());
1165 948
1166 bool resource_lost = false; 949 bool resource_lost = false;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 // Returns the size of a resource given its id. 986 // Returns the size of a resource given its id.
1204 gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const { 987 gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const {
1205 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid); 988 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid);
1206 if (iter == ui_resource_client_map_.end()) 989 if (iter == ui_resource_client_map_.end())
1207 return gfx::Size(); 990 return gfx::Size();
1208 991
1209 const UIResourceClientData& data = iter->second; 992 const UIResourceClientData& data = iter->second;
1210 return data.size; 993 return data.size;
1211 } 994 }
1212 995
1213 void LayerTreeHost::RegisterViewportLayers(
1214 scoped_refptr<Layer> overscroll_elasticity_layer,
1215 scoped_refptr<Layer> page_scale_layer,
1216 scoped_refptr<Layer> inner_viewport_scroll_layer,
1217 scoped_refptr<Layer> outer_viewport_scroll_layer) {
1218 DCHECK(!inner_viewport_scroll_layer ||
1219 inner_viewport_scroll_layer != outer_viewport_scroll_layer);
1220 overscroll_elasticity_layer_ = overscroll_elasticity_layer;
1221 page_scale_layer_ = page_scale_layer;
1222 inner_viewport_scroll_layer_ = inner_viewport_scroll_layer;
1223 outer_viewport_scroll_layer_ = outer_viewport_scroll_layer;
1224 }
1225
1226 void LayerTreeHost::RegisterSelection(const LayerSelection& selection) {
1227 if (selection_ == selection)
1228 return;
1229
1230 selection_ = selection;
1231 SetNeedsCommit();
1232 }
1233
1234 void LayerTreeHost::SetHaveScrollEventHandlers(bool have_event_handlers) {
1235 if (have_scroll_event_handlers_ == have_event_handlers)
1236 return;
1237
1238 have_scroll_event_handlers_ = have_event_handlers;
1239 SetNeedsCommit();
1240 }
1241
1242 void LayerTreeHost::SetEventListenerProperties(
1243 EventListenerClass event_class,
1244 EventListenerProperties properties) {
1245 const size_t index = static_cast<size_t>(event_class);
1246 if (event_listener_properties_[index] == properties)
1247 return;
1248
1249 event_listener_properties_[index] = properties;
1250 SetNeedsCommit();
1251 }
1252
1253 int LayerTreeHost::ScheduleMicroBenchmark( 996 int LayerTreeHost::ScheduleMicroBenchmark(
1254 const std::string& benchmark_name, 997 const std::string& benchmark_name,
1255 std::unique_ptr<base::Value> value, 998 std::unique_ptr<base::Value> value,
1256 const MicroBenchmark::DoneCallback& callback) { 999 const MicroBenchmark::DoneCallback& callback) {
1257 return micro_benchmark_controller_.ScheduleRun(benchmark_name, 1000 return micro_benchmark_controller_.ScheduleRun(benchmark_name,
1258 std::move(value), callback); 1001 std::move(value), callback);
1259 } 1002 }
1260 1003
1261 bool LayerTreeHost::SendMessageToMicroBenchmark( 1004 bool LayerTreeHost::SendMessageToMicroBenchmark(
1262 int id, 1005 int id,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 SurfaceSequence LayerTreeHost::CreateSurfaceSequence() { 1051 SurfaceSequence LayerTreeHost::CreateSurfaceSequence() {
1309 return SurfaceSequence(surface_client_id_, next_surface_sequence_++); 1052 return SurfaceSequence(surface_client_id_, next_surface_sequence_++);
1310 } 1053 }
1311 1054
1312 void LayerTreeHost::SetLayerTreeMutator( 1055 void LayerTreeHost::SetLayerTreeMutator(
1313 std::unique_ptr<LayerTreeMutator> mutator) { 1056 std::unique_ptr<LayerTreeMutator> mutator) {
1314 proxy_->SetMutator(std::move(mutator)); 1057 proxy_->SetMutator(std::move(mutator));
1315 } 1058 }
1316 1059
1317 Layer* LayerTreeHost::LayerById(int id) const { 1060 Layer* LayerTreeHost::LayerById(int id) const {
1318 return layer_tree_.LayerById(id); 1061 return layer_tree_->LayerById(id);
1319 } 1062 }
1320 1063
1321 Layer* LayerTreeHost::LayerByElementId(ElementId element_id) const { 1064 Layer* LayerTreeHost::LayerByElementId(ElementId element_id) const {
1322 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id); 1065 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
1323 return iter != element_layers_map_.end() ? iter->second : nullptr; 1066 return iter != element_layers_map_.end() ? iter->second : nullptr;
1324 } 1067 }
1325 1068
1326 void LayerTreeHost::AddToElementMap(Layer* layer) { 1069 void LayerTreeHost::AddToElementMap(Layer* layer) {
1327 if (!layer->element_id()) 1070 if (!layer->element_id())
1328 return; 1071 return;
(...skipping 11 matching lines...) Expand all
1340 bool LayerTreeHost::IsElementInList(ElementId element_id, 1083 bool LayerTreeHost::IsElementInList(ElementId element_id,
1341 ElementListType list_type) const { 1084 ElementListType list_type) const {
1342 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id); 1085 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
1343 } 1086 }
1344 1087
1345 void LayerTreeHost::SetMutatorsNeedCommit() { 1088 void LayerTreeHost::SetMutatorsNeedCommit() {
1346 SetNeedsCommit(); 1089 SetNeedsCommit();
1347 } 1090 }
1348 1091
1349 void LayerTreeHost::SetMutatorsNeedRebuildPropertyTrees() { 1092 void LayerTreeHost::SetMutatorsNeedRebuildPropertyTrees() {
1350 property_trees_.needs_rebuild = true; 1093 layer_tree_->property_trees()->needs_rebuild = true;
1351 } 1094 }
1352 1095
1353 void LayerTreeHost::SetElementFilterMutated(ElementId element_id, 1096 void LayerTreeHost::SetElementFilterMutated(ElementId element_id,
1354 ElementListType list_type, 1097 ElementListType list_type,
1355 const FilterOperations& filters) { 1098 const FilterOperations& filters) {
1356 Layer* layer = LayerByElementId(element_id); 1099 Layer* layer = LayerByElementId(element_id);
1357 DCHECK(layer); 1100 DCHECK(layer);
1358 layer->OnFilterAnimated(filters); 1101 layer->OnFilterAnimated(filters);
1359 } 1102 }
1360 1103
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 // LayerTreeHost, so they are serialized outside of the LayerTreeHost 1244 // LayerTreeHost, so they are serialized outside of the LayerTreeHost
1502 // serialization. 1245 // serialization.
1503 // - The |visible_| flag will be controlled from the client separately and 1246 // - The |visible_| flag will be controlled from the client separately and
1504 // will need special handling outside of the serialization of the 1247 // will need special handling outside of the serialization of the
1505 // LayerTreeHost. 1248 // LayerTreeHost.
1506 // TODO(nyquist): Figure out how to support animations. See crbug.com/570376. 1249 // TODO(nyquist): Figure out how to support animations. See crbug.com/570376.
1507 TRACE_EVENT0("cc.remote", "LayerTreeHost::ToProtobufForCommit"); 1250 TRACE_EVENT0("cc.remote", "LayerTreeHost::ToProtobufForCommit");
1508 swap_promises->swap(swap_promise_list_); 1251 swap_promises->swap(swap_promise_list_);
1509 DCHECK(swap_promise_list_.empty()); 1252 DCHECK(swap_promise_list_.empty());
1510 1253
1511 proto->set_needs_full_tree_sync(needs_full_tree_sync_);
1512 proto->set_needs_meta_info_recomputation(needs_meta_info_recomputation_);
1513 proto->set_source_frame_number(source_frame_number_); 1254 proto->set_source_frame_number(source_frame_number_);
1514 1255
1515 LayerProtoConverter::SerializeLayerHierarchy(root_layer_,
1516 proto->mutable_root_layer());
1517
1518 // Serialize the LayerTree before serializing the properties. During layer 1256 // Serialize the LayerTree before serializing the properties. During layer
1519 // property serialization, we clear the list |layer_that_should_properties_| 1257 // property serialization, we clear the list |layer_that_should_properties_|
1520 // from the LayerTree. 1258 // from the LayerTree.
1521 layer_tree_.ToProtobuf(proto->mutable_layer_tree()); 1259 layer_tree_->ToProtobuf(proto->mutable_layer_tree());
1522 1260
1523 LayerProtoConverter::SerializeLayerProperties(this, 1261 LayerProtoConverter::SerializeLayerProperties(this,
1524 proto->mutable_layer_updates()); 1262 proto->mutable_layer_updates());
1525 1263
1526 std::vector<PictureData> pictures = 1264 std::vector<PictureData> pictures =
1527 engine_picture_cache_->CalculateCacheUpdateAndFlush(); 1265 engine_picture_cache_->CalculateCacheUpdateAndFlush();
1528 proto::PictureDataVectorToSkPicturesProto(pictures, 1266 proto::PictureDataVectorToSkPicturesProto(pictures,
1529 proto->mutable_pictures()); 1267 proto->mutable_pictures());
1530 1268
1531 proto->set_hud_layer_id(hud_layer_ ? hud_layer_->id() : Layer::INVALID_ID);
1532 debug_state_.ToProtobuf(proto->mutable_debug_state()); 1269 debug_state_.ToProtobuf(proto->mutable_debug_state());
1533 SizeToProto(device_viewport_size_, proto->mutable_device_viewport_size());
1534 proto->set_top_controls_shrink_blink_size(top_controls_shrink_blink_size_);
1535 proto->set_top_controls_height(top_controls_height_);
1536 proto->set_top_controls_shown_ratio(top_controls_shown_ratio_);
1537 proto->set_device_scale_factor(device_scale_factor_);
1538 proto->set_painted_device_scale_factor(painted_device_scale_factor_);
1539 proto->set_page_scale_factor(page_scale_factor_);
1540 proto->set_min_page_scale_factor(min_page_scale_factor_);
1541 proto->set_max_page_scale_factor(max_page_scale_factor_);
1542 Vector2dFToProto(elastic_overscroll_, proto->mutable_elastic_overscroll()); 1270 Vector2dFToProto(elastic_overscroll_, proto->mutable_elastic_overscroll());
1543 proto->set_has_gpu_rasterization_trigger(has_gpu_rasterization_trigger_); 1271 proto->set_has_gpu_rasterization_trigger(has_gpu_rasterization_trigger_);
1544 proto->set_content_is_suitable_for_gpu_rasterization( 1272 proto->set_content_is_suitable_for_gpu_rasterization(
1545 content_is_suitable_for_gpu_rasterization_); 1273 content_is_suitable_for_gpu_rasterization_);
1546 proto->set_background_color(background_color_);
1547 proto->set_has_transparent_background(has_transparent_background_);
1548 proto->set_have_scroll_event_handlers(have_scroll_event_handlers_);
1549 proto->set_wheel_event_listener_properties(static_cast<uint32_t>(
1550 event_listener_properties(EventListenerClass::kMouseWheel)));
1551 proto->set_touch_start_or_move_event_listener_properties(
1552 static_cast<uint32_t>(
1553 event_listener_properties(EventListenerClass::kTouchStartOrMove)));
1554 proto->set_touch_end_or_cancel_event_listener_properties(
1555 static_cast<uint32_t>(
1556 event_listener_properties(EventListenerClass::kTouchEndOrCancel)));
1557 proto->set_id(id_); 1274 proto->set_id(id_);
1558 proto->set_next_commit_forces_redraw(next_commit_forces_redraw_); 1275 proto->set_next_commit_forces_redraw(next_commit_forces_redraw_);
1559 1276
1560 // Viewport layers.
1561 proto->set_overscroll_elasticity_layer_id(
1562 overscroll_elasticity_layer_ ? overscroll_elasticity_layer_->id()
1563 : Layer::INVALID_ID);
1564 proto->set_page_scale_layer_id(page_scale_layer_ ? page_scale_layer_->id()
1565 : Layer::INVALID_ID);
1566 proto->set_inner_viewport_scroll_layer_id(
1567 inner_viewport_scroll_layer_ ? inner_viewport_scroll_layer_->id()
1568 : Layer::INVALID_ID);
1569 proto->set_outer_viewport_scroll_layer_id(
1570 outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id()
1571 : Layer::INVALID_ID);
1572
1573 LayerSelectionToProtobuf(selection_, proto->mutable_selection());
1574
1575 property_trees_.ToProtobuf(proto->mutable_property_trees());
1576
1577 proto->set_surface_client_id(surface_client_id_); 1277 proto->set_surface_client_id(surface_client_id_);
1578 proto->set_next_surface_sequence(next_surface_sequence_); 1278 proto->set_next_surface_sequence(next_surface_sequence_);
1579 1279
1580 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( 1280 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
1581 "cc.remote", "LayerTreeHostProto", source_frame_number_, 1281 "cc.remote", "LayerTreeHostProto", source_frame_number_,
1582 ComputeLayerTreeHostProtoSizeSplitAsValue(proto)); 1282 ComputeLayerTreeHostProtoSizeSplitAsValue(proto));
1583 } 1283 }
1584 1284
1585 void LayerTreeHost::FromProtobufForCommit(const proto::LayerTreeHost& proto) { 1285 void LayerTreeHost::FromProtobufForCommit(const proto::LayerTreeHost& proto) {
1586 DCHECK(client_picture_cache_); 1286 DCHECK(client_picture_cache_);
1587 needs_full_tree_sync_ = proto.needs_full_tree_sync();
1588 needs_meta_info_recomputation_ = proto.needs_meta_info_recomputation();
1589 source_frame_number_ = proto.source_frame_number(); 1287 source_frame_number_ = proto.source_frame_number();
1590 1288
1591 // Layer hierarchy. 1289 layer_tree_->FromProtobuf(proto.layer_tree());
1592 scoped_refptr<Layer> new_root_layer =
1593 LayerProtoConverter::DeserializeLayerHierarchy(root_layer_,
1594 proto.root_layer(), this);
1595 if (root_layer_ != new_root_layer) {
1596 root_layer_ = new_root_layer;
1597 }
1598
1599 layer_tree_.FromProtobuf(proto.layer_tree());
1600 1290
1601 // Ensure ClientPictureCache contains all the necessary SkPictures before 1291 // Ensure ClientPictureCache contains all the necessary SkPictures before
1602 // deserializing the properties. 1292 // deserializing the properties.
1603 proto::SkPictures proto_pictures = proto.pictures(); 1293 proto::SkPictures proto_pictures = proto.pictures();
1604 std::vector<PictureData> pictures = 1294 std::vector<PictureData> pictures =
1605 SkPicturesProtoToPictureDataVector(proto_pictures); 1295 SkPicturesProtoToPictureDataVector(proto_pictures);
1606 client_picture_cache_->ApplyCacheUpdate(pictures); 1296 client_picture_cache_->ApplyCacheUpdate(pictures);
1607 1297
1608 LayerProtoConverter::DeserializeLayerProperties(root_layer_.get(), 1298 LayerProtoConverter::DeserializeLayerProperties(layer_tree_->root_layer(),
1609 proto.layer_updates()); 1299 proto.layer_updates());
1610 1300
1611 // The deserialization is finished, so now clear the cache. 1301 // The deserialization is finished, so now clear the cache.
1612 client_picture_cache_->Flush(); 1302 client_picture_cache_->Flush();
1613 1303
1614 debug_state_.FromProtobuf(proto.debug_state()); 1304 debug_state_.FromProtobuf(proto.debug_state());
1615 device_viewport_size_ = ProtoToSize(proto.device_viewport_size());
1616 top_controls_shrink_blink_size_ = proto.top_controls_shrink_blink_size();
1617 top_controls_height_ = proto.top_controls_height();
1618 top_controls_shown_ratio_ = proto.top_controls_shown_ratio();
1619 device_scale_factor_ = proto.device_scale_factor();
1620 painted_device_scale_factor_ = proto.painted_device_scale_factor();
1621 page_scale_factor_ = proto.page_scale_factor();
1622 min_page_scale_factor_ = proto.min_page_scale_factor();
1623 max_page_scale_factor_ = proto.max_page_scale_factor();
1624 elastic_overscroll_ = ProtoToVector2dF(proto.elastic_overscroll()); 1305 elastic_overscroll_ = ProtoToVector2dF(proto.elastic_overscroll());
1625 has_gpu_rasterization_trigger_ = proto.has_gpu_rasterization_trigger(); 1306 has_gpu_rasterization_trigger_ = proto.has_gpu_rasterization_trigger();
1626 content_is_suitable_for_gpu_rasterization_ = 1307 content_is_suitable_for_gpu_rasterization_ =
1627 proto.content_is_suitable_for_gpu_rasterization(); 1308 proto.content_is_suitable_for_gpu_rasterization();
1628 background_color_ = proto.background_color();
1629 has_transparent_background_ = proto.has_transparent_background();
1630 have_scroll_event_handlers_ = proto.have_scroll_event_handlers();
1631 event_listener_properties_[static_cast<size_t>(
1632 EventListenerClass::kMouseWheel)] =
1633 static_cast<EventListenerProperties>(
1634 proto.wheel_event_listener_properties());
1635 event_listener_properties_[static_cast<size_t>(
1636 EventListenerClass::kTouchStartOrMove)] =
1637 static_cast<EventListenerProperties>(
1638 proto.touch_start_or_move_event_listener_properties());
1639 event_listener_properties_[static_cast<size_t>(
1640 EventListenerClass::kTouchEndOrCancel)] =
1641 static_cast<EventListenerProperties>(
1642 proto.touch_end_or_cancel_event_listener_properties());
1643 id_ = proto.id(); 1309 id_ = proto.id();
1644 next_commit_forces_redraw_ = proto.next_commit_forces_redraw(); 1310 next_commit_forces_redraw_ = proto.next_commit_forces_redraw();
1645 1311
1646 hud_layer_ = static_cast<HeadsUpDisplayLayer*>(
1647 UpdateAndGetLayer(hud_layer_.get(), proto.hud_layer_id(), &layer_tree_));
1648 overscroll_elasticity_layer_ =
1649 UpdateAndGetLayer(overscroll_elasticity_layer_.get(),
1650 proto.overscroll_elasticity_layer_id(), &layer_tree_);
1651 page_scale_layer_ = UpdateAndGetLayer(
1652 page_scale_layer_.get(), proto.page_scale_layer_id(), &layer_tree_);
1653 inner_viewport_scroll_layer_ =
1654 UpdateAndGetLayer(inner_viewport_scroll_layer_.get(),
1655 proto.inner_viewport_scroll_layer_id(), &layer_tree_);
1656 outer_viewport_scroll_layer_ =
1657 UpdateAndGetLayer(outer_viewport_scroll_layer_.get(),
1658 proto.outer_viewport_scroll_layer_id(), &layer_tree_);
1659
1660 LayerSelectionFromProtobuf(&selection_, proto.selection());
1661
1662 // It is required to create new PropertyTrees before deserializing it.
1663 property_trees_ = PropertyTrees();
1664 property_trees_.FromProtobuf(proto.property_trees());
1665
1666 // Forcefully override the sequence number of all layers in the tree to have
1667 // a valid sequence number. Changing the sequence number for a layer does not
1668 // need a commit, so the value will become out of date for layers that are not
1669 // updated for other reasons. All layers that at this point are part of the
1670 // layer tree are valid, so it is OK that they have a valid sequence number.
1671 int seq_num = property_trees_.sequence_number;
1672 LayerTreeHostCommon::CallFunctionForEveryLayer(this, [seq_num](Layer* layer) {
1673 layer->set_property_tree_sequence_number(seq_num);
1674 });
1675
1676 surface_client_id_ = proto.surface_client_id(); 1312 surface_client_id_ = proto.surface_client_id();
1677 next_surface_sequence_ = proto.next_surface_sequence(); 1313 next_surface_sequence_ = proto.next_surface_sequence();
1678 } 1314 }
1679 1315
1680 AnimationHost* LayerTreeHost::animation_host() const { 1316 AnimationHost* LayerTreeHost::animation_host() const {
1681 return layer_tree_.animation_host(); 1317 return layer_tree_->animation_host();
1682 } 1318 }
1683 1319
1684 } // namespace cc 1320 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_common.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698