Commit eb746a5c authored by Xianzhu Wang's avatar Xianzhu Wang Committed by Commit Bot

[CompositeAfterPaint] Let cc know the viewport page scale transform node

Bug: 726066, 909750
Change-Id: I12242ad3facdc7e8877833d2c436e383f2c9530f
Reviewed-on: https://chromium-review.googlesource.com/c/1352322
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Reviewed-by: default avatarDavid Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612030}
parent 6acad712
......@@ -1067,6 +1067,13 @@ void LayerTreeHost::RegisterViewportLayers(const ViewportLayers& layers) {
viewport_layers_.outer_viewport_scroll = layers.outer_viewport_scroll;
}
void LayerTreeHost::RegisterViewportPropertyIds(
const ViewportPropertyIds& ids) {
DCHECK(!viewport_layers_.inner_viewport_scroll);
DCHECK(IsUsingLayerLists());
viewport_property_ids_ = ids;
}
void LayerTreeHost::RegisterSelection(const LayerSelection& selection) {
if (selection_ == selection)
return;
......@@ -1489,6 +1496,8 @@ void LayerTreeHost::PushLayerTreePropertiesTo(LayerTreeImpl* tree_impl) {
tree_impl->ClearViewportLayers();
}
tree_impl->set_viewport_property_ids(viewport_property_ids_);
tree_impl->RegisterSelection(selection_);
tree_impl->PushPageScaleFromMainThread(
......
......@@ -333,6 +333,16 @@ class CC_EXPORT LayerTreeHost : public MutatorHostClient {
return viewport_layers_.outer_viewport_scroll.get();
}
// Counterpart of ViewportLayers for CompositeAfterPaint which doesn't create
// viewport layers.
struct ViewportPropertyIds {
int page_scale_transform = TransformTree::kInvalidNodeId;
// TODO(crbug.com/909750): Switch other usages of viewport layers to
// property ids for CompositeAfterPaint.
};
void RegisterViewportPropertyIds(const ViewportPropertyIds&);
// Sets or gets the position of touch handles for a text selection. These are
// submitted to the display compositor along with the Layer tree's contents
// allowing it to present the selection handles. This is done because the
......@@ -733,6 +743,8 @@ class CC_EXPORT LayerTreeHost : public MutatorHostClient {
scoped_refptr<Layer> root_layer_;
ViewportLayers viewport_layers_;
// For CompositeAfterPaint.
ViewportPropertyIds viewport_property_ids_;
float top_controls_height_ = 0.f;
float top_controls_shown_ratio_ = 0.f;
......
......@@ -842,8 +842,12 @@ void LayerTreeImpl::UpdateTransformAnimation(ElementId element_id,
TransformNode* LayerTreeImpl::PageScaleTransformNode() {
auto* page_scale = PageScaleLayer();
if (!page_scale)
return nullptr;
if (!page_scale) {
// TODO(crbug.com/909750): Check all other callers of PageScaleLayer() and
// switch to viewport_property_ids_.page_scale_transform if needed.
return property_trees()->transform_tree.Node(
viewport_property_ids_.page_scale_transform);
}
return property_trees()->transform_tree.Node(
page_scale->transform_tree_index());
......@@ -858,8 +862,8 @@ void LayerTreeImpl::UpdatePageScaleNode() {
// When the page scale layer is also the root layer (this happens in the UI
// compositor), the node should also store the combined scale factor and not
// just the page scale factor.
// TODO(bokan): Need to implement this behavior for
// BlinkGeneratedPropertyTrees. i.e. (no page scale layer).
// TODO(crbug.com/909750): Implement this behavior without PageScaleLayer,
// e.g. when we switch the UI compositor to create property trees.
float device_scale_factor_for_page_scale_layer = 1.f;
gfx::Transform device_transform_for_page_scale_layer;
if (IsRootLayer(PageScaleLayer())) {
......
......@@ -286,6 +286,11 @@ class CC_EXPORT LayerTreeImpl {
const_cast<const LayerTreeImpl*>(this)->OuterViewportScrollNode());
}
void set_viewport_property_ids(
const LayerTreeHost::ViewportPropertyIds& ids) {
viewport_property_ids_ = ids;
}
void ApplySentScrollAndScaleDeltasFromAbortedCommit();
SkColor background_color() const { return background_color_; }
......@@ -648,6 +653,7 @@ class CC_EXPORT LayerTreeImpl {
int last_scrolled_scroll_node_index_;
ViewportLayerIds viewport_layer_ids_;
LayerTreeHost::ViewportPropertyIds viewport_property_ids_;
LayerSelection selection_;
......
......@@ -2935,7 +2935,7 @@ void LocalFrameView::PushPaintArtifactToCompositor(
paint_artifact_compositor_->Update(
paint_controller_->GetPaintArtifactShared(), composited_element_ids,
frame_->GetPage()->GetVisualViewport().GetPageScaleNode());
page->GetVisualViewport().GetPageScaleNode());
}
std::unique_ptr<JSONObject> LocalFrameView::CompositedLayersAsJSON(
......
......@@ -780,13 +780,14 @@ void PaintArtifactCompositor::Update(
Vector<PendingLayer, 0> pending_layers;
CollectPendingLayers(*paint_artifact, pending_layers);
// The page scale layer would create this below but we need to use the
// special EnsureCompositorPageScaleTransformNode method since the transform
// created in a different way so we call it here.
cc::LayerTreeHost::ViewportPropertyIds viewport_property_ids;
if (viewport_scale_node) {
property_tree_manager.EnsureCompositorPageScaleTransformNode(
viewport_scale_node);
viewport_property_ids.page_scale_transform =
property_tree_manager.EnsureCompositorPageScaleTransformNode(
viewport_scale_node);
}
if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled())
host->RegisterViewportPropertyIds(viewport_property_ids);
Vector<std::unique_ptr<ContentLayerClientImpl>> new_content_layer_clients;
new_content_layer_clients.ReserveCapacity(pending_layers.size());
......
......@@ -290,7 +290,7 @@ int PropertyTreeManager::EnsureCompositorTransformNode(
return id;
}
void PropertyTreeManager::EnsureCompositorPageScaleTransformNode(
int PropertyTreeManager::EnsureCompositorPageScaleTransformNode(
const TransformPaintPropertyNode* node) {
int id = EnsureCompositorTransformNode(node);
DCHECK(GetTransformTree().Node(id));
......@@ -303,6 +303,8 @@ void PropertyTreeManager::EnsureCompositorPageScaleTransformNode(
compositor_node.post_local.matrix() = compositor_node.local.matrix();
compositor_node.pre_local.matrix().setIdentity();
compositor_node.local.matrix().setIdentity();
return id;
}
int PropertyTreeManager::EnsureCompositorClipNode(
......
......@@ -100,8 +100,7 @@ class PropertyTreeManager {
int EnsureCompositorScrollNode(
const TransformPaintPropertyNode* scroll_offset_translation);
void EnsureCompositorPageScaleTransformNode(
const TransformPaintPropertyNode*);
int EnsureCompositorPageScaleTransformNode(const TransformPaintPropertyNode*);
// This function is expected to be invoked right before emitting each layer.
// It keeps track of the nesting of clip and effects, output a composited
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment