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

Side by Side Diff: cc/layers/tiled_layer_unittest.cc

Issue 202523002: cc: Replace Region with SimpleEnclosedRegion for occlusion tracking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: simpleregion: . Created 6 years, 4 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/layers/tiled_layer.h" 5 #include "cc/layers/tiled_layer.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 23 matching lines...) Expand all
34 class TestOcclusionTracker : public OcclusionTracker<Layer> { 34 class TestOcclusionTracker : public OcclusionTracker<Layer> {
35 public: 35 public:
36 TestOcclusionTracker() : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000)) { 36 TestOcclusionTracker() : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000)) {
37 stack_.push_back(StackObject()); 37 stack_.push_back(StackObject());
38 } 38 }
39 39
40 void SetRenderTarget(Layer* render_target) { 40 void SetRenderTarget(Layer* render_target) {
41 stack_.back().target = render_target; 41 stack_.back().target = render_target;
42 } 42 }
43 43
44 void SetOcclusion(const Region& occlusion) { 44 void SetOcclusion(const SimpleEnclosedRegion& occlusion) {
45 stack_.back().occlusion_from_inside_target = occlusion; 45 stack_.back().occlusion_from_inside_target = occlusion;
46 } 46 }
47 }; 47 };
48 48
49 class SynchronousOutputSurfaceLayerTreeHost : public LayerTreeHost { 49 class SynchronousOutputSurfaceLayerTreeHost : public LayerTreeHost {
50 public: 50 public:
51 static scoped_ptr<SynchronousOutputSurfaceLayerTreeHost> Create( 51 static scoped_ptr<SynchronousOutputSurfaceLayerTreeHost> Create(
52 LayerTreeHostClient* client, 52 LayerTreeHostClient* client,
53 SharedBitmapManager* manager, 53 SharedBitmapManager* manager,
54 const LayerTreeSettings& settings, 54 const LayerTreeSettings& settings,
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); 308 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0));
309 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); 309 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1));
310 } 310 }
311 311
312 { 312 {
313 RenderSurfaceLayerList render_surface_layer_list; 313 RenderSurfaceLayerList render_surface_layer_list;
314 314
315 // Invalidates part of the top tile... 315 // Invalidates part of the top tile...
316 layer->InvalidateContentRect(gfx::Rect(0, 0, 50, 50)); 316 layer->InvalidateContentRect(gfx::Rect(0, 0, 50, 50));
317 // ....but the area is occluded. 317 // ....but the area is occluded.
318 occluded.SetOcclusion(gfx::Rect(0, 0, 50, 50)); 318 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(0, 0, 50, 50)));
319 CalcDrawProps(&render_surface_layer_list); 319 CalcDrawProps(&render_surface_layer_list);
320 UpdateAndPush(layer, layer_impl); 320 UpdateAndPush(layer, layer_impl);
321 321
322 // We should still have both tiles, as part of the top tile is still 322 // We should still have both tiles, as part of the top tile is still
323 // unoccluded. 323 // unoccluded.
324 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); 324 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0));
325 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); 325 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1));
326 } 326 }
327 } 327 }
328 328
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 scoped_ptr<FakeTiledLayerImpl> layer_impl = 551 scoped_ptr<FakeTiledLayerImpl> layer_impl =
552 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); 552 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1));
553 RenderSurfaceLayerList render_surface_layer_list; 553 RenderSurfaceLayerList render_surface_layer_list;
554 TestOcclusionTracker occluded; 554 TestOcclusionTracker occluded;
555 occlusion_ = &occluded; 555 occlusion_ = &occluded;
556 556
557 layer_tree_host_->root_layer()->AddChild(layer); 557 layer_tree_host_->root_layer()->AddChild(layer);
558 558
559 // The tile size is 100x100, so this invalidates one occluded tile, culls it 559 // The tile size is 100x100, so this invalidates one occluded tile, culls it
560 // during paint, but prepaints it. 560 // during paint, but prepaints it.
561 occluded.SetOcclusion(gfx::Rect(0, 0, 100, 100)); 561 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(0, 0, 100, 100)));
562 562
563 layer->SetBounds(gfx::Size(100, 100)); 563 layer->SetBounds(gfx::Size(100, 100));
564 CalcDrawProps(&render_surface_layer_list); 564 CalcDrawProps(&render_surface_layer_list);
565 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); 565 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100);
566 UpdateAndPush(layer, layer_impl); 566 UpdateAndPush(layer, layer_impl);
567 567
568 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); 568 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0));
569 } 569 }
570 570
571 TEST_F(TiledLayerTest, PushTilesMarkedDirtyDuringPaint) { 571 TEST_F(TiledLayerTest, PushTilesMarkedDirtyDuringPaint) {
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 occlusion_ = &occluded; 1197 occlusion_ = &occluded;
1198 1198
1199 layer_tree_host_->root_layer()->AddChild(layer); 1199 layer_tree_host_->root_layer()->AddChild(layer);
1200 1200
1201 // The tile size is 100x100. 1201 // The tile size is 100x100.
1202 1202
1203 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); 1203 layer_tree_host_->SetViewportSize(gfx::Size(600, 600));
1204 layer->SetBounds(gfx::Size(600, 600)); 1204 layer->SetBounds(gfx::Size(600, 600));
1205 CalcDrawProps(&render_surface_layer_list); 1205 CalcDrawProps(&render_surface_layer_list);
1206 1206
1207 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); 1207 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 100)));
1208 layer->draw_properties().drawable_content_rect = 1208 layer->draw_properties().drawable_content_rect =
1209 gfx::Rect(layer->content_bounds()); 1209 gfx::Rect(layer->content_bounds());
1210 layer->draw_properties().visible_content_rect = 1210 layer->draw_properties().visible_content_rect =
1211 gfx::Rect(layer->content_bounds()); 1211 gfx::Rect(layer->content_bounds());
1212 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1212 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1213 1213
1214 layer->SetTexturePriorities(priority_calculator_); 1214 layer->SetTexturePriorities(priority_calculator_);
1215 resource_manager_->PrioritizeTextures(); 1215 resource_manager_->PrioritizeTextures();
1216 layer->SavePaintProperties(); 1216 layer->SavePaintProperties();
1217 layer->Update(queue_.get(), &occluded); 1217 layer->Update(queue_.get(), &occluded);
1218 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); 1218 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count());
1219 1219
1220 layer->fake_layer_updater()->ClearUpdateCount(); 1220 layer->fake_layer_updater()->ClearUpdateCount();
1221 layer->SetTexturePriorities(priority_calculator_); 1221 layer->SetTexturePriorities(priority_calculator_);
1222 resource_manager_->PrioritizeTextures(); 1222 resource_manager_->PrioritizeTextures();
1223 1223
1224 occluded.SetOcclusion(gfx::Rect(250, 200, 300, 100)); 1224 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(250, 200, 300, 100)));
1225 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1225 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1226 layer->SavePaintProperties(); 1226 layer->SavePaintProperties();
1227 layer->Update(queue_.get(), &occluded); 1227 layer->Update(queue_.get(), &occluded);
1228 EXPECT_EQ(36 - 2, layer->fake_layer_updater()->update_count()); 1228 EXPECT_EQ(36 - 2, layer->fake_layer_updater()->update_count());
1229 1229
1230 layer->fake_layer_updater()->ClearUpdateCount(); 1230 layer->fake_layer_updater()->ClearUpdateCount();
1231 layer->SetTexturePriorities(priority_calculator_); 1231 layer->SetTexturePriorities(priority_calculator_);
1232 resource_manager_->PrioritizeTextures(); 1232 resource_manager_->PrioritizeTextures();
1233 1233
1234 occluded.SetOcclusion(gfx::Rect(250, 250, 300, 100)); 1234 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(250, 250, 300, 100)));
1235 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1235 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1236 layer->SavePaintProperties(); 1236 layer->SavePaintProperties();
1237 layer->Update(queue_.get(), &occluded); 1237 layer->Update(queue_.get(), &occluded);
1238 EXPECT_EQ(36, layer->fake_layer_updater()->update_count()); 1238 EXPECT_EQ(36, layer->fake_layer_updater()->update_count());
1239 } 1239 }
1240 1240
1241 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndVisiblityConstraints) { 1241 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndVisiblityConstraints) {
1242 scoped_refptr<FakeTiledLayer> layer = 1242 scoped_refptr<FakeTiledLayer> layer =
1243 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); 1243 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get()));
1244 RenderSurfaceLayerList render_surface_layer_list; 1244 RenderSurfaceLayerList render_surface_layer_list;
1245 TestOcclusionTracker occluded; 1245 TestOcclusionTracker occluded;
1246 occlusion_ = &occluded; 1246 occlusion_ = &occluded;
1247 1247
1248 layer_tree_host_->root_layer()->AddChild(layer); 1248 layer_tree_host_->root_layer()->AddChild(layer);
1249 1249
1250 // The tile size is 100x100. 1250 // The tile size is 100x100.
1251 1251
1252 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); 1252 layer_tree_host_->SetViewportSize(gfx::Size(600, 600));
1253 layer->SetBounds(gfx::Size(600, 600)); 1253 layer->SetBounds(gfx::Size(600, 600));
1254 CalcDrawProps(&render_surface_layer_list); 1254 CalcDrawProps(&render_surface_layer_list);
1255 1255
1256 // The partially occluded tiles (by the 150 occlusion height) are visible 1256 // The partially occluded tiles (by the 150 occlusion height) are visible
1257 // beyond the occlusion, so not culled. 1257 // beyond the occlusion, so not culled.
1258 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); 1258 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 150)));
1259 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); 1259 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 360);
1260 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 360); 1260 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 360);
1261 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1261 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1262 1262
1263 layer->SetTexturePriorities(priority_calculator_); 1263 layer->SetTexturePriorities(priority_calculator_);
1264 resource_manager_->PrioritizeTextures(); 1264 resource_manager_->PrioritizeTextures();
1265 layer->SavePaintProperties(); 1265 layer->SavePaintProperties();
1266 layer->Update(queue_.get(), &occluded); 1266 layer->Update(queue_.get(), &occluded);
1267 EXPECT_EQ(24 - 3, layer->fake_layer_updater()->update_count()); 1267 EXPECT_EQ(24 - 3, layer->fake_layer_updater()->update_count());
1268 1268
1269 layer->fake_layer_updater()->ClearUpdateCount(); 1269 layer->fake_layer_updater()->ClearUpdateCount();
1270 1270
1271 // Now the visible region stops at the edge of the occlusion so the partly 1271 // Now the visible region stops at the edge of the occlusion so the partly
1272 // visible tiles become fully occluded. 1272 // visible tiles become fully occluded.
1273 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); 1273 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 150)));
1274 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); 1274 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 350);
1275 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 350); 1275 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 350);
1276 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1276 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1277 layer->SetTexturePriorities(priority_calculator_); 1277 layer->SetTexturePriorities(priority_calculator_);
1278 resource_manager_->PrioritizeTextures(); 1278 resource_manager_->PrioritizeTextures();
1279 layer->SavePaintProperties(); 1279 layer->SavePaintProperties();
1280 layer->Update(queue_.get(), &occluded); 1280 layer->Update(queue_.get(), &occluded);
1281 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); 1281 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count());
1282 1282
1283 layer->fake_layer_updater()->ClearUpdateCount(); 1283 layer->fake_layer_updater()->ClearUpdateCount();
1284 1284
1285 // Now the visible region is even smaller than the occlusion, it should have 1285 // Now the visible region is even smaller than the occlusion, it should have
1286 // the same result. 1286 // the same result.
1287 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); 1287 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 150)));
1288 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); 1288 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 340);
1289 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 340); 1289 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 340);
1290 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1290 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1291 layer->SetTexturePriorities(priority_calculator_); 1291 layer->SetTexturePriorities(priority_calculator_);
1292 resource_manager_->PrioritizeTextures(); 1292 resource_manager_->PrioritizeTextures();
1293 layer->SavePaintProperties(); 1293 layer->SavePaintProperties();
1294 layer->Update(queue_.get(), &occluded); 1294 layer->Update(queue_.get(), &occluded);
1295 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); 1295 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count());
1296 } 1296 }
1297 1297
1298 TEST_F(TiledLayerTest, TilesNotPaintedWithoutInvalidation) { 1298 TEST_F(TiledLayerTest, TilesNotPaintedWithoutInvalidation) {
1299 scoped_refptr<FakeTiledLayer> layer = 1299 scoped_refptr<FakeTiledLayer> layer =
1300 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); 1300 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get()));
1301 RenderSurfaceLayerList render_surface_layer_list; 1301 RenderSurfaceLayerList render_surface_layer_list;
1302 TestOcclusionTracker occluded; 1302 TestOcclusionTracker occluded;
1303 occlusion_ = &occluded; 1303 occlusion_ = &occluded;
1304 1304
1305 layer_tree_host_->root_layer()->AddChild(layer); 1305 layer_tree_host_->root_layer()->AddChild(layer);
1306 1306
1307 // The tile size is 100x100. 1307 // The tile size is 100x100.
1308 1308
1309 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); 1309 layer_tree_host_->SetViewportSize(gfx::Size(600, 600));
1310 layer->SetBounds(gfx::Size(600, 600)); 1310 layer->SetBounds(gfx::Size(600, 600));
1311 CalcDrawProps(&render_surface_layer_list); 1311 CalcDrawProps(&render_surface_layer_list);
1312 1312
1313 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); 1313 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 100)));
1314 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); 1314 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 600);
1315 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 600); 1315 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 600);
1316 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1316 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1317 layer->SetTexturePriorities(priority_calculator_); 1317 layer->SetTexturePriorities(priority_calculator_);
1318 resource_manager_->PrioritizeTextures(); 1318 resource_manager_->PrioritizeTextures();
1319 layer->SavePaintProperties(); 1319 layer->SavePaintProperties();
1320 layer->Update(queue_.get(), &occluded); 1320 layer->Update(queue_.get(), &occluded);
1321 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); 1321 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count());
1322 UpdateTextures(); 1322 UpdateTextures();
1323 1323
(...skipping 22 matching lines...) Expand all
1346 // This makes sure the painting works when the occluded region (in screen 1346 // This makes sure the painting works when the occluded region (in screen
1347 // space) is transformed differently than the layer. 1347 // space) is transformed differently than the layer.
1348 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); 1348 layer_tree_host_->SetViewportSize(gfx::Size(600, 600));
1349 layer->SetBounds(gfx::Size(600, 600)); 1349 layer->SetBounds(gfx::Size(600, 600));
1350 CalcDrawProps(&render_surface_layer_list); 1350 CalcDrawProps(&render_surface_layer_list);
1351 gfx::Transform screen_transform; 1351 gfx::Transform screen_transform;
1352 screen_transform.Scale(0.5, 0.5); 1352 screen_transform.Scale(0.5, 0.5);
1353 layer->draw_properties().screen_space_transform = screen_transform; 1353 layer->draw_properties().screen_space_transform = screen_transform;
1354 layer->draw_properties().target_space_transform = screen_transform; 1354 layer->draw_properties().target_space_transform = screen_transform;
1355 1355
1356 occluded.SetOcclusion(gfx::Rect(100, 100, 150, 50)); 1356 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(100, 100, 150, 50)));
1357 layer->draw_properties().drawable_content_rect = 1357 layer->draw_properties().drawable_content_rect =
1358 gfx::Rect(layer->content_bounds()); 1358 gfx::Rect(layer->content_bounds());
1359 layer->draw_properties().visible_content_rect = 1359 layer->draw_properties().visible_content_rect =
1360 gfx::Rect(layer->content_bounds()); 1360 gfx::Rect(layer->content_bounds());
1361 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1361 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1362 layer->SetTexturePriorities(priority_calculator_); 1362 layer->SetTexturePriorities(priority_calculator_);
1363 resource_manager_->PrioritizeTextures(); 1363 resource_manager_->PrioritizeTextures();
1364 layer->SavePaintProperties(); 1364 layer->SavePaintProperties();
1365 layer->Update(queue_.get(), &occluded); 1365 layer->Update(queue_.get(), &occluded);
1366 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); 1366 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count());
(...skipping 21 matching lines...) Expand all
1388 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); 1388 layer_tree_host_->SetViewportSize(gfx::Size(600, 600));
1389 layer->SetBounds(gfx::Size(300, 300)); 1389 layer->SetBounds(gfx::Size(300, 300));
1390 scale_layer->AddChild(layer); 1390 scale_layer->AddChild(layer);
1391 CalcDrawProps(&render_surface_layer_list); 1391 CalcDrawProps(&render_surface_layer_list);
1392 EXPECT_FLOAT_EQ(2.f, layer->contents_scale_x()); 1392 EXPECT_FLOAT_EQ(2.f, layer->contents_scale_x());
1393 EXPECT_FLOAT_EQ(2.f, layer->contents_scale_y()); 1393 EXPECT_FLOAT_EQ(2.f, layer->contents_scale_y());
1394 EXPECT_EQ(gfx::Size(600, 600).ToString(), 1394 EXPECT_EQ(gfx::Size(600, 600).ToString(),
1395 layer->content_bounds().ToString()); 1395 layer->content_bounds().ToString());
1396 1396
1397 // No tiles are covered by the 300x50 occlusion. 1397 // No tiles are covered by the 300x50 occlusion.
1398 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 50)); 1398 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 50)));
1399 layer->draw_properties().drawable_content_rect = 1399 layer->draw_properties().drawable_content_rect =
1400 gfx::Rect(layer->bounds()); 1400 gfx::Rect(layer->bounds());
1401 layer->draw_properties().visible_content_rect = 1401 layer->draw_properties().visible_content_rect =
1402 gfx::Rect(layer->content_bounds()); 1402 gfx::Rect(layer->content_bounds());
1403 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1403 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1404 layer->SetTexturePriorities(priority_calculator_); 1404 layer->SetTexturePriorities(priority_calculator_);
1405 resource_manager_->PrioritizeTextures(); 1405 resource_manager_->PrioritizeTextures();
1406 layer->SavePaintProperties(); 1406 layer->SavePaintProperties();
1407 layer->Update(queue_.get(), &occluded); 1407 layer->Update(queue_.get(), &occluded);
1408 int visible_tiles1 = 6 * 6; 1408 int visible_tiles1 = 6 * 6;
1409 EXPECT_EQ(visible_tiles1, layer->fake_layer_updater()->update_count()); 1409 EXPECT_EQ(visible_tiles1, layer->fake_layer_updater()->update_count());
1410 1410
1411 layer->fake_layer_updater()->ClearUpdateCount(); 1411 layer->fake_layer_updater()->ClearUpdateCount();
1412 1412
1413 // The occlusion of 300x100 will be cover 3 tiles as tiles are 100x100 still. 1413 // The occlusion of 300x100 will be cover 3 tiles as tiles are 100x100 still.
1414 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); 1414 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(200, 200, 300, 100)));
1415 layer->draw_properties().drawable_content_rect = 1415 layer->draw_properties().drawable_content_rect =
1416 gfx::Rect(layer->bounds()); 1416 gfx::Rect(layer->bounds());
1417 layer->draw_properties().visible_content_rect = 1417 layer->draw_properties().visible_content_rect =
1418 gfx::Rect(layer->content_bounds()); 1418 gfx::Rect(layer->content_bounds());
1419 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1419 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1420 layer->SetTexturePriorities(priority_calculator_); 1420 layer->SetTexturePriorities(priority_calculator_);
1421 resource_manager_->PrioritizeTextures(); 1421 resource_manager_->PrioritizeTextures();
1422 layer->SavePaintProperties(); 1422 layer->SavePaintProperties();
1423 layer->Update(queue_.get(), &occluded); 1423 layer->Update(queue_.get(), &occluded);
1424 int visible_tiles2 = 6 * 6 - 3; 1424 int visible_tiles2 = 6 * 6 - 3;
1425 EXPECT_EQ(visible_tiles2, layer->fake_layer_updater()->update_count()); 1425 EXPECT_EQ(visible_tiles2, layer->fake_layer_updater()->update_count());
1426 1426
1427 layer->fake_layer_updater()->ClearUpdateCount(); 1427 layer->fake_layer_updater()->ClearUpdateCount();
1428 1428
1429 // This makes sure content scaling and transforms work together. 1429 // This makes sure content scaling and transforms work together.
1430 // When the tiles are scaled down by half, they are 50x50 each in the 1430 // When the tiles are scaled down by half, they are 50x50 each in the
1431 // screen. 1431 // screen.
1432 gfx::Transform screen_transform; 1432 gfx::Transform screen_transform;
1433 screen_transform.Scale(0.5, 0.5); 1433 screen_transform.Scale(0.5, 0.5);
1434 layer->draw_properties().screen_space_transform = screen_transform; 1434 layer->draw_properties().screen_space_transform = screen_transform;
1435 layer->draw_properties().target_space_transform = screen_transform; 1435 layer->draw_properties().target_space_transform = screen_transform;
1436 1436
1437 // An occlusion of 150x100 will cover 3*2 = 6 tiles. 1437 // An occlusion of 150x100 will cover 3*2 = 6 tiles.
1438 occluded.SetOcclusion(gfx::Rect(100, 100, 150, 100)); 1438 occluded.SetOcclusion(SimpleEnclosedRegion(gfx::Rect(100, 100, 150, 100)));
1439 1439
1440 gfx::Rect layer_bounds_rect(layer->bounds()); 1440 gfx::Rect layer_bounds_rect(layer->bounds());
1441 layer->draw_properties().drawable_content_rect = 1441 layer->draw_properties().drawable_content_rect =
1442 gfx::ScaleToEnclosingRect(layer_bounds_rect, 0.5f); 1442 gfx::ScaleToEnclosingRect(layer_bounds_rect, 0.5f);
1443 layer->draw_properties().visible_content_rect = 1443 layer->draw_properties().visible_content_rect =
1444 gfx::Rect(layer->content_bounds()); 1444 gfx::Rect(layer->content_bounds());
1445 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); 1445 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600));
1446 layer->SetTexturePriorities(priority_calculator_); 1446 layer->SetTexturePriorities(priority_calculator_);
1447 resource_manager_->PrioritizeTextures(); 1447 resource_manager_->PrioritizeTextures();
1448 layer->SavePaintProperties(); 1448 layer->SavePaintProperties();
1449 layer->Update(queue_.get(), &occluded); 1449 layer->Update(queue_.get(), &occluded);
1450 int visible_tiles3 = 6 * 6 - 6; 1450 int visible_tiles3 = 6 * 6 - 6;
1451 EXPECT_EQ(visible_tiles3, layer->fake_layer_updater()->update_count()); 1451 EXPECT_EQ(visible_tiles3, layer->fake_layer_updater()->update_count());
1452 } 1452 }
1453 1453
1454 TEST_F(TiledLayerTest, VisibleContentOpaqueRegion) { 1454 TEST_F(TiledLayerTest, VisibleContentOpaqueRegion) {
1455 scoped_refptr<FakeTiledLayer> layer = 1455 scoped_refptr<FakeTiledLayer> layer =
1456 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); 1456 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get()));
1457 RenderSurfaceLayerList render_surface_layer_list; 1457 RenderSurfaceLayerList render_surface_layer_list;
1458 TestOcclusionTracker occluded; 1458 TestOcclusionTracker occluded;
1459 occlusion_ = &occluded; 1459 occlusion_ = &occluded;
1460 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); 1460 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000));
1461 1461
1462 layer_tree_host_->root_layer()->AddChild(layer); 1462 layer_tree_host_->root_layer()->AddChild(layer);
1463 1463
1464 // The tile size is 100x100, so this invalidates and then paints two tiles in 1464 // The tile size is 100x100, so this invalidates and then paints two tiles in
1465 // various ways. 1465 // various ways.
1466 1466
1467 gfx::Rect opaque_paint_rect; 1467 gfx::Rect opaque_paint_rect;
1468 Region opaque_contents; 1468 SimpleEnclosedRegion opaque_contents;
1469 1469
1470 gfx::Rect content_bounds = gfx::Rect(0, 0, 100, 200); 1470 gfx::Rect content_bounds = gfx::Rect(0, 0, 100, 200);
1471 gfx::Rect visible_bounds = gfx::Rect(0, 0, 100, 150); 1471 gfx::Rect visible_bounds = gfx::Rect(0, 0, 100, 150);
1472 1472
1473 layer->SetBounds(content_bounds.size()); 1473 layer->SetBounds(content_bounds.size());
1474 CalcDrawProps(&render_surface_layer_list); 1474 CalcDrawProps(&render_surface_layer_list);
1475 layer->draw_properties().drawable_content_rect = visible_bounds; 1475 layer->draw_properties().drawable_content_rect = visible_bounds;
1476 layer->draw_properties().visible_content_rect = visible_bounds; 1476 layer->draw_properties().visible_content_rect = visible_bounds;
1477 1477
1478 // If the layer doesn't paint opaque content, then the 1478 // If the layer doesn't paint opaque content, then the
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 // Invalidate the entire layer in layer space. When painting, the rect given 1811 // Invalidate the entire layer in layer space. When painting, the rect given
1812 // to webkit should match the layer's bounds. 1812 // to webkit should match the layer's bounds.
1813 layer->SetNeedsDisplayRect(layer_rect); 1813 layer->SetNeedsDisplayRect(layer_rect);
1814 layer->Update(queue_.get(), NULL); 1814 layer->Update(queue_.get(), NULL);
1815 1815
1816 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); 1816 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect());
1817 } 1817 }
1818 1818
1819 } // namespace 1819 } // namespace
1820 } // namespace cc 1820 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698