| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/picture_layer_tiling_set.h" | 5 #include "cc/resources/picture_layer_tiling_set.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "cc/resources/resource_pool.h" | 10 #include "cc/resources/resource_pool.h" |
| 11 #include "cc/resources/resource_provider.h" | 11 #include "cc/resources/resource_provider.h" |
| 12 #include "cc/test/fake_output_surface.h" | 12 #include "cc/test/fake_output_surface.h" |
| 13 #include "cc/test/fake_output_surface_client.h" | 13 #include "cc/test/fake_output_surface_client.h" |
| 14 #include "cc/test/fake_picture_layer_tiling_client.h" | 14 #include "cc/test/fake_picture_layer_tiling_client.h" |
| 15 #include "cc/test/fake_tile_manager.h" |
| 15 #include "cc/test/fake_tile_manager_client.h" | 16 #include "cc/test/fake_tile_manager_client.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 #include "ui/gfx/size_conversions.h" | 18 #include "ui/gfx/size_conversions.h" |
| 18 | 19 |
| 19 namespace cc { | 20 namespace cc { |
| 20 namespace { | 21 namespace { |
| 21 | 22 |
| 22 TEST(PictureLayerTilingSetTest, NoResources) { | 23 TEST(PictureLayerTilingSetTest, NoResources) { |
| 23 FakePictureLayerTilingClient client; | 24 FakePictureLayerTilingClient client; |
| 24 gfx::Size layer_bounds(1000, 800); | 25 gfx::Size layer_bounds(1000, 800); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 } | 146 } |
| 146 | 147 |
| 147 class PictureLayerTilingSetSyncTest : public testing::Test { | 148 class PictureLayerTilingSetSyncTest : public testing::Test { |
| 148 public: | 149 public: |
| 149 PictureLayerTilingSetSyncTest() | 150 PictureLayerTilingSetSyncTest() |
| 150 : tile_size_(gfx::Size(10, 10)), | 151 : tile_size_(gfx::Size(10, 10)), |
| 151 source_bounds_(gfx::Size(30, 20)), | 152 source_bounds_(gfx::Size(30, 20)), |
| 152 target_bounds_(gfx::Size(30, 30)) { | 153 target_bounds_(gfx::Size(30, 30)) { |
| 153 source_client_.SetTileSize(tile_size_); | 154 source_client_.SetTileSize(tile_size_); |
| 154 target_client_.SetTileSize(tile_size_); | 155 target_client_.SetTileSize(tile_size_); |
| 156 |
| 157 output_surface_ = FakeOutputSurface::Create3d(); |
| 158 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
| 159 resource_provider_ = |
| 160 ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1); |
| 161 tile_manager_ = make_scoped_ptr( |
| 162 new FakeTileManager(&tile_manager_client_, resource_provider_.get())); |
| 163 source_client_.set_tile_manager(tile_manager_.get()); |
| 164 target_client_.set_tile_manager(tile_manager_.get()); |
| 165 |
| 155 source_.reset(new PictureLayerTilingSet(&source_client_, source_bounds_)); | 166 source_.reset(new PictureLayerTilingSet(&source_client_, source_bounds_)); |
| 156 target_.reset(new PictureLayerTilingSet(&target_client_, target_bounds_)); | 167 target_.reset(new PictureLayerTilingSet(&target_client_, target_bounds_)); |
| 157 } | 168 } |
| 158 | 169 |
| 170 ~PictureLayerTilingSetSyncTest() { |
| 171 source_.reset(NULL); |
| 172 target_.reset(NULL); |
| 173 tile_manager_.reset(NULL); |
| 174 resource_provider_.reset(NULL); |
| 175 } |
| 176 |
| 159 // Sync from source to target. | 177 // Sync from source to target. |
| 160 void SyncTilings(gfx::Size new_bounds, | 178 void SyncTilings(gfx::Size new_bounds, |
| 161 const Region& invalidation, | 179 const Region& invalidation, |
| 162 float minimum_scale) { | 180 float minimum_scale) { |
| 181 target_client_.MarkPending(); |
| 182 source_client_.MarkActive(); |
| 163 for (size_t i = 0; i < source_->num_tilings(); ++i) | 183 for (size_t i = 0; i < source_->num_tilings(); ++i) |
| 164 source_->tiling_at(i)->CreateAllTilesForTesting(); | 184 source_->tiling_at(i)->CreateAllActiveTilesForTesting(); |
| 165 for (size_t i = 0; i < target_->num_tilings(); ++i) | 185 for (size_t i = 0; i < target_->num_tilings(); ++i) |
| 166 target_->tiling_at(i)->CreateAllTilesForTesting(); | 186 target_->tiling_at(i)->CreateAllPendingTilesForTesting(); |
| 167 | 187 |
| 168 target_->SyncTilings( | 188 target_->SyncTilings( |
| 169 *source_.get(), new_bounds, invalidation, minimum_scale); | 189 *source_.get(), new_bounds, invalidation, minimum_scale); |
| 170 } | 190 } |
| 171 void SyncTilings(gfx::Size new_bounds) { | 191 void SyncTilings(gfx::Size new_bounds) { |
| 172 Region invalidation; | 192 Region invalidation; |
| 173 SyncTilings(new_bounds, invalidation, 0.f); | 193 SyncTilings(new_bounds, invalidation, 0.f); |
| 174 } | 194 } |
| 175 void SyncTilings(gfx::Size new_bounds, const Region& invalidation) { | 195 void SyncTilings(gfx::Size new_bounds, const Region& invalidation) { |
| 176 SyncTilings(new_bounds, invalidation, 0.f); | 196 SyncTilings(new_bounds, invalidation, 0.f); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 ValidateTiling(target_->tiling_at(i), target_client_.pile()); | 235 ValidateTiling(target_->tiling_at(i), target_client_.pile()); |
| 216 } | 236 } |
| 217 | 237 |
| 218 void ValidateTiling(const PictureLayerTiling* tiling, | 238 void ValidateTiling(const PictureLayerTiling* tiling, |
| 219 const PicturePileImpl* pile) const { | 239 const PicturePileImpl* pile) const { |
| 220 if (tiling->ContentRect().IsEmpty()) | 240 if (tiling->ContentRect().IsEmpty()) |
| 221 EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty()); | 241 EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty()); |
| 222 else if (!tiling->live_tiles_rect().IsEmpty()) | 242 else if (!tiling->live_tiles_rect().IsEmpty()) |
| 223 EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect())); | 243 EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect())); |
| 224 | 244 |
| 225 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); | 245 std::vector<Tile*> tiles = tiling->AllPendingTilesForTesting(); |
| 226 for (size_t i = 0; i < tiles.size(); ++i) { | 246 for (size_t i = 0; i < tiles.size(); ++i) { |
| 227 const Tile* tile = tiles[i]; | 247 const Tile* tile = tiles[i]; |
| 228 ASSERT_TRUE(!!tile); | 248 ASSERT_TRUE(!!tile); |
| 229 EXPECT_EQ(tile->picture_pile(), pile); | 249 EXPECT_EQ(tile->picture_pile(), pile); |
| 230 EXPECT_TRUE(tile->content_rect().Intersects(tiling->live_tiles_rect())) | 250 EXPECT_TRUE(tile->content_rect().Intersects(tiling->live_tiles_rect())) |
| 231 << "All tiles must be inside the live tiles rect."; | 251 << "All tiles must be inside the live tiles rect."; |
| 232 } | 252 } |
| 233 | 253 |
| 234 for (PictureLayerTiling::CoverageIterator iter( | 254 for (PictureLayerTiling::CoverageIterator iter( |
| 235 tiling, tiling->contents_scale(), tiling->live_tiles_rect()); | 255 tiling, tiling->contents_scale(), tiling->live_tiles_rect()); |
| 236 iter; | 256 iter; |
| 237 ++iter) { | 257 ++iter) { |
| 238 EXPECT_TRUE(*iter) << "The live tiles rect must be full."; | 258 EXPECT_TRUE(*iter) << "The live tiles rect must be full."; |
| 239 } | 259 } |
| 240 } | 260 } |
| 241 | 261 |
| 242 gfx::Size tile_size_; | 262 gfx::Size tile_size_; |
| 243 | 263 |
| 244 FakePictureLayerTilingClient source_client_; | 264 FakePictureLayerTilingClient source_client_; |
| 245 gfx::Size source_bounds_; | 265 gfx::Size source_bounds_; |
| 246 scoped_ptr<PictureLayerTilingSet> source_; | 266 scoped_ptr<PictureLayerTilingSet> source_; |
| 247 | 267 |
| 248 FakePictureLayerTilingClient target_client_; | 268 FakePictureLayerTilingClient target_client_; |
| 249 gfx::Size target_bounds_; | 269 gfx::Size target_bounds_; |
| 250 scoped_ptr<PictureLayerTilingSet> target_; | 270 scoped_ptr<PictureLayerTilingSet> target_; |
| 271 |
| 272 FakeTileManagerClient tile_manager_client_; |
| 273 scoped_ptr<FakeTileManager> tile_manager_; |
| 274 scoped_ptr<ResourceProvider> resource_provider_; |
| 275 scoped_ptr<FakeOutputSurface> output_surface_; |
| 276 FakeOutputSurfaceClient output_surface_client_; |
| 251 }; | 277 }; |
| 252 | 278 |
| 253 TEST_F(PictureLayerTilingSetSyncTest, EmptyBounds) { | 279 TEST_F(PictureLayerTilingSetSyncTest, EmptyBounds) { |
| 254 float source_scales[] = {1.f, 1.2f}; | 280 float source_scales[] = {1.f, 1.2f}; |
| 255 for (size_t i = 0; i < arraysize(source_scales); ++i) | 281 for (size_t i = 0; i < arraysize(source_scales); ++i) |
| 256 source_->AddTiling(source_scales[i]); | 282 source_->AddTiling(source_scales[i]); |
| 257 | 283 |
| 258 gfx::Size new_bounds; | 284 gfx::Size new_bounds; |
| 259 SyncTilings(new_bounds); | 285 SyncTilings(new_bounds); |
| 260 EXPECT_EQ(target_->num_tilings(), 0u); | 286 EXPECT_EQ(target_->num_tilings(), 0u); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 SyncTilings(new_bounds, minimum_scale); | 367 SyncTilings(new_bounds, minimum_scale); |
| 342 | 368 |
| 343 EXPECT_EQ(target_->num_tilings(), 1u); | 369 EXPECT_EQ(target_->num_tilings(), 1u); |
| 344 EXPECT_EQ(target_->tiling_at(0)->contents_scale(), 2.f); | 370 EXPECT_EQ(target_->tiling_at(0)->contents_scale(), 2.f); |
| 345 ValidateTargetTilingSet(); | 371 ValidateTargetTilingSet(); |
| 346 } | 372 } |
| 347 | 373 |
| 348 TEST_F(PictureLayerTilingSetSyncTest, Invalidation) { | 374 TEST_F(PictureLayerTilingSetSyncTest, Invalidation) { |
| 349 source_->AddTiling(2.f); | 375 source_->AddTiling(2.f); |
| 350 target_->AddTiling(2.f); | 376 target_->AddTiling(2.f); |
| 351 target_->tiling_at(0)->CreateAllTilesForTesting(); | 377 target_->tiling_at(0)->CreateAllPendingTilesForTesting(); |
| 352 | 378 |
| 353 Region layer_invalidation; | 379 Region layer_invalidation; |
| 354 layer_invalidation.Union(gfx::Rect(0, 0, 1, 1)); | 380 layer_invalidation.Union(gfx::Rect(0, 0, 1, 1)); |
| 355 layer_invalidation.Union(gfx::Rect(0, 15, 1, 1)); | 381 layer_invalidation.Union(gfx::Rect(0, 15, 1, 1)); |
| 356 // Out of bounds layer_invalidation. | 382 // Out of bounds layer_invalidation. |
| 357 layer_invalidation.Union(gfx::Rect(100, 100, 1, 1)); | 383 layer_invalidation.Union(gfx::Rect(100, 100, 1, 1)); |
| 358 | 384 |
| 359 Region content_invalidation; | 385 Region content_invalidation; |
| 360 for (Region::Iterator iter(layer_invalidation); iter.has_rect(); | 386 for (Region::Iterator iter(layer_invalidation); iter.has_rect(); |
| 361 iter.next()) { | 387 iter.next()) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); | 433 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); |
| 408 for (size_t i = 0; i < original_tiles.size(); ++i) { | 434 for (size_t i = 0; i < original_tiles.size(); ++i) { |
| 409 std::vector<Tile*>::iterator find = | 435 std::vector<Tile*>::iterator find = |
| 410 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); | 436 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); |
| 411 EXPECT_TRUE(find == new_tiles.end()); | 437 EXPECT_TRUE(find == new_tiles.end()); |
| 412 } | 438 } |
| 413 } | 439 } |
| 414 | 440 |
| 415 } // namespace | 441 } // namespace |
| 416 } // namespace cc | 442 } // namespace cc |
| OLD | NEW |