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

Side by Side Diff: cc/resources/tile_manager_unittest.cc

Issue 367833003: cc: Start using raster/eviction iterators. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase + fix Created 6 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 | Annotate | Revision Log
OLDNEW
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/resources/eviction_tile_priority_queue.h" 5 #include "cc/resources/eviction_tile_priority_queue.h"
6 #include "cc/resources/raster_tile_priority_queue.h" 6 #include "cc/resources/raster_tile_priority_queue.h"
7 #include "cc/resources/tile.h" 7 #include "cc/resources/tile.h"
8 #include "cc/resources/tile_priority.h" 8 #include "cc/resources/tile_priority.h"
9 #include "cc/test/fake_impl_proxy.h" 9 #include "cc/test/fake_impl_proxy.h"
10 #include "cc/test/fake_layer_tree_host_impl.h" 10 #include "cc/test/fake_layer_tree_host_impl.h"
11 #include "cc/test/fake_output_surface.h" 11 #include "cc/test/fake_output_surface.h"
12 #include "cc/test/fake_output_surface_client.h" 12 #include "cc/test/fake_output_surface_client.h"
13 #include "cc/test/fake_picture_layer_impl.h" 13 #include "cc/test/fake_picture_layer_impl.h"
14 #include "cc/test/fake_picture_pile_impl.h" 14 #include "cc/test/fake_picture_pile_impl.h"
15 #include "cc/test/fake_tile_manager.h" 15 #include "cc/test/fake_tile_manager.h"
16 #include "cc/test/impl_side_painting_settings.h" 16 #include "cc/test/impl_side_painting_settings.h"
17 #include "cc/test/test_shared_bitmap_manager.h" 17 #include "cc/test/test_shared_bitmap_manager.h"
18 #include "cc/test/test_tile_priorities.h" 18 #include "cc/test/test_tile_priorities.h"
19 #include "cc/trees/layer_tree_impl.h" 19 #include "cc/trees/layer_tree_impl.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 namespace cc { 22 namespace cc {
23 namespace { 23 namespace {
24 24
25 class TileManagerTest : public testing::TestWithParam<bool>,
26 public TileManagerClient {
27 public:
28 typedef std::vector<scoped_refptr<Tile> > TileVector;
29
30 TileManagerTest()
31 : memory_limit_policy_(ALLOW_ANYTHING),
32 max_tiles_(0),
33 ready_to_activate_(false) {}
34
35 void Initialize(int max_tiles,
36 TileMemoryLimitPolicy memory_limit_policy,
37 TreePriority tree_priority) {
38 output_surface_ = FakeOutputSurface::Create3d();
39 CHECK(output_surface_->BindToClient(&output_surface_client_));
40
41 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
42 resource_provider_ = ResourceProvider::Create(output_surface_.get(),
43 shared_bitmap_manager_.get(),
44 NULL,
45 0,
46 false,
47 1,
48 false);
49 resource_pool_ = ResourcePool::Create(
50 resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
51 tile_manager_ =
52 make_scoped_ptr(new FakeTileManager(this, resource_pool_.get()));
53
54 memory_limit_policy_ = memory_limit_policy;
55 max_tiles_ = max_tiles;
56 picture_pile_ = FakePicturePileImpl::CreateInfiniteFilledPile();
57
58 SetTreePriority(tree_priority);
59 }
60
61 void SetTreePriority(TreePriority tree_priority) {
62 GlobalStateThatImpactsTilePriority state;
63 gfx::Size tile_size = settings_.default_tile_size;
64
65 if (UsingMemoryLimit()) {
66 state.soft_memory_limit_in_bytes =
67 max_tiles_ * 4 * tile_size.width() * tile_size.height();
68 state.num_resources_limit = 100;
69 } else {
70 state.soft_memory_limit_in_bytes = 100 * 1000 * 1000;
71 state.num_resources_limit = max_tiles_;
72 }
73 state.hard_memory_limit_in_bytes = state.soft_memory_limit_in_bytes * 2;
74 state.memory_limit_policy = memory_limit_policy_;
75 state.tree_priority = tree_priority;
76
77 global_state_ = state;
78 resource_pool_->SetResourceUsageLimits(state.soft_memory_limit_in_bytes,
79 state.soft_memory_limit_in_bytes,
80 state.num_resources_limit);
81 tile_manager_->SetGlobalStateForTesting(state);
82 }
83
84 virtual void TearDown() OVERRIDE {
85 tile_manager_.reset(NULL);
86 picture_pile_ = NULL;
87
88 testing::Test::TearDown();
89 }
90
91 // TileManagerClient implementation.
92 virtual const std::vector<PictureLayerImpl*>& GetPictureLayers()
93 const OVERRIDE {
94 return picture_layers_;
95 }
96 virtual void NotifyReadyToActivate() OVERRIDE { ready_to_activate_ = true; }
97 virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE {}
98 virtual void BuildRasterQueue(RasterTilePriorityQueue* queue,
99 TreePriority priority) OVERRIDE {}
100 virtual void BuildEvictionQueue(EvictionTilePriorityQueue* queue,
101 TreePriority priority) OVERRIDE {}
102
103 TileVector CreateTilesWithSize(int count,
104 TilePriority active_priority,
105 TilePriority pending_priority,
106 const gfx::Size& tile_size) {
107 TileVector tiles;
108 for (int i = 0; i < count; ++i) {
109 scoped_refptr<Tile> tile = tile_manager_->CreateTile(picture_pile_.get(),
110 tile_size,
111 gfx::Rect(),
112 1.0,
113 0,
114 0,
115 0);
116 tile->SetPriority(ACTIVE_TREE, active_priority);
117 tile->SetPriority(PENDING_TREE, pending_priority);
118 tiles.push_back(tile);
119 }
120 return tiles;
121 }
122
123 TileVector CreateTiles(int count,
124 TilePriority active_priority,
125 TilePriority pending_priority) {
126 return CreateTilesWithSize(
127 count, active_priority, pending_priority, settings_.default_tile_size);
128 }
129
130 void ReleaseTiles(TileVector* tiles) {
131 for (TileVector::iterator it = tiles->begin(); it != tiles->end(); it++) {
132 Tile* tile = it->get();
133 tile->SetPriority(ACTIVE_TREE, TilePriority());
134 tile->SetPriority(PENDING_TREE, TilePriority());
135 }
136 }
137
138 FakeTileManager* tile_manager() { return tile_manager_.get(); }
139
140 int AssignedMemoryCount(const TileVector& tiles) {
141 int has_memory_count = 0;
142 for (TileVector::const_iterator it = tiles.begin(); it != tiles.end();
143 ++it) {
144 if (tile_manager_->HasBeenAssignedMemory(it->get()))
145 ++has_memory_count;
146 }
147 return has_memory_count;
148 }
149
150 bool ready_to_activate() const { return ready_to_activate_; }
151
152 // The parametrization specifies whether the max tile limit should
153 // be applied to memory or resources.
154 bool UsingResourceLimit() { return !GetParam(); }
155 bool UsingMemoryLimit() { return GetParam(); }
156
157 protected:
158 GlobalStateThatImpactsTilePriority global_state_;
159
160 private:
161 LayerTreeSettings settings_;
162 scoped_ptr<FakeTileManager> tile_manager_;
163 scoped_refptr<FakePicturePileImpl> picture_pile_;
164 FakeOutputSurfaceClient output_surface_client_;
165 scoped_ptr<FakeOutputSurface> output_surface_;
166 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
167 scoped_ptr<ResourceProvider> resource_provider_;
168 scoped_ptr<ResourcePool> resource_pool_;
169 TileMemoryLimitPolicy memory_limit_policy_;
170 int max_tiles_;
171 bool ready_to_activate_;
172 std::vector<PictureLayerImpl*> picture_layers_;
173 };
174
175 TEST_P(TileManagerTest, EnoughMemoryAllowAnything) {
176 // A few tiles of each type of priority, with enough memory for all tiles.
177
178 Initialize(10, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
179 TileVector active_now =
180 CreateTiles(3, TilePriorityForNowBin(), TilePriority());
181 TileVector pending_now =
182 CreateTiles(3, TilePriority(), TilePriorityForNowBin());
183 TileVector active_pending_soon =
184 CreateTiles(3, TilePriorityForSoonBin(), TilePriorityForSoonBin());
185 TileVector never_bin = CreateTiles(1, TilePriority(), TilePriority());
186
187 tile_manager()->AssignMemoryToTiles(global_state_);
188
189 EXPECT_EQ(3, AssignedMemoryCount(active_now));
190 EXPECT_EQ(3, AssignedMemoryCount(pending_now));
191 EXPECT_EQ(3, AssignedMemoryCount(active_pending_soon));
192 EXPECT_EQ(0, AssignedMemoryCount(never_bin));
193
194 ReleaseTiles(&active_now);
195 ReleaseTiles(&pending_now);
196 ReleaseTiles(&active_pending_soon);
197 ReleaseTiles(&never_bin);
198 }
199
200 TEST_P(TileManagerTest, EnoughMemoryAllowPrepaintOnly) {
201 // A few tiles of each type of priority, with enough memory for all tiles,
202 // with the exception of never bin.
203
204 Initialize(10, ALLOW_PREPAINT_ONLY, SMOOTHNESS_TAKES_PRIORITY);
205 TileVector active_now =
206 CreateTiles(3, TilePriorityForNowBin(), TilePriority());
207 TileVector pending_now =
208 CreateTiles(3, TilePriority(), TilePriorityForNowBin());
209 TileVector active_pending_soon =
210 CreateTiles(3, TilePriorityForSoonBin(), TilePriorityForSoonBin());
211 TileVector never_bin = CreateTiles(1, TilePriority(), TilePriority());
212
213 tile_manager()->AssignMemoryToTiles(global_state_);
214
215 EXPECT_EQ(3, AssignedMemoryCount(active_now));
216 EXPECT_EQ(3, AssignedMemoryCount(pending_now));
217 EXPECT_EQ(3, AssignedMemoryCount(active_pending_soon));
218 EXPECT_EQ(0, AssignedMemoryCount(never_bin));
219
220 ReleaseTiles(&active_now);
221 ReleaseTiles(&pending_now);
222 ReleaseTiles(&active_pending_soon);
223 ReleaseTiles(&never_bin);
224 }
225
226 TEST_P(TileManagerTest, EnoughMemoryPendingLowResAllowAbsoluteMinimum) {
227 // A few low-res tiles required for activation, with enough memory for all
228 // tiles.
229
230 Initialize(5, ALLOW_ABSOLUTE_MINIMUM, SAME_PRIORITY_FOR_BOTH_TREES);
231 TileVector pending_low_res =
232 CreateTiles(5, TilePriority(), TilePriorityLowRes());
233
234 tile_manager()->AssignMemoryToTiles(global_state_);
235
236 EXPECT_EQ(5, AssignedMemoryCount(pending_low_res));
237 ReleaseTiles(&pending_low_res);
238 }
239
240 TEST_P(TileManagerTest, EnoughMemoryAllowAbsoluteMinimum) {
241 // A few tiles of each type of priority, with enough memory for all tiles,
242 // with the exception of never and soon bins.
243
244 Initialize(10, ALLOW_ABSOLUTE_MINIMUM, SMOOTHNESS_TAKES_PRIORITY);
245 TileVector active_now =
246 CreateTiles(3, TilePriorityForNowBin(), TilePriority());
247 TileVector pending_now =
248 CreateTiles(3, TilePriority(), TilePriorityForNowBin());
249 TileVector active_pending_soon =
250 CreateTiles(3, TilePriorityForSoonBin(), TilePriorityForSoonBin());
251 TileVector never_bin = CreateTiles(1, TilePriority(), TilePriority());
252
253 tile_manager()->AssignMemoryToTiles(global_state_);
254
255 EXPECT_EQ(3, AssignedMemoryCount(active_now));
256 EXPECT_EQ(3, AssignedMemoryCount(pending_now));
257 EXPECT_EQ(0, AssignedMemoryCount(active_pending_soon));
258 EXPECT_EQ(0, AssignedMemoryCount(never_bin));
259
260 ReleaseTiles(&active_now);
261 ReleaseTiles(&pending_now);
262 ReleaseTiles(&active_pending_soon);
263 ReleaseTiles(&never_bin);
264 }
265
266 TEST_P(TileManagerTest, EnoughMemoryAllowNothing) {
267 // A few tiles of each type of priority, with enough memory for all tiles,
268 // but allow nothing should not assign any memory.
269
270 Initialize(10, ALLOW_NOTHING, SMOOTHNESS_TAKES_PRIORITY);
271 TileVector active_now =
272 CreateTiles(3, TilePriorityForNowBin(), TilePriority());
273 TileVector pending_now =
274 CreateTiles(3, TilePriority(), TilePriorityForNowBin());
275 TileVector active_pending_soon =
276 CreateTiles(3, TilePriorityForSoonBin(), TilePriorityForSoonBin());
277 TileVector never_bin = CreateTiles(1, TilePriority(), TilePriority());
278
279 tile_manager()->AssignMemoryToTiles(global_state_);
280
281 EXPECT_EQ(0, AssignedMemoryCount(active_now));
282 EXPECT_EQ(0, AssignedMemoryCount(pending_now));
283 EXPECT_EQ(0, AssignedMemoryCount(active_pending_soon));
284 EXPECT_EQ(0, AssignedMemoryCount(never_bin));
285
286 ReleaseTiles(&active_now);
287 ReleaseTiles(&pending_now);
288 ReleaseTiles(&active_pending_soon);
289 ReleaseTiles(&never_bin);
290 }
291
292 TEST_P(TileManagerTest, PartialOOMMemoryToPending) {
293 // 5 tiles on active tree eventually bin, 5 tiles on pending tree that are
294 // required for activation, but only enough memory for 8 tiles. The result
295 // is all pending tree tiles get memory, and 3 of the active tree tiles
296 // get memory. None of these tiles is needed to avoid calimity (flickering or
297 // raster-on-demand) so the soft memory limit is used.
298
299 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
300 TileVector active_tree_tiles =
301 CreateTiles(5, TilePriorityForEventualBin(), TilePriority());
302 TileVector pending_tree_tiles =
303 CreateTiles(5, TilePriority(), TilePriorityRequiredForActivation());
304 tile_manager()->AssignMemoryToTiles(global_state_);
305
306 EXPECT_EQ(5, AssignedMemoryCount(active_tree_tiles));
307 EXPECT_EQ(3, AssignedMemoryCount(pending_tree_tiles));
308
309 SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
310 tile_manager()->AssignMemoryToTiles(global_state_);
311
312 EXPECT_EQ(3, AssignedMemoryCount(active_tree_tiles));
313 EXPECT_EQ(5, AssignedMemoryCount(pending_tree_tiles));
314
315 ReleaseTiles(&active_tree_tiles);
316 ReleaseTiles(&pending_tree_tiles);
317 }
318
319 TEST_P(TileManagerTest, PartialOOMMemoryToActive) {
320 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin,
321 // but only enough memory for 8 tiles. The result is all active tree tiles
322 // get memory, and 3 of the pending tree tiles get memory.
323 // The pending tiles are not needed to avoid calimity (flickering or
324 // raster-on-demand) and the active tiles fit, so the soft limit is used.
325
326 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
327 TileVector active_tree_tiles =
328 CreateTiles(5, TilePriorityForNowBin(), TilePriority());
329 TileVector pending_tree_tiles =
330 CreateTiles(5, TilePriority(), TilePriorityForNowBin());
331
332 tile_manager()->AssignMemoryToTiles(global_state_);
333
334 EXPECT_EQ(5, AssignedMemoryCount(active_tree_tiles));
335 EXPECT_EQ(3, AssignedMemoryCount(pending_tree_tiles));
336
337 ReleaseTiles(&active_tree_tiles);
338 ReleaseTiles(&pending_tree_tiles);
339 }
340
341 TEST_P(TileManagerTest, TotalOOMMemoryToPending) {
342 // 10 tiles on active tree eventually bin, 10 tiles on pending tree that are
343 // required for activation, but only enough tiles for 4 tiles. The result
344 // is 4 pending tree tiles get memory, and none of the active tree tiles
345 // get memory.
346
347 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
348 TileVector active_tree_tiles =
349 CreateTiles(10, TilePriorityForEventualBin(), TilePriority());
350 TileVector pending_tree_tiles =
351 CreateTiles(10, TilePriority(), TilePriorityRequiredForActivation());
352
353 tile_manager()->AssignMemoryToTiles(global_state_);
354
355 EXPECT_EQ(4, AssignedMemoryCount(active_tree_tiles));
356 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles));
357
358 SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
359 tile_manager()->AssignMemoryToTiles(global_state_);
360
361 if (UsingResourceLimit()) {
362 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles));
363 EXPECT_EQ(4, AssignedMemoryCount(pending_tree_tiles));
364 } else {
365 // Pending tiles are now required to avoid calimity (flickering or
366 // raster-on-demand). Hard-limit is used and double the tiles fit.
367 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles));
368 EXPECT_EQ(8, AssignedMemoryCount(pending_tree_tiles));
369 }
370
371 ReleaseTiles(&active_tree_tiles);
372 ReleaseTiles(&pending_tree_tiles);
373 }
374
375 TEST_P(TileManagerTest, TotalOOMActiveSoonMemoryToPending) {
376 // 10 tiles on active tree soon bin, 10 tiles on pending tree that are
377 // required for activation, but only enough tiles for 4 tiles. The result
378 // is 4 pending tree tiles get memory, and none of the active tree tiles
379 // get memory.
380
381 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
382 TileVector active_tree_tiles =
383 CreateTiles(10, TilePriorityForSoonBin(), TilePriority());
384 TileVector pending_tree_tiles =
385 CreateTiles(10, TilePriority(), TilePriorityRequiredForActivation());
386
387 tile_manager()->AssignMemoryToTiles(global_state_);
388
389 EXPECT_EQ(4, AssignedMemoryCount(active_tree_tiles));
390 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles));
391
392 SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
393 tile_manager()->AssignMemoryToTiles(global_state_);
394
395 if (UsingResourceLimit()) {
396 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles));
397 EXPECT_EQ(4, AssignedMemoryCount(pending_tree_tiles));
398 } else {
399 // Pending tiles are now required to avoid calimity (flickering or
400 // raster-on-demand). Hard-limit is used and double the tiles fit.
401 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles));
402 EXPECT_EQ(8, AssignedMemoryCount(pending_tree_tiles));
403 }
404
405 ReleaseTiles(&active_tree_tiles);
406 ReleaseTiles(&pending_tree_tiles);
407 }
408
409 TEST_P(TileManagerTest, TotalOOMMemoryToActive) {
410 // 10 tiles on active tree eventually bin, 10 tiles on pending tree now bin,
411 // but only enough memory for 4 tiles. The result is 4 active tree tiles
412 // get memory, and none of the pending tree tiles get memory.
413
414 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
415 TileVector active_tree_tiles =
416 CreateTiles(10, TilePriorityForNowBin(), TilePriority());
417 TileVector pending_tree_tiles =
418 CreateTiles(10, TilePriority(), TilePriorityForNowBin());
419
420 tile_manager()->AssignMemoryToTiles(global_state_);
421
422 if (UsingResourceLimit()) {
423 EXPECT_EQ(4, AssignedMemoryCount(active_tree_tiles));
424 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles));
425 } else {
426 // Active tiles are required to avoid calimity (flickering or
427 // raster-on-demand). Hard-limit is used and double the tiles fit.
428 EXPECT_EQ(8, AssignedMemoryCount(active_tree_tiles));
429 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles));
430 }
431
432 ReleaseTiles(&active_tree_tiles);
433 ReleaseTiles(&pending_tree_tiles);
434 }
435
436 TEST_P(TileManagerTest, TotalOOMMemoryToNewContent) {
437 // 10 tiles on active tree now bin, 10 tiles on pending tree now bin,
438 // but only enough memory for 8 tiles. Any tile missing would cause
439 // a calamity (flickering or raster-on-demand). Depending on mode,
440 // we should use varying amounts of the higher hard memory limit.
441 if (UsingResourceLimit())
442 return;
443
444 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY);
445 TileVector active_tree_tiles =
446 CreateTiles(10, TilePriorityForNowBin(), TilePriority());
447 TileVector pending_tree_tiles =
448 CreateTiles(10, TilePriority(), TilePriorityForNowBin());
449
450 // Active tiles are required to avoid calimity. The hard-limit is used and all
451 // active-tiles fit. No pending tiles are needed to avoid calamity so only 10
452 // tiles total are used.
453 tile_manager()->AssignMemoryToTiles(global_state_);
454 EXPECT_EQ(10, AssignedMemoryCount(active_tree_tiles));
455 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles));
456
457 // Even the hard-limit won't save us now. All tiles are required to avoid
458 // a clamity but we only have 16. The tiles will be distribted randomly
459 // given they are identical, in practice depending on their screen location.
460 SetTreePriority(SAME_PRIORITY_FOR_BOTH_TREES);
461 tile_manager()->AssignMemoryToTiles(global_state_);
462 EXPECT_EQ(16,
463 AssignedMemoryCount(active_tree_tiles) +
464 AssignedMemoryCount(pending_tree_tiles));
465
466 // The pending tree is now more important. Active tiles will take higher
467 // priority if they are ready-to-draw in practice. Importantly though,
468 // pending tiles also utilize the hard-limit.
469 SetTreePriority(NEW_CONTENT_TAKES_PRIORITY);
470 tile_manager()->AssignMemoryToTiles(global_state_);
471 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles));
472 EXPECT_EQ(10, AssignedMemoryCount(pending_tree_tiles));
473
474 ReleaseTiles(&active_tree_tiles);
475 ReleaseTiles(&pending_tree_tiles);
476 }
477
478 // If true, the max tile limit should be applied as bytes; if false,
479 // as num_resources_limit.
480 INSTANTIATE_TEST_CASE_P(TileManagerTests,
481 TileManagerTest,
482 ::testing::Values(true, false));
483
484 class LowResTilingsSettings : public ImplSidePaintingSettings { 25 class LowResTilingsSettings : public ImplSidePaintingSettings {
485 public: 26 public:
486 LowResTilingsSettings() { create_low_res_tiling = true; } 27 LowResTilingsSettings() { create_low_res_tiling = true; }
487 }; 28 };
488 29
489 class TileManagerTilePriorityQueueTest : public testing::Test { 30 class TileManagerTilePriorityQueueTest : public testing::Test {
490 public: 31 public:
491 TileManagerTilePriorityQueueTest() 32 TileManagerTilePriorityQueueTest()
492 : memory_limit_policy_(ALLOW_ANYTHING), 33 : memory_limit_policy_(ALLOW_ANYTHING),
493 max_tiles_(10000), 34 max_tiles_(10000),
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 all_tiles.insert(active_high_res_tiles[i]); 390 all_tiles.insert(active_high_res_tiles[i]);
850 391
851 std::vector<Tile*> active_low_res_tiles = 392 std::vector<Tile*> active_low_res_tiles =
852 active_layer_->LowResTiling()->AllTilesForTesting(); 393 active_layer_->LowResTiling()->AllTilesForTesting();
853 for (size_t i = 0; i < active_low_res_tiles.size(); ++i) 394 for (size_t i = 0; i < active_low_res_tiles.size(); ++i)
854 all_tiles.insert(active_low_res_tiles[i]); 395 all_tiles.insert(active_low_res_tiles[i]);
855 396
856 tile_manager()->InitializeTilesWithResourcesForTesting( 397 tile_manager()->InitializeTilesWithResourcesForTesting(
857 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 398 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
858 399
859 pending_layer_->MarkVisibleResourcesAsRequired();
860
861 Tile* last_tile = NULL; 400 Tile* last_tile = NULL;
862 smoothness_tiles.clear(); 401 smoothness_tiles.clear();
863 tile_count = 0; 402 tile_count = 0;
864 // Here we expect to get increasing ACTIVE_TREE priority_bin. 403 // Here we expect to get increasing ACTIVE_TREE priority_bin.
865 queue.Reset(); 404 queue.Reset();
866 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY); 405 host_impl_.BuildEvictionQueue(&queue, SMOOTHNESS_TAKES_PRIORITY);
867 while (!queue.IsEmpty()) { 406 while (!queue.IsEmpty()) {
868 Tile* tile = queue.Top(); 407 Tile* tile = queue.Top();
869 EXPECT_TRUE(tile); 408 EXPECT_TRUE(tile);
870 EXPECT_TRUE(tile->HasResources()); 409 EXPECT_TRUE(tile->HasResources());
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 all_tiles.insert(pending_high_res_tiles[i]); 529 all_tiles.insert(pending_high_res_tiles[i]);
991 530
992 std::vector<Tile*> pending_low_res_tiles = 531 std::vector<Tile*> pending_low_res_tiles =
993 pending_layer_->LowResTiling()->AllTilesForTesting(); 532 pending_layer_->LowResTiling()->AllTilesForTesting();
994 for (size_t i = 0; i < pending_low_res_tiles.size(); ++i) 533 for (size_t i = 0; i < pending_low_res_tiles.size(); ++i)
995 all_tiles.insert(pending_low_res_tiles[i]); 534 all_tiles.insert(pending_low_res_tiles[i]);
996 535
997 // Set all tiles on the pending_child_layer as occluded on the pending tree. 536 // Set all tiles on the pending_child_layer as occluded on the pending tree.
998 std::vector<Tile*> pending_child_high_res_tiles = 537 std::vector<Tile*> pending_child_high_res_tiles =
999 pending_child_layer->HighResTiling()->AllTilesForTesting(); 538 pending_child_layer->HighResTiling()->AllTilesForTesting();
539 pending_child_layer->HighResTiling()->SetAllTilesOccludedForTesting();
1000 for (size_t i = 0; i < pending_child_high_res_tiles.size(); ++i) { 540 for (size_t i = 0; i < pending_child_high_res_tiles.size(); ++i) {
1001 pending_child_high_res_tiles[i]->set_is_occluded(PENDING_TREE, true);
1002 all_tiles.insert(pending_child_high_res_tiles[i]); 541 all_tiles.insert(pending_child_high_res_tiles[i]);
1003 } 542 }
1004 543
1005 std::vector<Tile*> pending_child_low_res_tiles = 544 std::vector<Tile*> pending_child_low_res_tiles =
1006 pending_child_layer->LowResTiling()->AllTilesForTesting(); 545 pending_child_layer->LowResTiling()->AllTilesForTesting();
546 pending_child_layer->LowResTiling()->SetAllTilesOccludedForTesting();
1007 for (size_t i = 0; i < pending_child_low_res_tiles.size(); ++i) { 547 for (size_t i = 0; i < pending_child_low_res_tiles.size(); ++i) {
1008 pending_child_low_res_tiles[i]->set_is_occluded(PENDING_TREE, true);
1009 all_tiles.insert(pending_child_low_res_tiles[i]); 548 all_tiles.insert(pending_child_low_res_tiles[i]);
1010 } 549 }
1011 550
1012 tile_manager()->InitializeTilesWithResourcesForTesting( 551 tile_manager()->InitializeTilesWithResourcesForTesting(
1013 std::vector<Tile*>(all_tiles.begin(), all_tiles.end())); 552 std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
1014 553
1015 // Verify occlusion is considered by EvictionTilePriorityQueue. 554 // Verify occlusion is considered by EvictionTilePriorityQueue.
1016 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY; 555 TreePriority tree_priority = NEW_CONTENT_TAKES_PRIORITY;
1017 size_t occluded_count = 0u; 556 size_t occluded_count = 0u;
1018 Tile* last_tile = NULL; 557 Tile* last_tile = NULL;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 all_tiles.insert(queue.Top()); 682 all_tiles.insert(queue.Top());
1144 ++tile_count; 683 ++tile_count;
1145 queue.Pop(); 684 queue.Pop();
1146 } 685 }
1147 EXPECT_EQ(tile_count, all_tiles.size()); 686 EXPECT_EQ(tile_count, all_tiles.size());
1148 EXPECT_EQ(17u, tile_count); 687 EXPECT_EQ(17u, tile_count);
1149 } 688 }
1150 689
1151 } // namespace 690 } // namespace
1152 } // namespace cc 691 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698