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/resources/tile.h" | 5 #include "cc/resources/tile.h" |
6 #include "cc/resources/tile_priority.h" | 6 #include "cc/resources/tile_priority.h" |
7 #include "cc/test/fake_output_surface.h" | 7 #include "cc/test/fake_output_surface.h" |
8 #include "cc/test/fake_tile_manager.h" | 8 #include "cc/test/fake_tile_manager.h" |
9 #include "cc/test/fake_tile_manager_client.h" | 9 #include "cc/test/fake_tile_manager_client.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 }; | 42 }; |
43 | 43 |
44 class TilePriorityForNowBin : public TilePriority { | 44 class TilePriorityForNowBin : public TilePriority { |
45 public: | 45 public: |
46 TilePriorityForNowBin() : TilePriority( | 46 TilePriorityForNowBin() : TilePriority( |
47 HIGH_RESOLUTION, | 47 HIGH_RESOLUTION, |
48 0, | 48 0, |
49 0) {} | 49 0) {} |
50 }; | 50 }; |
51 | 51 |
| 52 class TilePriorityRequiredForActivation : public TilePriority { |
| 53 public: |
| 54 TilePriorityRequiredForActivation() : TilePriority( |
| 55 HIGH_RESOLUTION, |
| 56 0, |
| 57 0) { |
| 58 required_for_activation = true; |
| 59 } |
| 60 }; |
| 61 |
52 class TileManagerTest : public testing::Test { | 62 class TileManagerTest : public testing::Test { |
53 public: | 63 public: |
54 typedef std::vector<scoped_refptr<Tile> > TileVector; | 64 typedef std::vector<scoped_refptr<Tile> > TileVector; |
55 | 65 |
56 void Initialize(int max_memory_tiles, | 66 void Initialize(int max_memory_tiles, |
57 TileMemoryLimitPolicy memory_limit_policy, | 67 TileMemoryLimitPolicy memory_limit_policy, |
58 TreePriority tree_priority) { | 68 TreePriority tree_priority) { |
59 output_surface_ = FakeOutputSurface::Create3d(); | 69 output_surface_ = FakeOutputSurface::Create3d(); |
60 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 0); | 70 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 0); |
61 tile_manager_ = make_scoped_ptr( | 71 tile_manager_ = make_scoped_ptr( |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 113 |
104 FakeTileManager* tile_manager() { | 114 FakeTileManager* tile_manager() { |
105 return tile_manager_.get(); | 115 return tile_manager_.get(); |
106 } | 116 } |
107 | 117 |
108 int AssignedMemoryCount(const TileVector& tiles) { | 118 int AssignedMemoryCount(const TileVector& tiles) { |
109 int has_memory_count = 0; | 119 int has_memory_count = 0; |
110 for (TileVector::const_iterator it = tiles.begin(); | 120 for (TileVector::const_iterator it = tiles.begin(); |
111 it != tiles.end(); | 121 it != tiles.end(); |
112 ++it) { | 122 ++it) { |
113 if ((*it)->HasRasterTaskForTesting()) | 123 if (tile_manager_->HasBeenAssignedMemory(*it)) |
114 ++has_memory_count; | 124 ++has_memory_count; |
115 (*it)->ResetRasterTaskForTesting(); | |
116 } | 125 } |
117 return has_memory_count; | 126 return has_memory_count; |
118 } | 127 } |
119 | 128 |
120 int TilesWithLCDCount(const TileVector& tiles) { | 129 int TilesWithLCDCount(const TileVector& tiles) { |
121 int has_lcd_count = 0; | 130 int has_lcd_count = 0; |
122 for (TileVector::const_iterator it = tiles.begin(); | 131 for (TileVector::const_iterator it = tiles.begin(); |
123 it != tiles.end(); | 132 it != tiles.end(); |
124 ++it) { | 133 ++it) { |
125 if ((*it)->GetRasterModeForTesting() == HIGH_QUALITY_RASTER_MODE) | 134 if ((*it)->GetRasterModeForTesting() == HIGH_QUALITY_RASTER_MODE) |
126 ++has_lcd_count; | 135 ++has_lcd_count; |
127 (*it)->ResetRasterTaskForTesting(); | |
128 } | 136 } |
129 return has_lcd_count; | 137 return has_lcd_count; |
130 } | 138 } |
131 | 139 |
132 private: | 140 private: |
133 FakeTileManagerClient tile_manager_client_; | 141 FakeTileManagerClient tile_manager_client_; |
134 LayerTreeSettings settings_; | 142 LayerTreeSettings settings_; |
135 scoped_ptr<FakeTileManager> tile_manager_; | 143 scoped_ptr<FakeTileManager> tile_manager_; |
136 scoped_refptr<FakePicturePileImpl> picture_pile_; | 144 scoped_refptr<FakePicturePileImpl> picture_pile_; |
137 scoped_ptr<FakeOutputSurface> output_surface_; | 145 scoped_ptr<FakeOutputSurface> output_surface_; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 | 223 |
216 tile_manager()->ManageTiles(); | 224 tile_manager()->ManageTiles(); |
217 | 225 |
218 EXPECT_EQ(0, AssignedMemoryCount(active_now)); | 226 EXPECT_EQ(0, AssignedMemoryCount(active_now)); |
219 EXPECT_EQ(0, AssignedMemoryCount(pending_now)); | 227 EXPECT_EQ(0, AssignedMemoryCount(pending_now)); |
220 EXPECT_EQ(0, AssignedMemoryCount(active_pending_soon)); | 228 EXPECT_EQ(0, AssignedMemoryCount(active_pending_soon)); |
221 EXPECT_EQ(0, AssignedMemoryCount(never_bin)); | 229 EXPECT_EQ(0, AssignedMemoryCount(never_bin)); |
222 } | 230 } |
223 | 231 |
224 TEST_F(TileManagerTest, PartialOOMMemoryToPending) { | 232 TEST_F(TileManagerTest, PartialOOMMemoryToPending) { |
225 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin, | 233 // 5 tiles on active tree eventually bin, 5 tiles on pending tree that are |
226 // but only enough memory for 8 tiles. The result is all pending tree tiles | 234 // required for activation, but only enough memory for 8 tiles. The result |
227 // get memory, and 3 of the active tree tiles get memory. | 235 // is all pending tree tiles get memory, and 3 of the active tree tiles |
| 236 // get memory. |
228 | 237 |
229 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); | 238 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); |
230 TileVector active_tree_tiles = | 239 TileVector active_tree_tiles = |
231 CreateTiles(5, TilePriorityForEventualBin(), TilePriority()); | 240 CreateTiles(5, TilePriorityForEventualBin(), TilePriority()); |
232 TileVector pending_tree_tiles = | 241 TileVector pending_tree_tiles = |
233 CreateTiles(5, TilePriority(), TilePriorityForNowBin()); | 242 CreateTiles(5, TilePriority(), TilePriorityRequiredForActivation()); |
234 | 243 |
235 tile_manager()->ManageTiles(); | 244 tile_manager()->ManageTiles(); |
236 | 245 |
| 246 EXPECT_EQ(5, AssignedMemoryCount(active_tree_tiles)); |
| 247 EXPECT_EQ(3, AssignedMemoryCount(pending_tree_tiles)); |
| 248 |
| 249 tile_manager()->ReassignMemoryToOOMTilesRequiredForActivation(); |
| 250 |
237 EXPECT_EQ(3, AssignedMemoryCount(active_tree_tiles)); | 251 EXPECT_EQ(3, AssignedMemoryCount(active_tree_tiles)); |
238 EXPECT_EQ(5, AssignedMemoryCount(pending_tree_tiles)); | 252 EXPECT_EQ(5, AssignedMemoryCount(pending_tree_tiles)); |
239 } | 253 } |
240 | 254 |
241 TEST_F(TileManagerTest, PartialOOMMemoryToActive) { | 255 TEST_F(TileManagerTest, PartialOOMMemoryToActive) { |
242 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin, | 256 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin, |
243 // but only enough memory for 8 tiles. The result is all active tree tiles | 257 // but only enough memory for 8 tiles. The result is all active tree tiles |
244 // get memory, and 3 of the pending tree tiles get memory. | 258 // get memory, and 3 of the pending tree tiles get memory. |
245 | 259 |
246 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); | 260 Initialize(8, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); |
247 TileVector active_tree_tiles = | 261 TileVector active_tree_tiles = |
248 CreateTiles(5, TilePriorityForNowBin(), TilePriority()); | 262 CreateTiles(5, TilePriorityForNowBin(), TilePriority()); |
249 TileVector pending_tree_tiles = | 263 TileVector pending_tree_tiles = |
250 CreateTiles(5, TilePriority(), TilePriorityForNowBin()); | 264 CreateTiles(5, TilePriority(), TilePriorityForNowBin()); |
251 | 265 |
252 tile_manager()->ManageTiles(); | 266 tile_manager()->ManageTiles(); |
253 | 267 |
254 EXPECT_EQ(5, AssignedMemoryCount(active_tree_tiles)); | 268 EXPECT_EQ(5, AssignedMemoryCount(active_tree_tiles)); |
255 EXPECT_EQ(3, AssignedMemoryCount(pending_tree_tiles)); | 269 EXPECT_EQ(3, AssignedMemoryCount(pending_tree_tiles)); |
256 } | 270 } |
257 | 271 |
258 TEST_F(TileManagerTest, TotalOOMMemoryToPending) { | 272 TEST_F(TileManagerTest, TotalOOMMemoryToPending) { |
259 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin, | 273 // 5 tiles on active tree eventually bin, 5 tiles on pending tree that are |
260 // but only enough memory for 4 tiles. The result is 4 pending tree tiles | 274 // required for activation, but only enough memory for 4 tiles. The result |
261 // get memory, and none of the active tree tiles get memory. | 275 // is 4 pending tree tiles get memory, and none of the active tree tiles |
| 276 // get memory. |
262 | 277 |
263 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); | 278 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); |
264 TileVector active_tree_tiles = | 279 TileVector active_tree_tiles = |
265 CreateTiles(5, TilePriorityForEventualBin(), TilePriority()); | 280 CreateTiles(5, TilePriorityForEventualBin(), TilePriority()); |
266 TileVector pending_tree_tiles = | 281 TileVector pending_tree_tiles = |
267 CreateTiles(5, TilePriority(), TilePriorityForNowBin()); | 282 CreateTiles(5, TilePriority(), TilePriorityRequiredForActivation()); |
268 | 283 |
269 tile_manager()->ManageTiles(); | 284 tile_manager()->ManageTiles(); |
270 | 285 |
| 286 EXPECT_EQ(4, AssignedMemoryCount(active_tree_tiles)); |
| 287 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles)); |
| 288 |
| 289 tile_manager()->ReassignMemoryToOOMTilesRequiredForActivation(); |
| 290 |
271 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles)); | 291 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles)); |
272 EXPECT_EQ(4, AssignedMemoryCount(pending_tree_tiles)); | 292 EXPECT_EQ(4, AssignedMemoryCount(pending_tree_tiles)); |
273 } | 293 } |
274 | 294 |
275 TEST_F(TileManagerTest, TotalOOMActiveSoonMemoryToPending) { | 295 TEST_F(TileManagerTest, TotalOOMActiveSoonMemoryToPending) { |
276 // 5 tiles on active tree soon bin, 5 tiles on pending tree now bin, | 296 // 5 tiles on active tree soon bin, 5 tiles on pending tree that are |
277 // but only enough memory for 4 tiles. The result is 4 pending tree tiles | 297 // required for activation, but only enough memory for 4 tiles. The result |
278 // get memory, and none of the active tree tiles get memory. | 298 // is 4 pending tree tiles get memory, and none of the active tree tiles |
| 299 // get memory. |
279 | 300 |
280 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); | 301 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); |
281 TileVector active_tree_tiles = | 302 TileVector active_tree_tiles = |
282 CreateTiles(5, TilePriorityForSoonBin(), TilePriority()); | 303 CreateTiles(5, TilePriorityForSoonBin(), TilePriority()); |
283 TileVector pending_tree_tiles = | 304 TileVector pending_tree_tiles = |
284 CreateTiles(5, TilePriority(), TilePriorityForNowBin()); | 305 CreateTiles(5, TilePriority(), TilePriorityRequiredForActivation()); |
285 | 306 |
286 tile_manager()->ManageTiles(); | 307 tile_manager()->ManageTiles(); |
287 | 308 |
| 309 EXPECT_EQ(4, AssignedMemoryCount(active_tree_tiles)); |
| 310 EXPECT_EQ(0, AssignedMemoryCount(pending_tree_tiles)); |
| 311 |
| 312 tile_manager()->ReassignMemoryToOOMTilesRequiredForActivation(); |
| 313 |
288 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles)); | 314 EXPECT_EQ(0, AssignedMemoryCount(active_tree_tiles)); |
289 EXPECT_EQ(4, AssignedMemoryCount(pending_tree_tiles)); | 315 EXPECT_EQ(4, AssignedMemoryCount(pending_tree_tiles)); |
290 } | 316 } |
291 | 317 |
292 TEST_F(TileManagerTest, TotalOOMMemoryToActive) { | 318 TEST_F(TileManagerTest, TotalOOMMemoryToActive) { |
293 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin, | 319 // 5 tiles on active tree eventually bin, 5 tiles on pending tree now bin, |
294 // but only enough memory for 4 tiles. The result is 5 active tree tiles | 320 // but only enough memory for 4 tiles. The result is 5 active tree tiles |
295 // get memory, and none of the pending tree tiles get memory. | 321 // get memory, and none of the pending tree tiles get memory. |
296 | 322 |
297 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); | 323 Initialize(4, ALLOW_ANYTHING, SMOOTHNESS_TAKES_PRIORITY); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 } | 467 } |
442 | 468 |
443 tile_manager()->ManageTiles(); | 469 tile_manager()->ManageTiles(); |
444 | 470 |
445 EXPECT_EQ(0, TilesWithLCDCount(active_tree_tiles)); | 471 EXPECT_EQ(0, TilesWithLCDCount(active_tree_tiles)); |
446 EXPECT_EQ(0, TilesWithLCDCount(pending_tree_tiles)); | 472 EXPECT_EQ(0, TilesWithLCDCount(pending_tree_tiles)); |
447 } | 473 } |
448 | 474 |
449 } // namespace | 475 } // namespace |
450 } // namespace cc | 476 } // namespace cc |
OLD | NEW |