Skip to content

Commit

Permalink
Simplify LayerTreeHost::DoUpdateLayers for layer-list and non-list modes
Browse files Browse the repository at this point in the history
LayerTreeHost::DoUpdateLayers is responsible for initiating property
tree building in non-layer-list mode, and setting some hud layer state
in layer-list mode. This patch moves list and non-list logic into their
respective conditional blocks.

Layer list mode currently references the root layer for the hud layer
properties. This will likely change in the future, possibly referencing
the first layer instead of the root layer.

With this refactoring it became clear that
HeadsUpDisplayLayer::PrepareForCalculateDrawProperties was no longer a
relevant name so the function was simplified and inlined into
LayerTreeHost::UpdateHudLayer.

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Ia1d8a9530e9b9706a70012707c2ba36253e89845
Reviewed-on: https://chromium-review.googlesource.com/1200825
Reviewed-by: enne <enne@chromium.org>
Commit-Queue: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588577}
  • Loading branch information
progers authored and Commit Bot committed Sep 4, 2018
1 parent f82f308 commit d8c7896
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 53 deletions.
24 changes: 0 additions & 24 deletions cc/layers/heads_up_display_layer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@

#include "base/trace_event/trace_event.h"
#include "cc/layers/heads_up_display_layer_impl.h"
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/layer_tree_settings.h"

namespace cc {

Expand All @@ -29,28 +27,6 @@ HeadsUpDisplayLayer::HeadsUpDisplayLayer()

HeadsUpDisplayLayer::~HeadsUpDisplayLayer() = default;

void HeadsUpDisplayLayer::PrepareForCalculateDrawProperties(
const gfx::Size& device_viewport, float device_scale_factor) {
gfx::Size device_viewport_in_layout_pixels = gfx::Size(
device_viewport.width() / device_scale_factor,
device_viewport.height() / device_scale_factor);

gfx::Size bounds;
gfx::Transform matrix;
matrix.MakeIdentity();

if (layer_tree_host()->GetDebugState().ShowHudRects()) {
bounds = device_viewport_in_layout_pixels;
} else {
int size = 256;
bounds.SetSize(size, size);
matrix.Translate(device_viewport_in_layout_pixels.width() - size, 0.0);
}

SetBounds(bounds);
SetTransform(matrix);
}

bool HeadsUpDisplayLayer::HasDrawableContent() const {
return true;
}
Expand Down
3 changes: 0 additions & 3 deletions cc/layers/heads_up_display_layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ class CC_EXPORT HeadsUpDisplayLayer : public Layer {
public:
static scoped_refptr<HeadsUpDisplayLayer> Create();

void PrepareForCalculateDrawProperties(
const gfx::Size& device_viewport, float device_scale_factor);

std::unique_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override;

// Layer overrides.
Expand Down
50 changes: 24 additions & 26 deletions cc/trees/layer_tree_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -729,30 +729,6 @@ bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) {

UpdateHudLayer(debug_state_.ShowHudInfo());

Layer* root_scroll =
PropertyTreeBuilder::FindFirstScrollableLayer(root_layer);
Layer* page_scale_layer = viewport_layers_.page_scale.get();
if (!page_scale_layer && root_scroll)
page_scale_layer = root_scroll->parent();

if (hud_layer_) {
hud_layer_->PrepareForCalculateDrawProperties(device_viewport_size_,
device_scale_factor_);
// The HUD layer is managed outside the layer list sent to LayerTreeHost
// and needs to have its property tree state set.
if (IsUsingLayerLists() && root_layer_.get()) {
hud_layer_->SetTransformTreeIndex(root_layer_->transform_tree_index());
hud_layer_->SetEffectTreeIndex(root_layer_->effect_tree_index());
hud_layer_->SetClipTreeIndex(root_layer_->clip_tree_index());
hud_layer_->SetScrollTreeIndex(root_layer_->scroll_tree_index());
hud_layer_->set_property_tree_sequence_number(
root_layer_->property_tree_sequence_number());
}
}

gfx::Transform identity_transform;
LayerList update_layer_list;

// The non-layer-list mode is used when blink provides cc with a layer tree
// and cc needs to compute property trees from that.
// In layer lists mode, blink sends cc property trees directly so they do not
Expand All @@ -762,6 +738,12 @@ bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) {
TRACE_EVENT0("cc", "LayerTreeHost::UpdateLayers::BuildPropertyTrees");
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"),
"LayerTreeHostCommon::ComputeVisibleRectsWithPropertyTrees");
Layer* root_scroll =
PropertyTreeBuilder::FindFirstScrollableLayer(root_layer);
Layer* page_scale_layer = viewport_layers_.page_scale.get();
if (!page_scale_layer && root_scroll)
page_scale_layer = root_scroll->parent();
gfx::Transform identity_transform;
PropertyTreeBuilder::BuildPropertyTrees(
root_layer, page_scale_layer, inner_viewport_scroll_layer(),
outer_viewport_scroll_layer(), overscroll_elasticity_element_id(),
Expand All @@ -775,6 +757,16 @@ bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) {
"LayerTreeHost::UpdateLayers_ReceivedPropertyTrees",
TRACE_EVENT_SCOPE_THREAD, "property_trees",
property_trees_.AsTracedValue());
// The HUD layer is managed outside the layer list sent to LayerTreeHost
// and needs to have its property tree state set.
if (hud_layer_ && root_layer_.get()) {
hud_layer_->SetTransformTreeIndex(root_layer_->transform_tree_index());
hud_layer_->SetEffectTreeIndex(root_layer_->effect_tree_index());
hud_layer_->SetClipTreeIndex(root_layer_->clip_tree_index());
hud_layer_->SetScrollTreeIndex(root_layer_->scroll_tree_index());
hud_layer_->set_property_tree_sequence_number(
root_layer_->property_tree_sequence_number());
}
}

#if DCHECK_IS_ON()
Expand All @@ -793,6 +785,8 @@ bool LayerTreeHost::DoUpdateLayers(Layer* root_layer) {
#endif

draw_property_utils::UpdatePropertyTrees(this, &property_trees_);

LayerList update_layer_list;
draw_property_utils::FindLayersThatNeedUpdates(this, &property_trees_,
&update_layer_list);

Expand Down Expand Up @@ -1378,9 +1372,13 @@ void LayerTreeHost::SetElasticOverscrollFromImplSide(

void LayerTreeHost::UpdateHudLayer(bool show_hud_info) {
if (show_hud_info) {
if (!hud_layer_.get()) {
if (!hud_layer_.get())
hud_layer_ = HeadsUpDisplayLayer::Create();
}

gfx::Size device_viewport_in_layout_pixels =
gfx::Size(device_viewport_size_.width() / device_scale_factor_,
device_viewport_size_.height() / device_scale_factor_);
hud_layer_->SetBounds(device_viewport_in_layout_pixels);

if (root_layer_.get() && !hud_layer_->parent())
root_layer_->AddChild(hud_layer_);
Expand Down
2 changes: 2 additions & 0 deletions cc/trees/layer_tree_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,8 @@ class CC_EXPORT LayerTreeHost : public MutatorHostClient {
void SetElasticOverscrollFromImplSide(gfx::Vector2dF elastic_overscroll);
gfx::Vector2dF elastic_overscroll() const { return elastic_overscroll_; }

// Ensures a HUD layer exists if it is needed, and updates the layer bounds.
// If a HUD layer exists but is no longer needed, it is destroyed.
void UpdateHudLayer(bool show_hud_info);
HeadsUpDisplayLayer* hud_layer() const { return hud_layer_.get(); }

Expand Down

0 comments on commit d8c7896

Please sign in to comment.