blob: 6d40f6cf2b9e983ef9e89ebcf29ac0972e34d675 [file] [log] [blame]
// Copyright 2014 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/test/layer_tree_host_common_test.h"
#include <stddef.h>
#include "cc/layers/layer.h"
#include "cc/layers/layer_impl.h"
#include "cc/test/fake_layer_tree_host.h"
#include "cc/trees/draw_property_utils.h"
#include "cc/trees/layer_tree_host_common.h"
#include "cc/trees/property_tree_builder.h"
namespace cc {
LayerTreeHostCommonTestBase::LayerTreeHostCommonTestBase(
const LayerTreeSettings& settings)
: LayerTestCommon::LayerImplTest(settings) {}
LayerTreeHostCommonTestBase::~LayerTreeHostCommonTestBase() {
}
void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting(
Layer* layer,
const gfx::Transform& transform,
const gfx::Point3F& transform_origin,
const gfx::PointF& position,
const gfx::Size& bounds,
bool flatten_transform,
bool is_3d_sorted) {
SetLayerPropertiesForTestingInternal(layer, transform, position, bounds,
is_3d_sorted);
layer->SetTransformOrigin(transform_origin);
layer->SetShouldFlattenTransform(flatten_transform);
}
void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting(
LayerImpl* layer,
const gfx::Transform& transform,
const gfx::Point3F& transform_origin,
const gfx::PointF& position,
const gfx::Size& bounds,
bool flatten_transform,
bool is_3d_sorted) {
SetLayerPropertiesForTestingInternal(layer, transform, position, bounds,
is_3d_sorted);
layer->test_properties()->transform_origin = transform_origin;
layer->test_properties()->should_flatten_transform = flatten_transform;
}
void LayerTreeHostCommonTestBase::SetLayerPropertiesForTesting(
LayerImpl* layer,
const gfx::Transform& transform,
const gfx::Point3F& transform_origin,
const gfx::PointF& position,
const gfx::Size& bounds,
bool flatten_transform,
bool is_3d_sorted,
bool create_render_surface) {
SetLayerPropertiesForTestingInternal(layer, transform, position, bounds,
is_3d_sorted);
layer->test_properties()->transform_origin = transform_origin;
layer->test_properties()->should_flatten_transform = flatten_transform;
if (create_render_surface) {
layer->test_properties()->force_render_surface = true;
}
}
void LayerTreeHostCommonTestBase::ExecuteCalculateDrawProperties(
Layer* root_layer,
float device_scale_factor,
float page_scale_factor,
Layer* page_scale_layer) {
PropertyTreeBuilder::PreCalculateMetaInformation(root_layer);
EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f));
gfx::Transform identity_matrix;
gfx::Size device_viewport_size =
gfx::Size(root_layer->bounds().width() * device_scale_factor,
root_layer->bounds().height() * device_scale_factor);
// We are probably not testing what is intended if the root_layer bounds are
// empty.
DCHECK(!root_layer->bounds().IsEmpty());
LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
root_layer, device_viewport_size);
inputs.device_scale_factor = device_scale_factor;
inputs.page_scale_factor = page_scale_factor;
inputs.page_scale_layer = page_scale_layer;
LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
}
void LayerTreeHostCommonTestBase::
ExecuteCalculateDrawPropertiesWithPropertyTrees(Layer* root_layer) {
DCHECK(root_layer->layer_tree_host());
PropertyTreeBuilder::PreCalculateMetaInformation(root_layer);
gfx::Transform identity_transform;
bool can_render_to_separate_surface = true;
const Layer* page_scale_layer =
root_layer->layer_tree_host()->page_scale_layer();
Layer* inner_viewport_scroll_layer =
root_layer->layer_tree_host()->inner_viewport_scroll_layer();
Layer* outer_viewport_scroll_layer =
root_layer->layer_tree_host()->outer_viewport_scroll_layer();
const Layer* overscroll_elasticity_layer =
root_layer->layer_tree_host()->overscroll_elasticity_layer();
gfx::Vector2dF elastic_overscroll =
root_layer->layer_tree_host()->elastic_overscroll();
float page_scale_factor = 1.f;
float device_scale_factor = 1.f;
gfx::Size device_viewport_size =
gfx::Size(root_layer->bounds().width() * device_scale_factor,
root_layer->bounds().height() * device_scale_factor);
PropertyTrees* property_trees =
root_layer->layer_tree_host()->property_trees();
update_layer_list_.clear();
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);
draw_property_utils::UpdatePropertyTrees(property_trees,
can_render_to_separate_surface);
draw_property_utils::FindLayersThatNeedUpdates(
root_layer->layer_tree_host(), property_trees->transform_tree,
property_trees->effect_tree, &update_layer_list_);
draw_property_utils::ComputeVisibleRectsForTesting(
property_trees, can_render_to_separate_surface, &update_layer_list_);
}
void LayerTreeHostCommonTestBase::
ExecuteCalculateDrawPropertiesWithPropertyTrees(LayerImpl* root_layer) {
DCHECK(root_layer->layer_tree_impl());
PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer);
gfx::Transform identity_transform;
bool can_render_to_separate_surface = true;
LayerImpl* page_scale_layer = nullptr;
LayerImpl* inner_viewport_scroll_layer =
root_layer->layer_tree_impl()->InnerViewportScrollLayer();
LayerImpl* outer_viewport_scroll_layer =
root_layer->layer_tree_impl()->OuterViewportScrollLayer();
LayerImpl* overscroll_elasticity_layer =
root_layer->layer_tree_impl()->OverscrollElasticityLayer();
gfx::Vector2dF elastic_overscroll =
root_layer->layer_tree_impl()->elastic_overscroll()->Current(
root_layer->layer_tree_impl()->IsActiveTree());
float page_scale_factor = 1.f;
float device_scale_factor = 1.f;
gfx::Size device_viewport_size =
gfx::Size(root_layer->bounds().width() * device_scale_factor,
root_layer->bounds().height() * device_scale_factor);
update_layer_list_impl_.reset(new LayerImplList);
root_layer->layer_tree_impl()->BuildLayerListForTesting();
draw_property_utils::BuildPropertyTreesAndComputeVisibleRects(
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,
can_render_to_separate_surface,
root_layer->layer_tree_impl()->property_trees(),
update_layer_list_impl_.get());
}
void LayerTreeHostCommonTestBase::ExecuteCalculateDrawProperties(
LayerImpl* root_layer,
float device_scale_factor,
float page_scale_factor,
LayerImpl* page_scale_layer) {
root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor);
EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f));
gfx::Transform identity_matrix;
gfx::Size device_viewport_size =
gfx::Size(root_layer->bounds().width() * device_scale_factor,
root_layer->bounds().height() * device_scale_factor);
render_surface_layer_list_impl_.reset(new LayerImplList);
// We are probably not testing what is intended if the root_layer bounds are
// empty.
DCHECK(!root_layer->bounds().IsEmpty());
LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
root_layer, device_viewport_size, render_surface_layer_list_impl_.get());
inputs.device_scale_factor = device_scale_factor;
inputs.page_scale_factor = page_scale_factor;
inputs.page_scale_layer = page_scale_layer;
inputs.can_adjust_raster_scales = true;
LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
}
void LayerTreeHostCommonTestBase::
ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces(
LayerImpl* root_layer) {
gfx::Transform identity_matrix;
gfx::Size device_viewport_size =
gfx::Size(root_layer->bounds().width(), root_layer->bounds().height());
render_surface_layer_list_impl_.reset(new LayerImplList);
DCHECK(!root_layer->bounds().IsEmpty());
LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
root_layer, device_viewport_size, render_surface_layer_list_impl_.get());
inputs.can_adjust_raster_scales = true;
inputs.can_render_to_separate_surface = false;
LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
}
bool LayerTreeHostCommonTestBase::UpdateLayerListContains(int id) const {
for (size_t i = 0; i < update_layer_list_.size(); ++i) {
if (update_layer_list_[i]->id() == id)
return true;
}
return false;
}
LayerTreeHostCommonTest::LayerTreeHostCommonTest()
: LayerTreeHostCommonTestBase(LayerTreeSettings()) {}
LayerTreeHostCommonTest::LayerTreeHostCommonTest(
const LayerTreeSettings& settings)
: LayerTreeHostCommonTestBase(settings) {
}
} // namespace cc