Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: cc/output/bsp_tree_perftest.cc

Issue 2320883002: Move BSP tree perf test to cc/output/. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/BUILD.gn ('k') | cc/trees/layer_tree_host_common_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include <deque> 7 #include <deque>
8 #include <memory> 8 #include <memory>
9 #include <sstream> 9 #include <sstream>
10 10
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
(...skipping 16 matching lines...) Expand all
28 #include "cc/trees/layer_tree_impl.h" 28 #include "cc/trees/layer_tree_impl.h"
29 #include "testing/perf/perf_test.h" 29 #include "testing/perf/perf_test.h"
30 30
31 namespace cc { 31 namespace cc {
32 namespace { 32 namespace {
33 33
34 static const int kTimeLimitMillis = 2000; 34 static const int kTimeLimitMillis = 2000;
35 static const int kWarmupRuns = 5; 35 static const int kWarmupRuns = 5;
36 static const int kTimeCheckInterval = 10; 36 static const int kTimeCheckInterval = 10;
37 37
38 class LayerTreeHostCommonPerfTest : public LayerTreeTest { 38 class BspTreePerfTest : public LayerTreeTest {
39 public: 39 public:
40 LayerTreeHostCommonPerfTest() 40 BspTreePerfTest()
41 : timer_(kWarmupRuns, 41 : timer_(kWarmupRuns,
42 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 42 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
43 kTimeCheckInterval) {} 43 kTimeCheckInterval) {}
44 44
45 void ReadTestFile(const std::string& name) {
46 base::FilePath test_data_dir;
47 ASSERT_TRUE(PathService::Get(CCPaths::DIR_TEST_DATA, &test_data_dir));
48 base::FilePath json_file = test_data_dir.AppendASCII(name + ".json");
49 ASSERT_TRUE(base::ReadFileToString(json_file, &json_));
50 }
51
52 void SetupTree() override { 45 void SetupTree() override {
53 gfx::Size viewport = gfx::Size(720, 1038); 46 gfx::Size viewport = gfx::Size(720, 1038);
54 layer_tree()->SetViewportSize(viewport); 47 layer_tree()->SetViewportSize(viewport);
55 scoped_refptr<Layer> root = 48 scoped_refptr<Layer> root =
56 ParseTreeFromJson(json_, &content_layer_client_); 49 ParseTreeFromJson(json_, &content_layer_client_);
57 ASSERT_TRUE(root.get()); 50 ASSERT_TRUE(root.get());
58 layer_tree()->SetRootLayer(root); 51 layer_tree()->SetRootLayer(root);
59 content_layer_client_.set_bounds(viewport); 52 content_layer_client_.set_bounds(viewport);
60 } 53 }
61 54
62 void SetTestName(const std::string& name) { test_name_ = name; } 55 void SetTestName(const std::string& name) { test_name_ = name; }
63 56
64 void AfterTest() override {
65 CHECK(!test_name_.empty()) << "Must SetTestName() before TearDown().";
66 perf_test::PrintResult("calc_draw_props_time",
67 "",
68 test_name_,
69 1000 * timer_.MsPerLap(),
70 "us",
71 true);
72 }
73
74 protected:
75 FakeContentLayerClient content_layer_client_;
76 LapTimer timer_;
77 std::string test_name_;
78 std::string json_;
79 };
80
81 class CalcDrawPropsTest : public LayerTreeHostCommonPerfTest {
82 public:
83 void RunCalcDrawProps() { RunTest(CompositorMode::SINGLE_THREADED); }
84
85 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
86
87 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
88 timer_.Reset();
89 LayerTreeImpl* active_tree = host_impl->active_tree();
90
91 do {
92 bool can_render_to_separate_surface = true;
93 int max_texture_size = 8096;
94 DoCalcDrawPropertiesImpl(can_render_to_separate_surface,
95 max_texture_size,
96 active_tree,
97 host_impl);
98
99 timer_.NextLap();
100 } while (!timer_.HasTimeLimitExpired());
101
102 EndTest();
103 }
104
105 void DoCalcDrawPropertiesImpl(bool can_render_to_separate_surface,
106 int max_texture_size,
107 LayerTreeImpl* active_tree,
108 LayerTreeHostImpl* host_impl) {
109 LayerImplList update_list;
110 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
111 active_tree->root_layer_for_testing(), active_tree->DrawViewportSize(),
112 host_impl->DrawTransform(), active_tree->device_scale_factor(),
113 active_tree->current_page_scale_factor(),
114 active_tree->InnerViewportContainerLayer(),
115 active_tree->InnerViewportScrollLayer(),
116 active_tree->OuterViewportScrollLayer(),
117 active_tree->elastic_overscroll()->Current(active_tree->IsActiveTree()),
118 active_tree->OverscrollElasticityLayer(), max_texture_size,
119 can_render_to_separate_surface,
120 host_impl->settings().layer_transforms_should_scale_layer_contents,
121 false, // do not verify_clip_tree_calculation for perf tests
122 false, // do not verify_transform_tree_calculation for perf tests
123 &update_list, active_tree->property_trees());
124 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
125 }
126 };
127
128 class BspTreePerfTest : public CalcDrawPropsTest {
129 public:
130 BspTreePerfTest() : num_duplicates_(1) {}
131 void RunSortLayers() { RunTest(CompositorMode::SINGLE_THREADED); }
132
133 void SetNumberOfDuplicates(int num_duplicates) { 57 void SetNumberOfDuplicates(int num_duplicates) {
134 num_duplicates_ = num_duplicates; 58 num_duplicates_ = num_duplicates;
135 } 59 }
136 60
61 void ReadTestFile(const std::string& name) {
62 base::FilePath test_data_dir;
63 ASSERT_TRUE(PathService::Get(CCPaths::DIR_TEST_DATA, &test_data_dir));
64 base::FilePath json_file = test_data_dir.AppendASCII(name + ".json");
65 ASSERT_TRUE(base::ReadFileToString(json_file, &json_));
66 }
67
137 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 68 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
138 69
139 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { 70 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
140 LayerTreeImpl* active_tree = host_impl->active_tree(); 71 LayerTreeImpl* active_tree = host_impl->active_tree();
141 // First build the tree and then we'll start running tests on layersorter 72 // First build the tree and then we'll start running tests on layersorter
142 // itself 73 // itself
143 bool can_render_to_separate_surface = true; 74 bool can_render_to_separate_surface = true;
144 int max_texture_size = 8096; 75 int max_texture_size = 8096;
145 DoCalcDrawPropertiesImpl(can_render_to_separate_surface, 76 DoCalcDrawPropertiesImpl(can_render_to_separate_surface, max_texture_size,
146 max_texture_size, 77 active_tree, host_impl);
147 active_tree,
148 host_impl);
149 78
150 LayerImplList base_list; 79 LayerImplList base_list;
151 BuildLayerImplList(active_tree->root_layer_for_testing(), &base_list); 80 BuildLayerImplList(active_tree->root_layer_for_testing(), &base_list);
152 81
153 int polygon_counter = 0; 82 int polygon_counter = 0;
154 std::vector<std::unique_ptr<DrawPolygon>> polygon_list; 83 std::vector<std::unique_ptr<DrawPolygon>> polygon_list;
155 for (LayerImplList::iterator it = base_list.begin(); it != base_list.end(); 84 for (LayerImplList::iterator it = base_list.begin(); it != base_list.end();
156 ++it) { 85 ++it) {
157 DrawPolygon* draw_polygon = new DrawPolygon( 86 DrawPolygon* draw_polygon = new DrawPolygon(
158 NULL, gfx::RectF(gfx::SizeF((*it)->bounds())), 87 NULL, gfx::RectF(gfx::SizeF((*it)->bounds())),
159 (*it)->draw_properties().target_space_transform, polygon_counter++); 88 (*it)->draw_properties().target_space_transform, polygon_counter++);
160 polygon_list.push_back(std::unique_ptr<DrawPolygon>(draw_polygon)); 89 polygon_list.push_back(std::unique_ptr<DrawPolygon>(draw_polygon));
161 } 90 }
162 91
163 timer_.Reset(); 92 timer_.Reset();
164 do { 93 do {
165 std::deque<std::unique_ptr<DrawPolygon>> test_list; 94 std::deque<std::unique_ptr<DrawPolygon>> test_list;
166 for (int i = 0; i < num_duplicates_; i++) { 95 for (int i = 0; i < num_duplicates_; i++) {
167 for (size_t i = 0; i < polygon_list.size(); i++) { 96 for (size_t i = 0; i < polygon_list.size(); i++) {
168 test_list.push_back(polygon_list[i]->CreateCopy()); 97 test_list.push_back(polygon_list[i]->CreateCopy());
169 } 98 }
170 } 99 }
171 BspTree bsp_tree(&test_list); 100 BspTree bsp_tree(&test_list);
172 timer_.NextLap(); 101 timer_.NextLap();
173 } while (!timer_.HasTimeLimitExpired()); 102 } while (!timer_.HasTimeLimitExpired());
174 103
175 EndTest(); 104 EndTest();
176 } 105 }
177 106
107 void DoCalcDrawPropertiesImpl(bool can_render_to_separate_surface,
108 int max_texture_size,
109 LayerTreeImpl* active_tree,
110 LayerTreeHostImpl* host_impl) {
111 LayerImplList update_list;
112 LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
113 active_tree->root_layer_for_testing(), active_tree->DrawViewportSize(),
114 host_impl->DrawTransform(), active_tree->device_scale_factor(),
115 active_tree->current_page_scale_factor(),
116 active_tree->InnerViewportContainerLayer(),
117 active_tree->InnerViewportScrollLayer(),
118 active_tree->OuterViewportScrollLayer(),
119 active_tree->elastic_overscroll()->Current(active_tree->IsActiveTree()),
120 active_tree->OverscrollElasticityLayer(), max_texture_size,
121 can_render_to_separate_surface,
122 host_impl->settings().layer_transforms_should_scale_layer_contents,
123 false, // do not verify_clip_tree_calculation for perf tests
124 false, // do not verify_transform_tree_calculation for perf tests
125 &update_list, active_tree->property_trees());
126 LayerTreeHostCommon::CalculateDrawProperties(&inputs);
127 }
128
178 void BuildLayerImplList(LayerImpl* layer, LayerImplList* list) { 129 void BuildLayerImplList(LayerImpl* layer, LayerImplList* list) {
179 for (auto* layer_impl : *layer->layer_tree_impl()) { 130 for (auto* layer_impl : *layer->layer_tree_impl()) {
180 if (layer_impl->Is3dSorted() && !layer_impl->bounds().IsEmpty()) { 131 if (layer_impl->Is3dSorted() && !layer_impl->bounds().IsEmpty()) {
181 list->push_back(layer_impl); 132 list->push_back(layer_impl);
182 } 133 }
183 } 134 }
184 } 135 }
185 136
137 void AfterTest() override {
138 CHECK(!test_name_.empty()) << "Must SetTestName() before TearDown().";
139 perf_test::PrintResult("calc_draw_props_time", "", test_name_,
140 1000 * timer_.MsPerLap(), "us", true);
141 }
142
186 private: 143 private:
144 FakeContentLayerClient content_layer_client_;
145 LapTimer timer_;
146 std::string test_name_;
147 std::string json_;
187 LayerImplList base_list_; 148 LayerImplList base_list_;
188 int num_duplicates_; 149 int num_duplicates_ = 1;
189 }; 150 };
190 151
191 TEST_F(CalcDrawPropsTest, TenTen) {
192 SetTestName("10_10");
193 ReadTestFile("10_10_layer_tree");
194 RunCalcDrawProps();
195 }
196
197 TEST_F(CalcDrawPropsTest, HeavyPage) {
198 SetTestName("heavy_page");
199 ReadTestFile("heavy_layer_tree");
200 RunCalcDrawProps();
201 }
202
203 TEST_F(CalcDrawPropsTest, TouchRegionLight) {
204 SetTestName("touch_region_light");
205 ReadTestFile("touch_region_light");
206 RunCalcDrawProps();
207 }
208
209 TEST_F(CalcDrawPropsTest, TouchRegionHeavy) {
210 SetTestName("touch_region_heavy");
211 ReadTestFile("touch_region_heavy");
212 RunCalcDrawProps();
213 }
214
215 TEST_F(BspTreePerfTest, LayerSorterCubes) { 152 TEST_F(BspTreePerfTest, LayerSorterCubes) {
216 SetTestName("layer_sort_cubes"); 153 SetTestName("layer_sort_cubes");
217 ReadTestFile("layer_sort_cubes"); 154 ReadTestFile("layer_sort_cubes");
218 RunSortLayers(); 155 RunTest(CompositorMode::SINGLE_THREADED);
219 } 156 }
220 157
221 TEST_F(BspTreePerfTest, LayerSorterRubik) { 158 TEST_F(BspTreePerfTest, LayerSorterRubik) {
222 SetTestName("layer_sort_rubik"); 159 SetTestName("layer_sort_rubik");
223 ReadTestFile("layer_sort_rubik"); 160 ReadTestFile("layer_sort_rubik");
224 RunSortLayers(); 161 RunTest(CompositorMode::SINGLE_THREADED);
225 } 162 }
226 163
227 TEST_F(BspTreePerfTest, BspTreeCubes) { 164 TEST_F(BspTreePerfTest, BspTreeCubes) {
228 SetTestName("bsp_tree_cubes"); 165 SetTestName("bsp_tree_cubes");
229 SetNumberOfDuplicates(1); 166 SetNumberOfDuplicates(1);
230 ReadTestFile("layer_sort_cubes"); 167 ReadTestFile("layer_sort_cubes");
231 RunSortLayers(); 168 RunTest(CompositorMode::SINGLE_THREADED);
232 } 169 }
233 170
234 TEST_F(BspTreePerfTest, BspTreeRubik) { 171 TEST_F(BspTreePerfTest, BspTreeRubik) {
235 SetTestName("bsp_tree_rubik"); 172 SetTestName("bsp_tree_rubik");
236 SetNumberOfDuplicates(1); 173 SetNumberOfDuplicates(1);
237 ReadTestFile("layer_sort_rubik"); 174 ReadTestFile("layer_sort_rubik");
238 RunSortLayers(); 175 RunTest(CompositorMode::SINGLE_THREADED);
239 } 176 }
240 177
241 TEST_F(BspTreePerfTest, BspTreeCubes_2) { 178 TEST_F(BspTreePerfTest, BspTreeCubes_2) {
242 SetTestName("bsp_tree_cubes_2"); 179 SetTestName("bsp_tree_cubes_2");
243 SetNumberOfDuplicates(2); 180 SetNumberOfDuplicates(2);
244 ReadTestFile("layer_sort_cubes"); 181 ReadTestFile("layer_sort_cubes");
245 RunSortLayers(); 182 RunTest(CompositorMode::SINGLE_THREADED);
246 } 183 }
247 184
248 TEST_F(BspTreePerfTest, BspTreeCubes_4) { 185 TEST_F(BspTreePerfTest, BspTreeCubes_4) {
249 SetTestName("bsp_tree_cubes_4"); 186 SetTestName("bsp_tree_cubes_4");
250 SetNumberOfDuplicates(4); 187 SetNumberOfDuplicates(4);
251 ReadTestFile("layer_sort_cubes"); 188 ReadTestFile("layer_sort_cubes");
252 RunSortLayers(); 189 RunTest(CompositorMode::SINGLE_THREADED);
253 } 190 }
254 191
255 } // namespace 192 } // namespace
256 } // namespace cc 193 } // namespace cc
OLDNEW
« no previous file with comments | « cc/BUILD.gn ('k') | cc/trees/layer_tree_host_common_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698