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 1732e5588981f89d175935ae9d984b6cd5c05ad1..73d5c1d0d413db93dddcdee3f1194d5167967ac4 100644 |
--- a/cc/trees/layer_tree_host_common_perftest.cc |
+++ b/cc/trees/layer_tree_host_common_perftest.cc |
@@ -25,6 +25,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" |
@@ -161,7 +162,55 @@ |
} |
}; |
-class BspTreePerfTest : public CalcDrawPropsImplTest { |
+class LayerSorterMainTest : public CalcDrawPropsImplTest { |
+ public: |
+ void RunSortLayers() { RunTest(false, false, false); } |
+ |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ 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->Is3dSorted()) { |
+ list->push_back(layer); |
+ } |
+ |
+ for (size_t i = 0; i < layer->children().size(); i++) { |
+ BuildLayerImplList(layer->children()[i], list); |
+ } |
+ } |
+ |
+ private: |
+ LayerImplList base_list_; |
+ LayerSorter layer_sorter_; |
+}; |
+ |
+class BspTreePerfTest : public LayerSorterMainTest { |
public: |
void RunSortLayers() { RunTest(false, false, false); } |
@@ -212,18 +261,7 @@ |
EndTest(); |
} |
- void BuildLayerImplList(LayerImpl* layer, LayerImplList* list) { |
- if (layer->Is3dSorted()) { |
- list->push_back(layer); |
- } |
- |
- for (size_t i = 0; i < layer->children().size(); i++) { |
- BuildLayerImplList(layer->children()[i], list); |
- } |
- } |
- |
private: |
- LayerImplList base_list_; |
int num_duplicates_; |
}; |
@@ -275,13 +313,13 @@ |
RunCalcDrawProps(); |
} |
-TEST_F(BspTreePerfTest, LayerSorterCubes) { |
+TEST_F(LayerSorterMainTest, LayerSorterCubes) { |
SetTestName("layer_sort_cubes"); |
ReadTestFile("layer_sort_cubes"); |
RunSortLayers(); |
} |
-TEST_F(BspTreePerfTest, LayerSorterRubik) { |
+TEST_F(LayerSorterMainTest, LayerSorterRubik) { |
SetTestName("layer_sort_rubik"); |
ReadTestFile("layer_sort_rubik"); |
// TODO(vollick): Remove verify_property_trees setting after |