| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cc/debug/lap_timer.h" | 5 #include "cc/debug/lap_timer.h" |
| 6 #include "cc/resources/picture_layer_tiling.h" | 6 #include "cc/resources/picture_layer_tiling.h" |
| 7 #include "cc/resources/resource_provider.h" | 7 #include "cc/resources/resource_provider.h" |
| 8 #include "cc/resources/scoped_resource.h" | 8 #include "cc/resources/scoped_resource.h" |
| 9 #include "cc/test/fake_output_surface.h" | 9 #include "cc/test/fake_output_surface.h" |
| 10 #include "cc/test/fake_output_surface_client.h" | 10 #include "cc/test/fake_output_surface_client.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 } while (!timer_.HasTimeLimitExpired()); | 171 } while (!timer_.HasTimeLimitExpired()); |
| 172 | 172 |
| 173 perf_test::PrintResult("tiling_raster_tile_iterator_construct_and_iterate", | 173 perf_test::PrintResult("tiling_raster_tile_iterator_construct_and_iterate", |
| 174 "", | 174 "", |
| 175 test_name, | 175 test_name, |
| 176 timer_.LapsPerSecond(), | 176 timer_.LapsPerSecond(), |
| 177 "runs/s", | 177 "runs/s", |
| 178 true); | 178 true); |
| 179 } | 179 } |
| 180 | 180 |
| 181 void RunEvictionIteratorConstructTest(const std::string& test_name, | |
| 182 const gfx::Rect& viewport) { | |
| 183 gfx::Size bounds(viewport.size()); | |
| 184 picture_layer_tiling_ = | |
| 185 PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); | |
| 186 picture_layer_tiling_client_.set_tree(ACTIVE_TREE); | |
| 187 picture_layer_tiling_->ComputeTilePriorityRects(viewport, 1.0f, 1.0, | |
| 188 Occlusion()); | |
| 189 | |
| 190 timer_.Reset(); | |
| 191 TreePriority priorities[] = {SAME_PRIORITY_FOR_BOTH_TREES, | |
| 192 SMOOTHNESS_TAKES_PRIORITY, | |
| 193 NEW_CONTENT_TAKES_PRIORITY}; | |
| 194 int priority_count = 0; | |
| 195 do { | |
| 196 PictureLayerTiling::TilingEvictionTileIterator it( | |
| 197 picture_layer_tiling_.get(), | |
| 198 priorities[priority_count], | |
| 199 PictureLayerTiling::NOW); | |
| 200 priority_count = (priority_count + 1) % arraysize(priorities); | |
| 201 timer_.NextLap(); | |
| 202 } while (!timer_.HasTimeLimitExpired()); | |
| 203 | |
| 204 perf_test::PrintResult("tiling_eviction_tile_iterator_construct", | |
| 205 "", | |
| 206 test_name, | |
| 207 timer_.LapsPerSecond(), | |
| 208 "runs/s", | |
| 209 true); | |
| 210 } | |
| 211 | |
| 212 void RunEvictionIteratorConstructAndIterateTest(const std::string& test_name, | |
| 213 int num_tiles, | |
| 214 const gfx::Rect& viewport) { | |
| 215 gfx::Size bounds(10000, 10000); | |
| 216 picture_layer_tiling_ = | |
| 217 PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); | |
| 218 picture_layer_tiling_client_.set_tree(ACTIVE_TREE); | |
| 219 picture_layer_tiling_->ComputeTilePriorityRects(viewport, 1.0f, 1.0, | |
| 220 Occlusion()); | |
| 221 | |
| 222 TreePriority priorities[] = {SAME_PRIORITY_FOR_BOTH_TREES, | |
| 223 SMOOTHNESS_TAKES_PRIORITY, | |
| 224 NEW_CONTENT_TAKES_PRIORITY}; | |
| 225 | |
| 226 // Ensure all tiles have resources. | |
| 227 std::vector<Tile*> all_tiles = picture_layer_tiling_->AllTilesForTesting(); | |
| 228 for (std::vector<Tile*>::iterator tile_it = all_tiles.begin(); | |
| 229 tile_it != all_tiles.end(); | |
| 230 ++tile_it) { | |
| 231 Tile* tile = *tile_it; | |
| 232 ManagedTileState::DrawInfo& draw_info = tile->draw_info(); | |
| 233 draw_info.SetResourceForTesting( | |
| 234 ScopedResource::Create(resource_provider_.get()).Pass()); | |
| 235 } | |
| 236 | |
| 237 int priority_count = 0; | |
| 238 timer_.Reset(); | |
| 239 do { | |
| 240 int count = num_tiles; | |
| 241 PictureLayerTiling::TilingEvictionTileIterator it( | |
| 242 picture_layer_tiling_.get(), | |
| 243 priorities[priority_count], | |
| 244 PictureLayerTiling::EVENTUALLY); | |
| 245 while (count--) { | |
| 246 ASSERT_TRUE(it) << "count: " << count; | |
| 247 ASSERT_TRUE(*it != NULL) << "count: " << count; | |
| 248 ++it; | |
| 249 } | |
| 250 priority_count = (priority_count + 1) % arraysize(priorities); | |
| 251 timer_.NextLap(); | |
| 252 } while (!timer_.HasTimeLimitExpired()); | |
| 253 | |
| 254 // Remove all resources from tiles to make sure the tile version destructor | |
| 255 // doesn't complain. | |
| 256 for (std::vector<Tile*>::iterator tile_it = all_tiles.begin(); | |
| 257 tile_it != all_tiles.end(); | |
| 258 ++tile_it) { | |
| 259 Tile* tile = *tile_it; | |
| 260 ManagedTileState::DrawInfo& draw_info = tile->draw_info(); | |
| 261 draw_info.SetResourceForTesting(nullptr); | |
| 262 } | |
| 263 | |
| 264 perf_test::PrintResult( | |
| 265 "tiling_eviction_tile_iterator_construct_and_iterate", | |
| 266 "", | |
| 267 test_name, | |
| 268 timer_.LapsPerSecond(), | |
| 269 "runs/s", | |
| 270 true); | |
| 271 } | |
| 272 | |
| 273 private: | 181 private: |
| 274 FakePictureLayerTilingClient picture_layer_tiling_client_; | 182 FakePictureLayerTilingClient picture_layer_tiling_client_; |
| 275 scoped_ptr<PictureLayerTiling> picture_layer_tiling_; | 183 scoped_ptr<PictureLayerTiling> picture_layer_tiling_; |
| 276 | 184 |
| 277 LapTimer timer_; | 185 LapTimer timer_; |
| 278 | 186 |
| 279 scoped_refptr<ContextProvider> context_provider_; | 187 scoped_refptr<ContextProvider> context_provider_; |
| 280 FakeOutputSurfaceClient output_surface_client_; | 188 FakeOutputSurfaceClient output_surface_client_; |
| 281 scoped_ptr<FakeOutputSurface> output_surface_; | 189 scoped_ptr<FakeOutputSurface> output_surface_; |
| 282 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 190 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 RunRasterIteratorConstructAndIterateTest( | 234 RunRasterIteratorConstructAndIterateTest( |
| 327 "32_100x100", 32, gfx::Rect(0, 0, 100, 100)); | 235 "32_100x100", 32, gfx::Rect(0, 0, 100, 100)); |
| 328 RunRasterIteratorConstructAndIterateTest( | 236 RunRasterIteratorConstructAndIterateTest( |
| 329 "32_500x500", 32, gfx::Rect(0, 0, 500, 500)); | 237 "32_500x500", 32, gfx::Rect(0, 0, 500, 500)); |
| 330 RunRasterIteratorConstructAndIterateTest( | 238 RunRasterIteratorConstructAndIterateTest( |
| 331 "64_100x100", 64, gfx::Rect(0, 0, 100, 100)); | 239 "64_100x100", 64, gfx::Rect(0, 0, 100, 100)); |
| 332 RunRasterIteratorConstructAndIterateTest( | 240 RunRasterIteratorConstructAndIterateTest( |
| 333 "64_500x500", 64, gfx::Rect(0, 0, 500, 500)); | 241 "64_500x500", 64, gfx::Rect(0, 0, 500, 500)); |
| 334 } | 242 } |
| 335 | 243 |
| 336 TEST_F(PictureLayerTilingPerfTest, TilingEvictionTileIteratorConstruct) { | |
| 337 RunEvictionIteratorConstructTest("0_0_100x100", gfx::Rect(0, 0, 100, 100)); | |
| 338 RunEvictionIteratorConstructTest("50_0_100x100", gfx::Rect(50, 0, 100, 100)); | |
| 339 RunEvictionIteratorConstructTest("100_0_100x100", | |
| 340 gfx::Rect(100, 0, 100, 100)); | |
| 341 RunEvictionIteratorConstructTest("150_0_100x100", | |
| 342 gfx::Rect(150, 0, 100, 100)); | |
| 343 } | |
| 344 | |
| 345 TEST_F(PictureLayerTilingPerfTest, | |
| 346 TilingEvictionTileIteratorConstructAndIterate) { | |
| 347 RunEvictionIteratorConstructAndIterateTest( | |
| 348 "32_100x100", 32, gfx::Rect(0, 0, 100, 100)); | |
| 349 RunEvictionIteratorConstructAndIterateTest( | |
| 350 "32_500x500", 32, gfx::Rect(0, 0, 500, 500)); | |
| 351 RunEvictionIteratorConstructAndIterateTest( | |
| 352 "64_100x100", 64, gfx::Rect(0, 0, 100, 100)); | |
| 353 RunEvictionIteratorConstructAndIterateTest( | |
| 354 "64_500x500", 64, gfx::Rect(0, 0, 500, 500)); | |
| 355 } | |
| 356 | |
| 357 } // namespace | 244 } // namespace |
| 358 | 245 |
| 359 } // namespace cc | 246 } // namespace cc |
| OLD | NEW |