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

Unified Diff: cc/trees/layer_tree.cc

Issue 2661523003: cc: Merge LayerTree into the LayerTreeHost. (Closed)
Patch Set: auto Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree.h ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree.cc
diff --git a/cc/trees/layer_tree.cc b/cc/trees/layer_tree.cc
deleted file mode 100644
index c545a12ffa588e61d59d244a9592764a5d76d5a9..0000000000000000000000000000000000000000
--- a/cc/trees/layer_tree.cc
+++ /dev/null
@@ -1,511 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "cc/trees/layer_tree.h"
-
-#include "base/auto_reset.h"
-#include "base/time/time.h"
-#include "cc/input/page_scale_animation.h"
-#include "cc/layers/heads_up_display_layer.h"
-#include "cc/layers/heads_up_display_layer_impl.h"
-#include "cc/layers/layer.h"
-#include "cc/trees/layer_tree_host.h"
-#include "cc/trees/layer_tree_host_common.h"
-#include "cc/trees/layer_tree_impl.h"
-#include "cc/trees/mutator_host.h"
-#include "cc/trees/property_tree_builder.h"
-
-namespace cc {
-
-LayerTree::LayerTree(MutatorHost* mutator_host, LayerTreeHost* layer_tree_host)
- : event_listener_properties_(),
- mutator_host_(mutator_host),
- layer_tree_host_(layer_tree_host) {
- DCHECK(mutator_host_);
- DCHECK(layer_tree_host_);
- mutator_host_->SetMutatorHostClient(this);
-}
-
-LayerTree::~LayerTree() {
- mutator_host_->SetMutatorHostClient(nullptr);
-
- // We must clear any pointers into the layer tree prior to destroying it.
- RegisterViewportLayers(nullptr, nullptr, nullptr, nullptr);
-
- if (root_layer_) {
- root_layer_->SetLayerTreeHost(nullptr);
-
- // The root layer must be destroyed before the layer tree. We've made a
- // contract with our animation controllers that the animation_host will
- // outlive them, and we must make good.
- root_layer_ = nullptr;
- }
-}
-
-void LayerTree::SetRootLayer(scoped_refptr<Layer> root_layer) {
- if (root_layer_.get() == root_layer.get())
- return;
-
- if (root_layer_.get())
- root_layer_->SetLayerTreeHost(nullptr);
- root_layer_ = root_layer;
- if (root_layer_.get()) {
- DCHECK(!root_layer_->parent());
- root_layer_->SetLayerTreeHost(layer_tree_host_);
- }
-
- if (hud_layer_.get())
- hud_layer_->RemoveFromParent();
-
- // Reset gpu rasterization tracking.
- // This flag is sticky until a new tree comes along.
- layer_tree_host_->ResetGpuRasterizationTracking();
-
- SetNeedsFullTreeSync();
-}
-
-void LayerTree::RegisterViewportLayers(
- scoped_refptr<Layer> overscroll_elasticity_layer,
- scoped_refptr<Layer> page_scale_layer,
- scoped_refptr<Layer> inner_viewport_scroll_layer,
- scoped_refptr<Layer> outer_viewport_scroll_layer) {
- DCHECK(!inner_viewport_scroll_layer ||
- inner_viewport_scroll_layer != outer_viewport_scroll_layer);
- overscroll_elasticity_layer_ = overscroll_elasticity_layer;
- page_scale_layer_ = page_scale_layer;
- inner_viewport_scroll_layer_ = inner_viewport_scroll_layer;
- outer_viewport_scroll_layer_ = outer_viewport_scroll_layer;
-}
-
-void LayerTree::RegisterSelection(const LayerSelection& selection) {
- if (selection_ == selection)
- return;
-
- selection_ = selection;
- SetNeedsCommit();
-}
-
-void LayerTree::SetHaveScrollEventHandlers(bool have_event_handlers) {
- if (have_scroll_event_handlers_ == have_event_handlers)
- return;
-
- have_scroll_event_handlers_ = have_event_handlers;
- SetNeedsCommit();
-}
-
-void LayerTree::SetEventListenerProperties(EventListenerClass event_class,
- EventListenerProperties properties) {
- const size_t index = static_cast<size_t>(event_class);
- if (event_listener_properties_[index] == properties)
- return;
-
- event_listener_properties_[index] = properties;
- SetNeedsCommit();
-}
-
-void LayerTree::SetViewportSize(const gfx::Size& device_viewport_size) {
- if (device_viewport_size_ == device_viewport_size)
- return;
-
- device_viewport_size_ = device_viewport_size;
-
- SetPropertyTreesNeedRebuild();
- SetNeedsCommit();
-}
-
-void LayerTree::SetBrowserControlsHeight(float height, bool shrink) {
- if (top_controls_height_ == height &&
- browser_controls_shrink_blink_size_ == shrink)
- return;
-
- top_controls_height_ = height;
- browser_controls_shrink_blink_size_ = shrink;
- SetNeedsCommit();
-}
-
-void LayerTree::SetBrowserControlsShownRatio(float ratio) {
- if (top_controls_shown_ratio_ == ratio)
- return;
-
- top_controls_shown_ratio_ = ratio;
- SetNeedsCommit();
-}
-
-void LayerTree::SetBottomControlsHeight(float height) {
- if (bottom_controls_height_ == height)
- return;
-
- bottom_controls_height_ = height;
- SetNeedsCommit();
-}
-
-void LayerTree::SetPageScaleFactorAndLimits(float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor) {
- if (page_scale_factor_ == page_scale_factor &&
- min_page_scale_factor_ == min_page_scale_factor &&
- max_page_scale_factor_ == max_page_scale_factor)
- return;
-
- page_scale_factor_ = page_scale_factor;
- min_page_scale_factor_ = min_page_scale_factor;
- max_page_scale_factor_ = max_page_scale_factor;
- SetPropertyTreesNeedRebuild();
- SetNeedsCommit();
-}
-
-void LayerTree::StartPageScaleAnimation(const gfx::Vector2d& target_offset,
- bool use_anchor,
- float scale,
- base::TimeDelta duration) {
- pending_page_scale_animation_.reset(new PendingPageScaleAnimation(
- target_offset, use_anchor, scale, duration));
-
- SetNeedsCommit();
-}
-
-bool LayerTree::HasPendingPageScaleAnimation() const {
- return !!pending_page_scale_animation_.get();
-}
-
-void LayerTree::SetDeviceScaleFactor(float device_scale_factor) {
- if (device_scale_factor_ == device_scale_factor)
- return;
- device_scale_factor_ = device_scale_factor;
-
- property_trees_.needs_rebuild = true;
- SetNeedsCommit();
-}
-
-void LayerTree::SetPaintedDeviceScaleFactor(float painted_device_scale_factor) {
- if (painted_device_scale_factor_ == painted_device_scale_factor)
- return;
- painted_device_scale_factor_ = painted_device_scale_factor;
-
- SetNeedsCommit();
-}
-
-void LayerTree::SetDeviceColorSpace(const gfx::ColorSpace& device_color_space) {
- if (device_color_space_ == device_color_space)
- return;
- device_color_space_ = device_color_space;
- LayerTreeHostCommon::CallFunctionForEveryLayer(
- this, [](Layer* layer) { layer->SetNeedsDisplay(); });
-}
-
-void LayerTree::RegisterLayer(Layer* layer) {
- DCHECK(!LayerById(layer->id()));
- DCHECK(!in_paint_layer_contents_);
- layer_id_map_[layer->id()] = layer;
- if (layer->element_id()) {
- mutator_host_->RegisterElement(layer->element_id(),
- ElementListType::ACTIVE);
- }
-}
-
-void LayerTree::UnregisterLayer(Layer* layer) {
- DCHECK(LayerById(layer->id()));
- DCHECK(!in_paint_layer_contents_);
- if (layer->element_id()) {
- mutator_host_->UnregisterElement(layer->element_id(),
- ElementListType::ACTIVE);
- }
- RemoveLayerShouldPushProperties(layer);
- layer_id_map_.erase(layer->id());
-}
-
-Layer* LayerTree::LayerById(int id) const {
- LayerIdMap::const_iterator iter = layer_id_map_.find(id);
- return iter != layer_id_map_.end() ? iter->second : nullptr;
-}
-
-size_t LayerTree::NumLayers() const {
- return layer_id_map_.size();
-}
-
-bool LayerTree::UpdateLayers(const LayerList& update_layer_list,
- bool* content_is_suitable_for_gpu) {
- base::AutoReset<bool> painting(&in_paint_layer_contents_, true);
- bool did_paint_content = false;
- for (const auto& layer : update_layer_list) {
- did_paint_content |= layer->Update();
- *content_is_suitable_for_gpu &= layer->IsSuitableForGpuRasterization();
- }
- return did_paint_content;
-}
-
-void LayerTree::AddLayerShouldPushProperties(Layer* layer) {
- layers_that_should_push_properties_.insert(layer);
-}
-
-void LayerTree::RemoveLayerShouldPushProperties(Layer* layer) {
- layers_that_should_push_properties_.erase(layer);
-}
-
-std::unordered_set<Layer*>& LayerTree::LayersThatShouldPushProperties() {
- return layers_that_should_push_properties_;
-}
-
-bool LayerTree::LayerNeedsPushPropertiesForTesting(Layer* layer) const {
- return layers_that_should_push_properties_.find(layer) !=
- layers_that_should_push_properties_.end();
-}
-
-void LayerTree::SetNeedsMetaInfoRecomputation(bool needs_recomputation) {
- needs_meta_info_recomputation_ = needs_recomputation;
-}
-
-void LayerTree::SetPageScaleFromImplSide(float page_scale) {
- DCHECK(layer_tree_host_->CommitRequested());
- page_scale_factor_ = page_scale;
- SetPropertyTreesNeedRebuild();
-}
-
-void LayerTree::SetElasticOverscrollFromImplSide(
- gfx::Vector2dF elastic_overscroll) {
- DCHECK(layer_tree_host_->CommitRequested());
- elastic_overscroll_ = elastic_overscroll;
-}
-
-void LayerTree::UpdateHudLayer(bool show_hud_info) {
- if (show_hud_info) {
- if (!hud_layer_.get()) {
- hud_layer_ = HeadsUpDisplayLayer::Create();
- }
-
- if (root_layer_.get() && !hud_layer_->parent())
- root_layer_->AddChild(hud_layer_);
- } else if (hud_layer_.get()) {
- hud_layer_->RemoveFromParent();
- hud_layer_ = nullptr;
- }
-}
-
-void LayerTree::SetNeedsFullTreeSync() {
- needs_full_tree_sync_ = true;
- needs_meta_info_recomputation_ = true;
-
- property_trees_.needs_rebuild = true;
- SetNeedsCommit();
-}
-
-void LayerTree::SetNeedsCommit() {
- layer_tree_host_->SetNeedsCommit();
-}
-
-const LayerTreeSettings& LayerTree::GetSettings() const {
- return layer_tree_host_->GetSettings();
-}
-
-void LayerTree::SetPropertyTreesNeedRebuild() {
- property_trees_.needs_rebuild = true;
- layer_tree_host_->SetNeedsUpdateLayers();
-}
-
-void LayerTree::PushPropertiesTo(LayerTreeImpl* tree_impl) {
- tree_impl->set_needs_full_tree_sync(needs_full_tree_sync_);
- needs_full_tree_sync_ = false;
-
- if (hud_layer_.get()) {
- LayerImpl* hud_impl = tree_impl->LayerById(hud_layer_->id());
- tree_impl->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(hud_impl));
- } else {
- tree_impl->set_hud_layer(nullptr);
- }
-
- tree_impl->set_background_color(background_color_);
- tree_impl->set_has_transparent_background(has_transparent_background_);
- tree_impl->set_have_scroll_event_handlers(have_scroll_event_handlers_);
- tree_impl->set_event_listener_properties(
- EventListenerClass::kTouchStartOrMove,
- event_listener_properties(EventListenerClass::kTouchStartOrMove));
- tree_impl->set_event_listener_properties(
- EventListenerClass::kMouseWheel,
- event_listener_properties(EventListenerClass::kMouseWheel));
- tree_impl->set_event_listener_properties(
- EventListenerClass::kTouchEndOrCancel,
- event_listener_properties(EventListenerClass::kTouchEndOrCancel));
-
- if (page_scale_layer_ && inner_viewport_scroll_layer_) {
- tree_impl->SetViewportLayersFromIds(
- overscroll_elasticity_layer_ ? overscroll_elasticity_layer_->id()
- : Layer::INVALID_ID,
- page_scale_layer_->id(), inner_viewport_scroll_layer_->id(),
- outer_viewport_scroll_layer_ ? outer_viewport_scroll_layer_->id()
- : Layer::INVALID_ID);
- DCHECK(inner_viewport_scroll_layer_->IsContainerForFixedPositionLayers());
- } else {
- tree_impl->ClearViewportLayers();
- }
-
- tree_impl->RegisterSelection(selection_);
-
- bool property_trees_changed_on_active_tree =
- tree_impl->IsActiveTree() && tree_impl->property_trees()->changed;
- // Property trees may store damage status. We preserve the sync tree damage
- // status by pushing the damage status from sync tree property trees to main
- // thread property trees or by moving it onto the layers.
- if (root_layer_ && property_trees_changed_on_active_tree) {
- if (property_trees_.sequence_number ==
- tree_impl->property_trees()->sequence_number)
- tree_impl->property_trees()->PushChangeTrackingTo(&property_trees_);
- else
- tree_impl->MoveChangeTrackingToLayers();
- }
- // Setting property trees must happen before pushing the page scale.
- tree_impl->SetPropertyTrees(&property_trees_);
-
- tree_impl->PushPageScaleFromMainThread(
- page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_);
-
- tree_impl->set_browser_controls_shrink_blink_size(
- browser_controls_shrink_blink_size_);
- tree_impl->set_top_controls_height(top_controls_height_);
- tree_impl->set_bottom_controls_height(bottom_controls_height_);
- tree_impl->PushBrowserControlsFromMainThread(top_controls_shown_ratio_);
- tree_impl->elastic_overscroll()->PushFromMainThread(elastic_overscroll_);
- if (tree_impl->IsActiveTree())
- tree_impl->elastic_overscroll()->PushPendingToActive();
-
- tree_impl->set_painted_device_scale_factor(painted_device_scale_factor_);
-
- tree_impl->SetDeviceColorSpace(device_color_space_);
-
- if (pending_page_scale_animation_) {
- tree_impl->SetPendingPageScaleAnimation(
- std::move(pending_page_scale_animation_));
- }
-
- DCHECK(!tree_impl->ViewportSizeInvalid());
-
- tree_impl->set_has_ever_been_drawn(false);
-}
-
-Layer* LayerTree::LayerByElementId(ElementId element_id) const {
- ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id);
- return iter != element_layers_map_.end() ? iter->second : nullptr;
-}
-
-void LayerTree::RegisterElement(ElementId element_id,
- ElementListType list_type,
- Layer* layer) {
- if (layer->element_id()) {
- element_layers_map_[layer->element_id()] = layer;
- }
-
- mutator_host_->RegisterElement(element_id, list_type);
-}
-
-void LayerTree::UnregisterElement(ElementId element_id,
- ElementListType list_type,
- Layer* layer) {
- mutator_host_->UnregisterElement(element_id, list_type);
-
- if (layer->element_id()) {
- element_layers_map_.erase(layer->element_id());
- }
-}
-
-static void SetElementIdForTesting(Layer* layer) {
- layer->SetElementId(LayerIdToElementIdForTesting(layer->id()));
-}
-
-void LayerTree::SetElementIdsForTesting() {
- LayerTreeHostCommon::CallFunctionForEveryLayer(this, SetElementIdForTesting);
-}
-
-void LayerTree::BuildPropertyTreesForTesting() {
- PropertyTreeBuilder::PreCalculateMetaInformation(root_layer());
- gfx::Transform identity_transform;
- PropertyTreeBuilder::BuildPropertyTrees(
- root_layer(), page_scale_layer(), inner_viewport_scroll_layer(),
- outer_viewport_scroll_layer(), overscroll_elasticity_layer(),
- elastic_overscroll(), page_scale_factor(), device_scale_factor(),
- gfx::Rect(device_viewport_size()), identity_transform, property_trees());
-}
-
-bool LayerTree::IsElementInList(ElementId element_id,
- ElementListType list_type) const {
- return list_type == ElementListType::ACTIVE && LayerByElementId(element_id);
-}
-
-void LayerTree::SetMutatorsNeedCommit() {
- layer_tree_host_->SetNeedsCommit();
-}
-
-void LayerTree::SetMutatorsNeedRebuildPropertyTrees() {
- property_trees_.needs_rebuild = true;
-}
-
-void LayerTree::SetElementFilterMutated(ElementId element_id,
- ElementListType list_type,
- const FilterOperations& filters) {
- Layer* layer = LayerByElementId(element_id);
- DCHECK(layer);
- layer->OnFilterAnimated(filters);
-}
-
-void LayerTree::SetElementOpacityMutated(ElementId element_id,
- ElementListType list_type,
- float opacity) {
- Layer* layer = LayerByElementId(element_id);
- DCHECK(layer);
- layer->OnOpacityAnimated(opacity);
-}
-
-void LayerTree::SetElementTransformMutated(ElementId element_id,
- ElementListType list_type,
- const gfx::Transform& transform) {
- Layer* layer = LayerByElementId(element_id);
- DCHECK(layer);
- layer->OnTransformAnimated(transform);
-}
-
-void LayerTree::SetElementScrollOffsetMutated(
- ElementId element_id,
- ElementListType list_type,
- const gfx::ScrollOffset& scroll_offset) {
- Layer* layer = LayerByElementId(element_id);
- DCHECK(layer);
- layer->OnScrollOffsetAnimated(scroll_offset);
-}
-
-void LayerTree::ElementIsAnimatingChanged(ElementId element_id,
- ElementListType list_type,
- const PropertyAnimationState& mask,
- const PropertyAnimationState& state) {
- Layer* layer = LayerByElementId(element_id);
- if (layer)
- layer->OnIsAnimatingChanged(mask, state);
-}
-
-gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation(
- ElementId element_id) const {
- Layer* layer = LayerByElementId(element_id);
- DCHECK(layer);
- return layer->ScrollOffsetForAnimation();
-}
-
-LayerListIterator<Layer> LayerTree::begin() const {
- return LayerListIterator<Layer>(root_layer_.get());
-}
-
-LayerListIterator<Layer> LayerTree::end() const {
- return LayerListIterator<Layer>(nullptr);
-}
-
-LayerListReverseIterator<Layer> LayerTree::rbegin() {
- return LayerListReverseIterator<Layer>(root_layer_.get());
-}
-
-LayerListReverseIterator<Layer> LayerTree::rend() {
- return LayerListReverseIterator<Layer>(nullptr);
-}
-
-void LayerTree::SetNeedsDisplayOnAllLayers() {
- for (auto* layer : *this)
- layer->SetNeedsDisplay();
-}
-
-} // namespace cc
« no previous file with comments | « cc/trees/layer_tree.h ('k') | cc/trees/layer_tree_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698