OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.h" | 5 #include "cc/trees/layer_tree.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
9 #include "cc/animation/animation_host.h" | 9 #include "cc/animation/animation_host.h" |
10 #include "cc/input/page_scale_animation.h" | 10 #include "cc/input/page_scale_animation.h" |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 if (inputs_.pending_page_scale_animation) { | 421 if (inputs_.pending_page_scale_animation) { |
422 tree_impl->SetPendingPageScaleAnimation( | 422 tree_impl->SetPendingPageScaleAnimation( |
423 std::move(inputs_.pending_page_scale_animation)); | 423 std::move(inputs_.pending_page_scale_animation)); |
424 } | 424 } |
425 | 425 |
426 DCHECK(!tree_impl->ViewportSizeInvalid()); | 426 DCHECK(!tree_impl->ViewportSizeInvalid()); |
427 | 427 |
428 tree_impl->set_has_ever_been_drawn(false); | 428 tree_impl->set_has_ever_been_drawn(false); |
429 } | 429 } |
430 | 430 |
431 void LayerTree::ToProtobuf(proto::LayerTree* proto) { | 431 void LayerTree::ToProtobuf(proto::LayerTree* proto, bool inputs_only) { |
432 LayerProtoConverter::SerializeLayerHierarchy(inputs_.root_layer, | 432 TRACE_EVENT0("cc.remote", "LayerProtoConverter::SerializeLayerHierarchy"); |
433 proto->mutable_root_layer()); | |
434 | 433 |
435 for (auto* layer : layers_that_should_push_properties_) { | 434 // LayerTree::Inputs Serialization ----------------------------------------- |
436 proto->add_layers_that_should_push_properties(layer->id()); | |
437 } | |
438 proto->set_in_paint_layer_contents(in_paint_layer_contents()); | |
439 | 435 |
440 proto->set_needs_full_tree_sync(needs_full_tree_sync_); | 436 // TODO(khushalsagar): Why walk the tree twice? Why not serialize properties |
441 proto->set_needs_meta_info_recomputation(needs_meta_info_recomputation_); | 437 // for dirty layers as you serialize the hierarchy? |
442 proto->set_hud_layer_id(hud_layer_ ? hud_layer_->id() : Layer::INVALID_ID); | 438 if (inputs_.root_layer) |
| 439 inputs_.root_layer->ToLayerNodeProto(proto->mutable_root_layer()); |
443 | 440 |
444 // Viewport layers. | 441 // Viewport layers. |
445 proto->set_overscroll_elasticity_layer_id( | 442 proto->set_overscroll_elasticity_layer_id( |
446 inputs_.overscroll_elasticity_layer | 443 inputs_.overscroll_elasticity_layer |
447 ? inputs_.overscroll_elasticity_layer->id() | 444 ? inputs_.overscroll_elasticity_layer->id() |
448 : Layer::INVALID_ID); | 445 : Layer::INVALID_ID); |
449 proto->set_page_scale_layer_id(inputs_.page_scale_layer | 446 proto->set_page_scale_layer_id(inputs_.page_scale_layer |
450 ? inputs_.page_scale_layer->id() | 447 ? inputs_.page_scale_layer->id() |
451 : Layer::INVALID_ID); | 448 : Layer::INVALID_ID); |
452 proto->set_inner_viewport_scroll_layer_id( | 449 proto->set_inner_viewport_scroll_layer_id( |
453 inputs_.inner_viewport_scroll_layer | 450 inputs_.inner_viewport_scroll_layer |
454 ? inputs_.inner_viewport_scroll_layer->id() | 451 ? inputs_.inner_viewport_scroll_layer->id() |
455 : Layer::INVALID_ID); | 452 : Layer::INVALID_ID); |
456 proto->set_outer_viewport_scroll_layer_id( | 453 proto->set_outer_viewport_scroll_layer_id( |
457 inputs_.outer_viewport_scroll_layer | 454 inputs_.outer_viewport_scroll_layer |
458 ? inputs_.outer_viewport_scroll_layer->id() | 455 ? inputs_.outer_viewport_scroll_layer->id() |
459 : Layer::INVALID_ID); | 456 : Layer::INVALID_ID); |
460 | 457 |
461 SizeToProto(inputs_.device_viewport_size, | 458 // Top Controls ignored. They are not supported. |
462 proto->mutable_device_viewport_size()); | 459 DCHECK(!inputs_.top_controls_shrink_blink_size); |
463 proto->set_top_controls_shrink_blink_size( | 460 |
464 inputs_.top_controls_shrink_blink_size); | |
465 proto->set_top_controls_height(inputs_.top_controls_height); | |
466 proto->set_top_controls_shown_ratio(inputs_.top_controls_shown_ratio); | |
467 proto->set_device_scale_factor(inputs_.device_scale_factor); | 461 proto->set_device_scale_factor(inputs_.device_scale_factor); |
468 proto->set_painted_device_scale_factor(inputs_.painted_device_scale_factor); | 462 proto->set_painted_device_scale_factor(inputs_.painted_device_scale_factor); |
469 proto->set_page_scale_factor(inputs_.page_scale_factor); | 463 proto->set_page_scale_factor(inputs_.page_scale_factor); |
470 proto->set_min_page_scale_factor(inputs_.min_page_scale_factor); | 464 proto->set_min_page_scale_factor(inputs_.min_page_scale_factor); |
471 proto->set_max_page_scale_factor(inputs_.max_page_scale_factor); | 465 proto->set_max_page_scale_factor(inputs_.max_page_scale_factor); |
472 | 466 |
473 proto->set_background_color(inputs_.background_color); | 467 proto->set_background_color(inputs_.background_color); |
474 proto->set_has_transparent_background(inputs_.has_transparent_background); | 468 proto->set_has_transparent_background(inputs_.has_transparent_background); |
| 469 |
| 470 LayerSelectionToProtobuf(inputs_.selection, proto->mutable_selection()); |
| 471 SizeToProto(inputs_.device_viewport_size, |
| 472 proto->mutable_device_viewport_size()); |
| 473 |
475 proto->set_have_scroll_event_handlers(inputs_.have_scroll_event_handlers); | 474 proto->set_have_scroll_event_handlers(inputs_.have_scroll_event_handlers); |
476 proto->set_wheel_event_listener_properties(static_cast<uint32_t>( | 475 proto->set_wheel_event_listener_properties(static_cast<uint32_t>( |
477 event_listener_properties(EventListenerClass::kMouseWheel))); | 476 event_listener_properties(EventListenerClass::kMouseWheel))); |
478 proto->set_touch_start_or_move_event_listener_properties( | 477 proto->set_touch_start_or_move_event_listener_properties( |
479 static_cast<uint32_t>( | 478 static_cast<uint32_t>( |
480 event_listener_properties(EventListenerClass::kTouchStartOrMove))); | 479 event_listener_properties(EventListenerClass::kTouchStartOrMove))); |
481 proto->set_touch_end_or_cancel_event_listener_properties( | 480 proto->set_touch_end_or_cancel_event_listener_properties( |
482 static_cast<uint32_t>( | 481 static_cast<uint32_t>( |
483 event_listener_properties(EventListenerClass::kTouchEndOrCancel))); | 482 event_listener_properties(EventListenerClass::kTouchEndOrCancel))); |
484 | 483 |
485 LayerSelectionToProtobuf(inputs_.selection, proto->mutable_selection()); | 484 if (inputs_only) |
| 485 return; |
| 486 // ---------------------------------------------------------------------- |
| 487 |
| 488 for (auto* layer : layers_that_should_push_properties_) { |
| 489 proto->add_layers_that_should_push_properties(layer->id()); |
| 490 } |
| 491 proto->set_in_paint_layer_contents(in_paint_layer_contents()); |
| 492 |
| 493 proto->set_needs_full_tree_sync(needs_full_tree_sync_); |
| 494 proto->set_needs_meta_info_recomputation(needs_meta_info_recomputation_); |
| 495 proto->set_hud_layer_id(hud_layer_ ? hud_layer_->id() : Layer::INVALID_ID); |
| 496 |
486 property_trees_.ToProtobuf(proto->mutable_property_trees()); | 497 property_trees_.ToProtobuf(proto->mutable_property_trees()); |
487 Vector2dFToProto(elastic_overscroll_, proto->mutable_elastic_overscroll()); | 498 Vector2dFToProto(elastic_overscroll_, proto->mutable_elastic_overscroll()); |
488 } | 499 } |
489 | 500 |
490 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { | 501 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { |
491 // Layer hierarchy. | 502 // Layer hierarchy. |
492 scoped_refptr<Layer> new_root_layer = | 503 scoped_refptr<Layer> new_root_layer; |
493 LayerProtoConverter::DeserializeLayerHierarchy( | 504 if (proto.has_root_layer()) |
494 inputs_.root_layer, proto.root_layer(), layer_tree_host_); | 505 new_root_layer = LayerProtoConverter::DeserializeLayerHierarchy( |
| 506 inputs_.root_layer, proto.root_layer(), layer_tree_host_); |
495 if (inputs_.root_layer != new_root_layer) { | 507 if (inputs_.root_layer != new_root_layer) { |
496 inputs_.root_layer = new_root_layer; | 508 inputs_.root_layer = new_root_layer; |
497 } | 509 } |
498 | 510 |
499 for (auto layer_id : proto.layers_that_should_push_properties()) { | 511 for (auto layer_id : proto.layers_that_should_push_properties()) { |
500 AddLayerShouldPushProperties(layer_id_map_[layer_id]); | 512 AddLayerShouldPushProperties(layer_id_map_[layer_id]); |
501 } | 513 } |
502 in_paint_layer_contents_ = proto.in_paint_layer_contents(); | 514 in_paint_layer_contents_ = proto.in_paint_layer_contents(); |
503 | 515 |
504 needs_full_tree_sync_ = proto.needs_full_tree_sync(); | 516 needs_full_tree_sync_ = proto.needs_full_tree_sync(); |
505 needs_meta_info_recomputation_ = proto.needs_meta_info_recomputation(); | 517 needs_meta_info_recomputation_ = proto.needs_meta_info_recomputation(); |
506 | 518 |
507 inputs_.overscroll_elasticity_layer = | 519 inputs_.overscroll_elasticity_layer = |
508 UpdateAndGetLayer(inputs_.overscroll_elasticity_layer.get(), | 520 UpdateAndGetLayer(inputs_.overscroll_elasticity_layer.get(), |
509 proto.overscroll_elasticity_layer_id(), this); | 521 proto.overscroll_elasticity_layer_id(), this); |
510 inputs_.page_scale_layer = UpdateAndGetLayer( | 522 inputs_.page_scale_layer = UpdateAndGetLayer( |
511 inputs_.page_scale_layer.get(), proto.page_scale_layer_id(), this); | 523 inputs_.page_scale_layer.get(), proto.page_scale_layer_id(), this); |
512 inputs_.inner_viewport_scroll_layer = | 524 inputs_.inner_viewport_scroll_layer = |
513 UpdateAndGetLayer(inputs_.inner_viewport_scroll_layer.get(), | 525 UpdateAndGetLayer(inputs_.inner_viewport_scroll_layer.get(), |
514 proto.inner_viewport_scroll_layer_id(), this); | 526 proto.inner_viewport_scroll_layer_id(), this); |
515 inputs_.outer_viewport_scroll_layer = | 527 inputs_.outer_viewport_scroll_layer = |
516 UpdateAndGetLayer(inputs_.outer_viewport_scroll_layer.get(), | 528 UpdateAndGetLayer(inputs_.outer_viewport_scroll_layer.get(), |
517 proto.outer_viewport_scroll_layer_id(), this); | 529 proto.outer_viewport_scroll_layer_id(), this); |
518 | 530 |
519 inputs_.device_viewport_size = ProtoToSize(proto.device_viewport_size()); | 531 inputs_.device_viewport_size = ProtoToSize(proto.device_viewport_size()); |
520 inputs_.top_controls_shrink_blink_size = | |
521 proto.top_controls_shrink_blink_size(); | |
522 inputs_.top_controls_height = proto.top_controls_height(); | |
523 inputs_.top_controls_shown_ratio = proto.top_controls_shown_ratio(); | |
524 inputs_.device_scale_factor = proto.device_scale_factor(); | 532 inputs_.device_scale_factor = proto.device_scale_factor(); |
525 inputs_.painted_device_scale_factor = proto.painted_device_scale_factor(); | 533 inputs_.painted_device_scale_factor = proto.painted_device_scale_factor(); |
526 inputs_.page_scale_factor = proto.page_scale_factor(); | 534 inputs_.page_scale_factor = proto.page_scale_factor(); |
527 inputs_.min_page_scale_factor = proto.min_page_scale_factor(); | 535 inputs_.min_page_scale_factor = proto.min_page_scale_factor(); |
528 inputs_.max_page_scale_factor = proto.max_page_scale_factor(); | 536 inputs_.max_page_scale_factor = proto.max_page_scale_factor(); |
529 inputs_.background_color = proto.background_color(); | 537 inputs_.background_color = proto.background_color(); |
530 inputs_.has_transparent_background = proto.has_transparent_background(); | 538 inputs_.has_transparent_background = proto.has_transparent_background(); |
531 inputs_.have_scroll_event_handlers = proto.have_scroll_event_handlers(); | 539 inputs_.have_scroll_event_handlers = proto.have_scroll_event_handlers(); |
532 inputs_.event_listener_properties[static_cast<size_t>( | 540 inputs_.event_listener_properties[static_cast<size_t>( |
533 EventListenerClass::kMouseWheel)] = | 541 EventListenerClass::kMouseWheel)] = |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 LayerListReverseIterator<Layer> LayerTree::rend() { | 691 LayerListReverseIterator<Layer> LayerTree::rend() { |
684 return LayerListReverseIterator<Layer>(nullptr); | 692 return LayerListReverseIterator<Layer>(nullptr); |
685 } | 693 } |
686 | 694 |
687 void LayerTree::SetNeedsDisplayOnAllLayers() { | 695 void LayerTree::SetNeedsDisplayOnAllLayers() { |
688 for (auto* layer : *this) | 696 for (auto* layer : *this) |
689 layer->SetNeedsDisplay(); | 697 layer->SetNeedsDisplay(); |
690 } | 698 } |
691 | 699 |
692 } // namespace cc | 700 } // namespace cc |
OLD | NEW |