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..71692d8b6bbf0c17edf021da6bbebc42ebccfb1c 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,95 @@ 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); |
+ |
+ BuildLayerImplList(active_tree->root_layer(), &base_list); |
+ |
+ LayerImplList test_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 |
+ test_list.clear(); |
Ian Vollick
2014/05/31 01:52:01
For each list you sort (I think there should be on
Troy Hildebrandt
2014/06/02 22:08:30
Done.
|
+ for (LayerImplList::iterator it = base_list.begin(); it < base_list.end(); |
+ ++it) { |
+ test_list.push_back(*it); |
+ } |
+ |
+ LayerSorter layer_sorter; |
+ layer_sorter.Sort(test_list.begin(), test_list.end()); |
+ timer_.NextLap(); |
+ } while (!timer_.HasTimeLimitExpired()); |
+ |
+ EndTest(); |
+ } |
+ |
+ void BuildLayerImplList(LayerImpl* layer, |
+ LayerImplList* list, |
+ size_t sorted_3d_level = 0) { |
+ if (layer == NULL) |
Ian Vollick
2014/05/31 01:52:01
Will this ever be the case? Correct me if I'm wron
Troy Hildebrandt
2014/06/02 22:08:30
As far as I can tell, it shouldn't be. I removed t
|
+ return; |
+ |
+ size_t sorted_3d = sorted_3d_level + (layer->is_3d_sorted() ? 1 : 0); |
Ian Vollick
2014/05/31 01:52:01
Using a size_t here is a little wonky and, I think
Troy Hildebrandt
2014/06/02 22:08:30
Removed, using layer->is_3d_sorted() now.
|
+ if (sorted_3d) { |
Ian Vollick
2014/05/31 01:52:01
Nit: no braces around one liners. Here and elsewhe
enne (OOO)
2014/06/02 17:54:19
Nit nit: Braces on oneliners are not forbidden by
Ian Vollick
2014/06/02 20:19:30
Wait, what?! That's awesome. I love braces around
|
+ list->push_back(layer); |
+ } |
+ |
+ for (size_t i = 0; i < layer->children().size(); ++i) { |
+ BuildLayerImplList(layer->children()[i], list, sorted_3d); |
+ } |
+ } |
+ |
+ private: |
+ LayerImplList base_list; |
}; |
TEST_F(CalcDrawPropsMainTest, TenTen) { |
@@ -196,5 +265,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 |