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

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

Issue 62283012: cc: Added tile bundles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years 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 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 FakeTileManagerClient tile_manager_client;
25 FakeTileManager tile_manager(&tile_manager_client);
26 FakePictureLayerTilingClient client(&tile_manager);
24 gfx::Size layer_bounds(1000, 800); 27 gfx::Size layer_bounds(1000, 800);
25 PictureLayerTilingSet set(&client, layer_bounds); 28 PictureLayerTilingSet set(&client, layer_bounds);
26 client.SetTileSize(gfx::Size(256, 256)); 29 client.SetTileSize(gfx::Size(256, 256));
27 30
28 set.AddTiling(1.0); 31 set.AddTiling(1.0);
29 set.AddTiling(1.5); 32 set.AddTiling(1.5);
30 set.AddTiling(2.0); 33 set.AddTiling(2.0);
31 34
32 float contents_scale = 2.0; 35 float contents_scale = 2.0;
33 gfx::Size content_bounds( 36 gfx::Size content_bounds(
(...skipping 27 matching lines...) Expand all
61 float ideal_contents_scale, 64 float ideal_contents_scale,
62 float expected_scale) { 65 float expected_scale) {
63 FakeOutputSurfaceClient output_surface_client; 66 FakeOutputSurfaceClient output_surface_client;
64 scoped_ptr<FakeOutputSurface> output_surface = 67 scoped_ptr<FakeOutputSurface> output_surface =
65 FakeOutputSurface::Create3d(); 68 FakeOutputSurface::Create3d();
66 CHECK(output_surface->BindToClient(&output_surface_client)); 69 CHECK(output_surface->BindToClient(&output_surface_client));
67 70
68 scoped_ptr<ResourceProvider> resource_provider = 71 scoped_ptr<ResourceProvider> resource_provider =
69 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1); 72 ResourceProvider::Create(output_surface.get(), NULL, 0, false, 1);
70 73
71 FakePictureLayerTilingClient client(resource_provider.get()); 74 FakeTileManagerClient tile_manager_client;
75 FakeTileManager tile_manager(&tile_manager_client, resource_provider.get());
76
77 FakePictureLayerTilingClient client(&tile_manager);
72 client.SetTileSize(gfx::Size(256, 256)); 78 client.SetTileSize(gfx::Size(256, 256));
73 gfx::Size layer_bounds(1000, 800); 79 gfx::Size layer_bounds(1000, 800);
74 PictureLayerTilingSet set(&client, layer_bounds); 80 PictureLayerTilingSet set(&client, layer_bounds);
75 81
76 float scale = min_scale; 82 float scale = min_scale;
77 for (int i = 0; i < num_tilings; ++i, scale += scale_increment) { 83 for (int i = 0; i < num_tilings; ++i, scale += scale_increment) {
78 PictureLayerTiling* tiling = set.AddTiling(scale); 84 PictureLayerTiling* tiling = set.AddTiling(scale);
79 tiling->CreateAllTilesForTesting(); 85 tiling->CreateAllTilesForTesting();
80 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); 86 std::vector<Tile*> tiles = tiling->AllTilesForTesting();
81 client.tile_manager()->InitializeTilesWithResourcesForTesting( 87 client.tile_manager()->InitializeTilesWithResourcesForTesting(
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings_NotEqual) { 149 TEST_F(PictureLayerTilingSetTestWithResources, ManyTilings_NotEqual) {
144 runTest(10, 1.f, 1.f, 4.5f, 5.f); 150 runTest(10, 1.f, 1.f, 4.5f, 5.f);
145 } 151 }
146 152
147 class PictureLayerTilingSetSyncTest : public testing::Test { 153 class PictureLayerTilingSetSyncTest : public testing::Test {
148 public: 154 public:
149 PictureLayerTilingSetSyncTest() 155 PictureLayerTilingSetSyncTest()
150 : tile_size_(gfx::Size(10, 10)), 156 : tile_size_(gfx::Size(10, 10)),
151 source_bounds_(gfx::Size(30, 20)), 157 source_bounds_(gfx::Size(30, 20)),
152 target_bounds_(gfx::Size(30, 30)) { 158 target_bounds_(gfx::Size(30, 30)) {
153 source_client_.SetTileSize(tile_size_); 159 output_surface_ = FakeOutputSurface::Create3d();
154 target_client_.SetTileSize(tile_size_); 160 CHECK(output_surface_->BindToClient(&output_surface_client_));
155 source_.reset(new PictureLayerTilingSet(&source_client_, source_bounds_)); 161 resource_provider_ =
156 target_.reset(new PictureLayerTilingSet(&target_client_, target_bounds_)); 162 ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
163 tile_manager_ = make_scoped_ptr(
164 new FakeTileManager(&tile_manager_client_, resource_provider_.get()));
165 source_client_ =
166 make_scoped_ptr(new FakePictureLayerTilingClient(tile_manager_.get()));
167 target_client_ =
168 make_scoped_ptr(new FakePictureLayerTilingClient(tile_manager_.get()));
169
170 source_client_->SetTileSize(tile_size_);
171 target_client_->SetTileSize(tile_size_);
172
173 source_.reset(
174 new PictureLayerTilingSet(source_client_.get(), source_bounds_));
175 target_.reset(
176 new PictureLayerTilingSet(target_client_.get(), target_bounds_));
177 }
178
179 ~PictureLayerTilingSetSyncTest() {
enne (OOO) 2013/12/03 02:28:37 Could you just order these variables differently i
vmpstr 2013/12/03 18:44:43 Done.
180 source_.reset(NULL);
181 target_.reset(NULL);
182 tile_manager_.reset(NULL);
183 resource_provider_.reset(NULL);
157 } 184 }
158 185
159 // Sync from source to target. 186 // Sync from source to target.
160 void SyncTilings(gfx::Size new_bounds, 187 void SyncTilings(gfx::Size new_bounds,
161 const Region& invalidation, 188 const Region& invalidation,
162 float minimum_scale) { 189 float minimum_scale) {
163 for (size_t i = 0; i < source_->num_tilings(); ++i) 190 for (size_t i = 0; i < source_->num_tilings(); ++i)
164 source_->tiling_at(i)->CreateAllTilesForTesting(); 191 source_->tiling_at(i)->CreateTilesForTesting(ACTIVE_TREE);
165 for (size_t i = 0; i < target_->num_tilings(); ++i) 192 for (size_t i = 0; i < target_->num_tilings(); ++i)
166 target_->tiling_at(i)->CreateAllTilesForTesting(); 193 target_->tiling_at(i)->CreateTilesForTesting(PENDING_TREE);
167 194
168 target_->SyncTilings( 195 target_->SyncTilings(
169 *source_.get(), new_bounds, invalidation, minimum_scale); 196 *source_.get(), new_bounds, invalidation, minimum_scale);
170 } 197 }
171 void SyncTilings(gfx::Size new_bounds) { 198 void SyncTilings(gfx::Size new_bounds) {
172 Region invalidation; 199 Region invalidation;
173 SyncTilings(new_bounds, invalidation, 0.f); 200 SyncTilings(new_bounds, invalidation, 0.f);
174 } 201 }
175 void SyncTilings(gfx::Size new_bounds, const Region& invalidation) { 202 void SyncTilings(gfx::Size new_bounds, const Region& invalidation) {
176 SyncTilings(new_bounds, invalidation, 0.f); 203 SyncTilings(new_bounds, invalidation, 0.f);
(...skipping 11 matching lines...) Expand all
188 for (size_t i = 0; i < target_->num_tilings(); ++i) { 215 for (size_t i = 0; i < target_->num_tilings(); ++i) {
189 ASSERT_GT(source_->num_tilings(), i); 216 ASSERT_GT(source_->num_tilings(), i);
190 const PictureLayerTiling* source_tiling = source_->tiling_at(i); 217 const PictureLayerTiling* source_tiling = source_->tiling_at(i);
191 const PictureLayerTiling* target_tiling = target_->tiling_at(i); 218 const PictureLayerTiling* target_tiling = target_->tiling_at(i);
192 EXPECT_EQ(target_tiling->layer_bounds().ToString(), 219 EXPECT_EQ(target_tiling->layer_bounds().ToString(),
193 new_bounds.ToString()); 220 new_bounds.ToString());
194 EXPECT_EQ(source_tiling->contents_scale(), 221 EXPECT_EQ(source_tiling->contents_scale(),
195 target_tiling->contents_scale()); 222 target_tiling->contents_scale());
196 } 223 }
197 224
198 EXPECT_EQ(source_->client(), &source_client_); 225 EXPECT_EQ(source_->client(), source_client_.get());
199 EXPECT_EQ(target_->client(), &target_client_); 226 EXPECT_EQ(target_->client(), target_client_.get());
200 ValidateTargetTilingSet(); 227 ValidateTargetTilingSet();
201 } 228 }
202 229
203 void ValidateTargetTilingSet() const { 230 void ValidateTargetTilingSet() const {
204 // Tilings should be sorted largest to smallest. 231 // Tilings should be sorted largest to smallest.
205 if (target_->num_tilings() > 0) { 232 if (target_->num_tilings() > 0) {
206 float last_scale = target_->tiling_at(0)->contents_scale(); 233 float last_scale = target_->tiling_at(0)->contents_scale();
207 for (size_t i = 1; i < target_->num_tilings(); ++i) { 234 for (size_t i = 1; i < target_->num_tilings(); ++i) {
208 const PictureLayerTiling* target_tiling = target_->tiling_at(i); 235 const PictureLayerTiling* target_tiling = target_->tiling_at(i);
209 EXPECT_LT(target_tiling->contents_scale(), last_scale); 236 EXPECT_LT(target_tiling->contents_scale(), last_scale);
210 last_scale = target_tiling->contents_scale(); 237 last_scale = target_tiling->contents_scale();
211 } 238 }
212 } 239 }
213 240
214 for (size_t i = 0; i < target_->num_tilings(); ++i) 241 for (size_t i = 0; i < target_->num_tilings(); ++i)
215 ValidateTiling(target_->tiling_at(i), target_client_.pile()); 242 ValidateTiling(target_->tiling_at(i), target_client_->pile());
216 } 243 }
217 244
218 void ValidateTiling(const PictureLayerTiling* tiling, 245 void ValidateTiling(const PictureLayerTiling* tiling,
219 const PicturePileImpl* pile) const { 246 const PicturePileImpl* pile) const {
220 if (tiling->ContentRect().IsEmpty()) 247 if (tiling->ContentRect().IsEmpty())
221 EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty()); 248 EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty());
222 else if (!tiling->live_tiles_rect().IsEmpty()) 249 else if (!tiling->live_tiles_rect().IsEmpty())
223 EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect())); 250 EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect()));
224 251
225 std::vector<Tile*> tiles = tiling->AllTilesForTesting(); 252 std::vector<Tile*> tiles = tiling->TilesForTesting(PENDING_TREE);
226 for (size_t i = 0; i < tiles.size(); ++i) { 253 for (size_t i = 0; i < tiles.size(); ++i) {
227 const Tile* tile = tiles[i]; 254 const Tile* tile = tiles[i];
228 ASSERT_TRUE(!!tile); 255 ASSERT_TRUE(!!tile);
229 EXPECT_EQ(tile->picture_pile(), pile); 256 EXPECT_EQ(tile->picture_pile(), pile);
230 EXPECT_TRUE(tile->content_rect().Intersects(tiling->live_tiles_rect())) 257 EXPECT_TRUE(tile->content_rect().Intersects(tiling->live_tiles_rect()))
231 << "All tiles must be inside the live tiles rect."; 258 << "All tiles must be inside the live tiles rect.";
232 } 259 }
233 260
234 for (PictureLayerTiling::CoverageIterator iter( 261 for (PictureLayerTiling::CoverageIterator iter(
235 tiling, tiling->contents_scale(), tiling->live_tiles_rect()); 262 tiling, tiling->contents_scale(), tiling->live_tiles_rect());
236 iter; 263 iter;
237 ++iter) { 264 ++iter) {
238 EXPECT_TRUE(*iter) << "The live tiles rect must be full."; 265 EXPECT_TRUE(*iter) << "The live tiles rect must be full.";
239 } 266 }
240 } 267 }
241 268
242 gfx::Size tile_size_; 269 gfx::Size tile_size_;
243 270
244 FakePictureLayerTilingClient source_client_; 271 scoped_ptr<FakePictureLayerTilingClient> source_client_;
245 gfx::Size source_bounds_; 272 gfx::Size source_bounds_;
246 scoped_ptr<PictureLayerTilingSet> source_; 273 scoped_ptr<PictureLayerTilingSet> source_;
247 274
248 FakePictureLayerTilingClient target_client_; 275 scoped_ptr<FakePictureLayerTilingClient> target_client_;
249 gfx::Size target_bounds_; 276 gfx::Size target_bounds_;
250 scoped_ptr<PictureLayerTilingSet> target_; 277 scoped_ptr<PictureLayerTilingSet> target_;
278
279 FakeTileManagerClient tile_manager_client_;
280 scoped_ptr<FakeTileManager> tile_manager_;
281 scoped_ptr<ResourceProvider> resource_provider_;
282 scoped_ptr<FakeOutputSurface> output_surface_;
283 FakeOutputSurfaceClient output_surface_client_;
251 }; 284 };
252 285
253 TEST_F(PictureLayerTilingSetSyncTest, EmptyBounds) { 286 TEST_F(PictureLayerTilingSetSyncTest, EmptyBounds) {
254 float source_scales[] = {1.f, 1.2f}; 287 float source_scales[] = {1.f, 1.2f};
255 for (size_t i = 0; i < arraysize(source_scales); ++i) 288 for (size_t i = 0; i < arraysize(source_scales); ++i)
256 source_->AddTiling(source_scales[i]); 289 source_->AddTiling(source_scales[i]);
257 290
258 gfx::Size new_bounds; 291 gfx::Size new_bounds;
259 SyncTilings(new_bounds); 292 SyncTilings(new_bounds);
260 EXPECT_EQ(target_->num_tilings(), 0u); 293 EXPECT_EQ(target_->num_tilings(), 0u);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 SyncTilings(new_bounds, minimum_scale); 374 SyncTilings(new_bounds, minimum_scale);
342 375
343 EXPECT_EQ(target_->num_tilings(), 1u); 376 EXPECT_EQ(target_->num_tilings(), 1u);
344 EXPECT_EQ(target_->tiling_at(0)->contents_scale(), 2.f); 377 EXPECT_EQ(target_->tiling_at(0)->contents_scale(), 2.f);
345 ValidateTargetTilingSet(); 378 ValidateTargetTilingSet();
346 } 379 }
347 380
348 TEST_F(PictureLayerTilingSetSyncTest, Invalidation) { 381 TEST_F(PictureLayerTilingSetSyncTest, Invalidation) {
349 source_->AddTiling(2.f); 382 source_->AddTiling(2.f);
350 target_->AddTiling(2.f); 383 target_->AddTiling(2.f);
351 target_->tiling_at(0)->CreateAllTilesForTesting(); 384 target_->tiling_at(0)->CreateTilesForTesting(PENDING_TREE);
352 385
353 Region layer_invalidation; 386 Region layer_invalidation;
354 layer_invalidation.Union(gfx::Rect(0, 0, 1, 1)); 387 layer_invalidation.Union(gfx::Rect(0, 0, 1, 1));
355 layer_invalidation.Union(gfx::Rect(0, 15, 1, 1)); 388 layer_invalidation.Union(gfx::Rect(0, 15, 1, 1));
356 // Out of bounds layer_invalidation. 389 // Out of bounds layer_invalidation.
357 layer_invalidation.Union(gfx::Rect(100, 100, 1, 1)); 390 layer_invalidation.Union(gfx::Rect(100, 100, 1, 1));
358 391
359 Region content_invalidation; 392 Region content_invalidation;
360 for (Region::Iterator iter(layer_invalidation); iter.has_rect(); 393 for (Region::Iterator iter(layer_invalidation); iter.has_rect();
361 iter.next()) { 394 iter.next()) {
(...skipping 23 matching lines...) Expand all
385 418
386 TEST_F(PictureLayerTilingSetSyncTest, TileSizeChange) { 419 TEST_F(PictureLayerTilingSetSyncTest, TileSizeChange) {
387 source_->AddTiling(1.f); 420 source_->AddTiling(1.f);
388 target_->AddTiling(1.f); 421 target_->AddTiling(1.f);
389 422
390 target_->tiling_at(0)->CreateAllTilesForTesting(); 423 target_->tiling_at(0)->CreateAllTilesForTesting();
391 std::vector<Tile*> original_tiles = 424 std::vector<Tile*> original_tiles =
392 target_->tiling_at(0)->AllTilesForTesting(); 425 target_->tiling_at(0)->AllTilesForTesting();
393 EXPECT_GT(original_tiles.size(), 0u); 426 EXPECT_GT(original_tiles.size(), 0u);
394 gfx::Size new_tile_size(100, 100); 427 gfx::Size new_tile_size(100, 100);
395 target_client_.SetTileSize(new_tile_size); 428 target_client_->SetTileSize(new_tile_size);
396 EXPECT_NE(target_->tiling_at(0)->tile_size().ToString(), 429 EXPECT_NE(target_->tiling_at(0)->tile_size().ToString(),
397 new_tile_size.ToString()); 430 new_tile_size.ToString());
398 431
399 gfx::Size new_bounds(15, 40); 432 gfx::Size new_bounds(15, 40);
400 SyncTilings(new_bounds); 433 SyncTilings(new_bounds);
401 VerifyTargetEqualsSource(new_bounds); 434 VerifyTargetEqualsSource(new_bounds);
402 435
403 EXPECT_EQ(target_->tiling_at(0)->tile_size().ToString(), 436 EXPECT_EQ(target_->tiling_at(0)->tile_size().ToString(),
404 new_tile_size.ToString()); 437 new_tile_size.ToString());
405 438
406 // All old tiles should not be present in new tiles. 439 // All old tiles should not be present in new tiles.
407 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting(); 440 std::vector<Tile*> new_tiles = target_->tiling_at(0)->AllTilesForTesting();
408 for (size_t i = 0; i < original_tiles.size(); ++i) { 441 for (size_t i = 0; i < original_tiles.size(); ++i) {
409 std::vector<Tile*>::iterator find = 442 std::vector<Tile*>::iterator find =
410 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]); 443 std::find(new_tiles.begin(), new_tiles.end(), original_tiles[i]);
411 EXPECT_TRUE(find == new_tiles.end()); 444 EXPECT_TRUE(find == new_tiles.end());
412 } 445 }
413 } 446 }
414 447
415 } // namespace 448 } // namespace
416 } // namespace cc 449 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698