| Index: cc/trees/layer_tree_host_common_perftest.cc
|
| diff --git a/cc/trees/layer_tree_host_common_perftest.cc b/cc/trees/layer_tree_host_common_perftest.cc
|
| index 7fe0d99146398f955ce5983432c4724001f43a7e..eb80c63a3fc7fc3a2d6ed32b6943671107ab44f9 100644
|
| --- a/cc/trees/layer_tree_host_common_perftest.cc
|
| +++ b/cc/trees/layer_tree_host_common_perftest.cc
|
| @@ -19,6 +19,7 @@
|
| #include "cc/test/layer_tree_json_parser.h"
|
| #include "cc/test/layer_tree_test.h"
|
| #include "cc/test/paths.h"
|
| +#include "cc/trees/layer_sorter.h"
|
| #include "cc/trees/layer_tree_impl.h"
|
| #include "testing/perf/perf_test.h"
|
|
|
| @@ -125,27 +126,85 @@ class CalcDrawPropsImplTest : public LayerTreeHostCommonPerfTest {
|
| do {
|
| bool can_render_to_separate_surface = true;
|
| int max_texture_size = 8096;
|
| - LayerImplList update_list;
|
| - LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
|
| - active_tree->root_layer(),
|
| - active_tree->DrawViewportSize(),
|
| - host_impl->DrawTransform(),
|
| - active_tree->device_scale_factor(),
|
| - active_tree->total_page_scale_factor(),
|
| - active_tree->InnerViewportContainerLayer(),
|
| - max_texture_size,
|
| - host_impl->settings().can_use_lcd_text,
|
| - can_render_to_separate_surface,
|
| - host_impl->settings().layer_transforms_should_scale_layer_contents,
|
| - &update_list,
|
| - 0);
|
| - LayerTreeHostCommon::CalculateDrawProperties(&inputs);
|
| + DoCalcDrawPropertiesImpl(can_render_to_separate_surface,
|
| + max_texture_size,
|
| + active_tree,
|
| + host_impl);
|
| +
|
| + timer_.NextLap();
|
| + } while (!timer_.HasTimeLimitExpired());
|
| +
|
| + EndTest();
|
| + }
|
| +
|
| + void DoCalcDrawPropertiesImpl(bool can_render_to_separate_surface,
|
| + int max_texture_size,
|
| + LayerTreeImpl* active_tree,
|
| + LayerTreeHostImpl* host_impl) {
|
| + LayerImplList update_list;
|
| + LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
|
| + active_tree->root_layer(),
|
| + active_tree->DrawViewportSize(),
|
| + host_impl->DrawTransform(),
|
| + active_tree->device_scale_factor(),
|
| + active_tree->total_page_scale_factor(),
|
| + active_tree->InnerViewportContainerLayer(),
|
| + max_texture_size,
|
| + host_impl->settings().can_use_lcd_text,
|
| + can_render_to_separate_surface,
|
| + host_impl->settings().layer_transforms_should_scale_layer_contents,
|
| + &update_list,
|
| + 0);
|
| + LayerTreeHostCommon::CalculateDrawProperties(&inputs);
|
| + }
|
| +};
|
| +
|
| +class LayerSorterMainTest : public CalcDrawPropsImplTest {
|
| + public:
|
| + void RunSortLayers() { RunTest(false, false, false); }
|
| +
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + LayerTreeImpl* active_tree = host_impl->active_tree();
|
| + // First build the tree and then we'll start running tests on layersorter
|
| + // itself
|
| + bool can_render_to_separate_surface = true;
|
| + int max_texture_size = 8096;
|
| + DoCalcDrawPropertiesImpl(can_render_to_separate_surface,
|
| + max_texture_size,
|
| + active_tree,
|
| + host_impl);
|
|
|
| + // Behaviour of this test is different from that of sorting in practice.
|
| + // In this case, all layers that exist in any 3D context are put into a list
|
| + // and are sorted as one big 3D context instead of several smaller ones.
|
| + BuildLayerImplList(active_tree->root_layer(), &base_list_);
|
| + timer_.Reset();
|
| + do {
|
| + // Here we'll move the layers into a LayerImpl list of their own to be
|
| + // sorted so we don't have a sorted list for every run after the first
|
| + LayerImplList test_list = base_list_;
|
| + layer_sorter_.Sort(test_list.begin(), test_list.end());
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| EndTest();
|
| }
|
| +
|
| + void BuildLayerImplList(LayerImpl* layer, LayerImplList* list) {
|
| + if (layer->is_3d_sorted()) {
|
| + list->push_back(layer);
|
| + }
|
| +
|
| + for (unsigned int i = 0; i < layer->children().size(); i++) {
|
| + BuildLayerImplList(layer->children()[i], list);
|
| + }
|
| + }
|
| +
|
| + private:
|
| + LayerImplList base_list_;
|
| + LayerSorter layer_sorter_;
|
| };
|
|
|
| TEST_F(CalcDrawPropsMainTest, TenTen) {
|
| @@ -196,5 +255,17 @@ TEST_F(CalcDrawPropsImplTest, TouchRegionHeavy) {
|
| RunCalcDrawProps();
|
| }
|
|
|
| +TEST_F(LayerSorterMainTest, LayerSorterCubes) {
|
| + SetTestName("layer_sort_cubes");
|
| + ReadTestFile("layer_sort_cubes");
|
| + RunSortLayers();
|
| +}
|
| +
|
| +TEST_F(LayerSorterMainTest, LayerSorterRubik) {
|
| + SetTestName("layer_sort_rubik");
|
| + ReadTestFile("layer_sort_rubik");
|
| + RunSortLayers();
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|