OLD | NEW |
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" |
11 #include "cc/debug/overdraw_metrics.h" | |
12 #include "cc/resources/bitmap_content_layer_updater.h" | 11 #include "cc/resources/bitmap_content_layer_updater.h" |
13 #include "cc/resources/layer_painter.h" | 12 #include "cc/resources/layer_painter.h" |
14 #include "cc/resources/prioritized_resource_manager.h" | 13 #include "cc/resources/prioritized_resource_manager.h" |
15 #include "cc/resources/resource_update_controller.h" | 14 #include "cc/resources/resource_update_controller.h" |
16 #include "cc/test/animation_test_common.h" | 15 #include "cc/test/animation_test_common.h" |
17 #include "cc/test/fake_layer_tree_host_client.h" | 16 #include "cc/test/fake_layer_tree_host_client.h" |
18 #include "cc/test/fake_layer_tree_host_impl.h" | 17 #include "cc/test/fake_layer_tree_host_impl.h" |
19 #include "cc/test/fake_output_surface.h" | 18 #include "cc/test/fake_output_surface.h" |
20 #include "cc/test/fake_output_surface_client.h" | 19 #include "cc/test/fake_output_surface_client.h" |
21 #include "cc/test/fake_proxy.h" | 20 #include "cc/test/fake_proxy.h" |
22 #include "cc/test/fake_rendering_stats_instrumentation.h" | 21 #include "cc/test/fake_rendering_stats_instrumentation.h" |
23 #include "cc/test/geometry_test_utils.h" | 22 #include "cc/test/geometry_test_utils.h" |
24 #include "cc/test/tiled_layer_test_common.h" | 23 #include "cc/test/tiled_layer_test_common.h" |
25 #include "cc/trees/occlusion_tracker.h" | 24 #include "cc/trees/occlusion_tracker.h" |
26 #include "cc/trees/single_thread_proxy.h" | 25 #include "cc/trees/single_thread_proxy.h" |
27 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
28 #include "ui/gfx/rect_conversions.h" | 27 #include "ui/gfx/rect_conversions.h" |
29 #include "ui/gfx/transform.h" | 28 #include "ui/gfx/transform.h" |
30 | 29 |
31 namespace cc { | 30 namespace cc { |
32 namespace { | 31 namespace { |
33 | 32 |
34 class TestOcclusionTracker : public OcclusionTracker<Layer> { | 33 class TestOcclusionTracker : public OcclusionTracker<Layer> { |
35 public: | 34 public: |
36 TestOcclusionTracker() : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000), true) { | 35 TestOcclusionTracker() : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000)) { |
37 stack_.push_back(StackObject()); | 36 stack_.push_back(StackObject()); |
38 } | 37 } |
39 | 38 |
40 void SetRenderTarget(Layer* render_target) { | 39 void SetRenderTarget(Layer* render_target) { |
41 stack_.back().target = render_target; | 40 stack_.back().target = render_target; |
42 } | 41 } |
43 | 42 |
44 void SetOcclusion(const Region& occlusion) { | 43 void SetOcclusion(const Region& occlusion) { |
45 stack_.back().occlusion_from_inside_target = occlusion; | 44 stack_.back().occlusion_from_inside_target = occlusion; |
46 } | 45 } |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 layer_tree_host_->root_layer()->AddChild(layer); | 293 layer_tree_host_->root_layer()->AddChild(layer); |
295 | 294 |
296 { | 295 { |
297 RenderSurfaceLayerList render_surface_layer_list; | 296 RenderSurfaceLayerList render_surface_layer_list; |
298 | 297 |
299 // The tile size is 100x100, so this invalidates and then paints two tiles. | 298 // The tile size is 100x100, so this invalidates and then paints two tiles. |
300 layer->SetBounds(gfx::Size(100, 200)); | 299 layer->SetBounds(gfx::Size(100, 200)); |
301 CalcDrawProps(&render_surface_layer_list); | 300 CalcDrawProps(&render_surface_layer_list); |
302 UpdateAndPush(layer, layer_impl); | 301 UpdateAndPush(layer, layer_impl); |
303 | 302 |
304 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
305 EXPECT_NEAR( | |
306 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 20000, 1); | |
307 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
308 | |
309 // We should have both tiles on the impl side. | 303 // We should have both tiles on the impl side. |
310 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 304 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
311 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); | 305 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); |
312 } | 306 } |
313 | 307 |
314 { | 308 { |
315 RenderSurfaceLayerList render_surface_layer_list; | 309 RenderSurfaceLayerList render_surface_layer_list; |
316 | 310 |
317 // Invalidates part of the top tile... | 311 // Invalidates part of the top tile... |
318 layer->InvalidateContentRect(gfx::Rect(0, 0, 50, 50)); | 312 layer->InvalidateContentRect(gfx::Rect(0, 0, 50, 50)); |
319 // ....but the area is occluded. | 313 // ....but the area is occluded. |
320 occluded.SetOcclusion(gfx::Rect(0, 0, 50, 50)); | 314 occluded.SetOcclusion(gfx::Rect(0, 0, 50, 50)); |
321 CalcDrawProps(&render_surface_layer_list); | 315 CalcDrawProps(&render_surface_layer_list); |
322 UpdateAndPush(layer, layer_impl); | 316 UpdateAndPush(layer, layer_impl); |
323 | 317 |
324 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
325 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
326 20000 + 2500, | |
327 1); | |
328 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
329 | |
330 // We should still have both tiles, as part of the top tile is still | 318 // We should still have both tiles, as part of the top tile is still |
331 // unoccluded. | 319 // unoccluded. |
332 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 320 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
333 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); | 321 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 1)); |
334 } | 322 } |
335 } | 323 } |
336 | 324 |
337 TEST_F(TiledLayerTest, PushDeletedTiles) { | 325 TEST_F(TiledLayerTest, PushDeletedTiles) { |
338 scoped_refptr<FakeTiledLayer> layer = | 326 scoped_refptr<FakeTiledLayer> layer = |
339 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 327 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 | 554 |
567 // The tile size is 100x100, so this invalidates one occluded tile, culls it | 555 // The tile size is 100x100, so this invalidates one occluded tile, culls it |
568 // during paint, but prepaints it. | 556 // during paint, but prepaints it. |
569 occluded.SetOcclusion(gfx::Rect(0, 0, 100, 100)); | 557 occluded.SetOcclusion(gfx::Rect(0, 0, 100, 100)); |
570 | 558 |
571 layer->SetBounds(gfx::Size(100, 100)); | 559 layer->SetBounds(gfx::Size(100, 100)); |
572 CalcDrawProps(&render_surface_layer_list); | 560 CalcDrawProps(&render_surface_layer_list); |
573 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); | 561 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 100, 100); |
574 UpdateAndPush(layer, layer_impl); | 562 UpdateAndPush(layer, layer_impl); |
575 | 563 |
576 // We should have the prepainted tile on the impl side, but culled it during | |
577 // paint. | |
578 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); | 564 EXPECT_TRUE(layer_impl->HasResourceIdForTileAt(0, 0)); |
579 EXPECT_EQ(1, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
580 } | 565 } |
581 | 566 |
582 TEST_F(TiledLayerTest, PushTilesMarkedDirtyDuringPaint) { | 567 TEST_F(TiledLayerTest, PushTilesMarkedDirtyDuringPaint) { |
583 scoped_refptr<FakeTiledLayer> layer = | 568 scoped_refptr<FakeTiledLayer> layer = |
584 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 569 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
585 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 570 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
586 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 571 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
587 RenderSurfaceLayerList render_surface_layer_list; | 572 RenderSurfaceLayerList render_surface_layer_list; |
588 | 573 |
589 layer_tree_host_->root_layer()->AddChild(layer); | 574 layer_tree_host_->root_layer()->AddChild(layer); |
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1221 layer->draw_properties().visible_content_rect = | 1206 layer->draw_properties().visible_content_rect = |
1222 gfx::Rect(layer->content_bounds()); | 1207 gfx::Rect(layer->content_bounds()); |
1223 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1208 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1224 | 1209 |
1225 layer->SetTexturePriorities(priority_calculator_); | 1210 layer->SetTexturePriorities(priority_calculator_); |
1226 resource_manager_->PrioritizeTextures(); | 1211 resource_manager_->PrioritizeTextures(); |
1227 layer->SavePaintProperties(); | 1212 layer->SavePaintProperties(); |
1228 layer->Update(queue_.get(), &occluded); | 1213 layer->Update(queue_.get(), &occluded); |
1229 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); | 1214 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); |
1230 | 1215 |
1231 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1232 EXPECT_NEAR( | |
1233 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 330000, 1); | |
1234 EXPECT_EQ(3, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1235 | |
1236 layer->fake_layer_updater()->ClearUpdateCount(); | 1216 layer->fake_layer_updater()->ClearUpdateCount(); |
1237 layer->SetTexturePriorities(priority_calculator_); | 1217 layer->SetTexturePriorities(priority_calculator_); |
1238 resource_manager_->PrioritizeTextures(); | 1218 resource_manager_->PrioritizeTextures(); |
1239 | 1219 |
1240 occluded.SetOcclusion(gfx::Rect(250, 200, 300, 100)); | 1220 occluded.SetOcclusion(gfx::Rect(250, 200, 300, 100)); |
1241 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1221 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1242 layer->SavePaintProperties(); | 1222 layer->SavePaintProperties(); |
1243 layer->Update(queue_.get(), &occluded); | 1223 layer->Update(queue_.get(), &occluded); |
1244 EXPECT_EQ(36 - 2, layer->fake_layer_updater()->update_count()); | 1224 EXPECT_EQ(36 - 2, layer->fake_layer_updater()->update_count()); |
1245 | 1225 |
1246 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1247 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1248 330000 + 340000, | |
1249 1); | |
1250 EXPECT_EQ(3 + 2, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1251 | |
1252 layer->fake_layer_updater()->ClearUpdateCount(); | 1226 layer->fake_layer_updater()->ClearUpdateCount(); |
1253 layer->SetTexturePriorities(priority_calculator_); | 1227 layer->SetTexturePriorities(priority_calculator_); |
1254 resource_manager_->PrioritizeTextures(); | 1228 resource_manager_->PrioritizeTextures(); |
1255 | 1229 |
1256 occluded.SetOcclusion(gfx::Rect(250, 250, 300, 100)); | 1230 occluded.SetOcclusion(gfx::Rect(250, 250, 300, 100)); |
1257 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1231 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1258 layer->SavePaintProperties(); | 1232 layer->SavePaintProperties(); |
1259 layer->Update(queue_.get(), &occluded); | 1233 layer->Update(queue_.get(), &occluded); |
1260 EXPECT_EQ(36, layer->fake_layer_updater()->update_count()); | 1234 EXPECT_EQ(36, layer->fake_layer_updater()->update_count()); |
1261 | |
1262 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1263 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1264 330000 + 340000 + 360000, | |
1265 1); | |
1266 EXPECT_EQ(3 + 2, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1267 } | 1235 } |
1268 | 1236 |
1269 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndVisiblityConstraints) { | 1237 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndVisiblityConstraints) { |
1270 scoped_refptr<FakeTiledLayer> layer = | 1238 scoped_refptr<FakeTiledLayer> layer = |
1271 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1239 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
1272 RenderSurfaceLayerList render_surface_layer_list; | 1240 RenderSurfaceLayerList render_surface_layer_list; |
1273 TestOcclusionTracker occluded; | 1241 TestOcclusionTracker occluded; |
1274 occlusion_ = &occluded; | 1242 occlusion_ = &occluded; |
1275 | 1243 |
1276 layer_tree_host_->root_layer()->AddChild(layer); | 1244 layer_tree_host_->root_layer()->AddChild(layer); |
(...skipping 10 matching lines...) Expand all Loading... |
1287 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); | 1255 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 360); |
1288 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 360); | 1256 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 360); |
1289 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1257 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1290 | 1258 |
1291 layer->SetTexturePriorities(priority_calculator_); | 1259 layer->SetTexturePriorities(priority_calculator_); |
1292 resource_manager_->PrioritizeTextures(); | 1260 resource_manager_->PrioritizeTextures(); |
1293 layer->SavePaintProperties(); | 1261 layer->SavePaintProperties(); |
1294 layer->Update(queue_.get(), &occluded); | 1262 layer->Update(queue_.get(), &occluded); |
1295 EXPECT_EQ(24 - 3, layer->fake_layer_updater()->update_count()); | 1263 EXPECT_EQ(24 - 3, layer->fake_layer_updater()->update_count()); |
1296 | 1264 |
1297 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1298 EXPECT_NEAR( | |
1299 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 210000, 1); | |
1300 EXPECT_EQ(3, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1301 | |
1302 layer->fake_layer_updater()->ClearUpdateCount(); | 1265 layer->fake_layer_updater()->ClearUpdateCount(); |
1303 | 1266 |
1304 // Now the visible region stops at the edge of the occlusion so the partly | 1267 // Now the visible region stops at the edge of the occlusion so the partly |
1305 // visible tiles become fully occluded. | 1268 // visible tiles become fully occluded. |
1306 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); | 1269 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); |
1307 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); | 1270 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 350); |
1308 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 350); | 1271 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 350); |
1309 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1272 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1310 layer->SetTexturePriorities(priority_calculator_); | 1273 layer->SetTexturePriorities(priority_calculator_); |
1311 resource_manager_->PrioritizeTextures(); | 1274 resource_manager_->PrioritizeTextures(); |
1312 layer->SavePaintProperties(); | 1275 layer->SavePaintProperties(); |
1313 layer->Update(queue_.get(), &occluded); | 1276 layer->Update(queue_.get(), &occluded); |
1314 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); | 1277 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); |
1315 | 1278 |
1316 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1317 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1318 210000 + 180000, | |
1319 1); | |
1320 EXPECT_EQ(3 + 6, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1321 | |
1322 layer->fake_layer_updater()->ClearUpdateCount(); | 1279 layer->fake_layer_updater()->ClearUpdateCount(); |
1323 | 1280 |
1324 // Now the visible region is even smaller than the occlusion, it should have | 1281 // Now the visible region is even smaller than the occlusion, it should have |
1325 // the same result. | 1282 // the same result. |
1326 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); | 1283 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 150)); |
1327 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); | 1284 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 340); |
1328 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 340); | 1285 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 340); |
1329 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1286 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1330 layer->SetTexturePriorities(priority_calculator_); | 1287 layer->SetTexturePriorities(priority_calculator_); |
1331 resource_manager_->PrioritizeTextures(); | 1288 resource_manager_->PrioritizeTextures(); |
1332 layer->SavePaintProperties(); | 1289 layer->SavePaintProperties(); |
1333 layer->Update(queue_.get(), &occluded); | 1290 layer->Update(queue_.get(), &occluded); |
1334 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); | 1291 EXPECT_EQ(24 - 6, layer->fake_layer_updater()->update_count()); |
1335 | |
1336 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1337 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1338 210000 + 180000 + 180000, | |
1339 1); | |
1340 EXPECT_EQ(3 + 6 + 6, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1341 } | 1292 } |
1342 | 1293 |
1343 TEST_F(TiledLayerTest, TilesNotPaintedWithoutInvalidation) { | 1294 TEST_F(TiledLayerTest, TilesNotPaintedWithoutInvalidation) { |
1344 scoped_refptr<FakeTiledLayer> layer = | 1295 scoped_refptr<FakeTiledLayer> layer = |
1345 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1296 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
1346 RenderSurfaceLayerList render_surface_layer_list; | 1297 RenderSurfaceLayerList render_surface_layer_list; |
1347 TestOcclusionTracker occluded; | 1298 TestOcclusionTracker occluded; |
1348 occlusion_ = &occluded; | 1299 occlusion_ = &occluded; |
1349 | 1300 |
1350 layer_tree_host_->root_layer()->AddChild(layer); | 1301 layer_tree_host_->root_layer()->AddChild(layer); |
1351 | 1302 |
1352 // The tile size is 100x100. | 1303 // The tile size is 100x100. |
1353 | 1304 |
1354 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); | 1305 layer_tree_host_->SetViewportSize(gfx::Size(600, 600)); |
1355 layer->SetBounds(gfx::Size(600, 600)); | 1306 layer->SetBounds(gfx::Size(600, 600)); |
1356 CalcDrawProps(&render_surface_layer_list); | 1307 CalcDrawProps(&render_surface_layer_list); |
1357 | 1308 |
1358 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); | 1309 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); |
1359 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); | 1310 layer->draw_properties().drawable_content_rect = gfx::Rect(0, 0, 600, 600); |
1360 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 600); | 1311 layer->draw_properties().visible_content_rect = gfx::Rect(0, 0, 600, 600); |
1361 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1312 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1362 layer->SetTexturePriorities(priority_calculator_); | 1313 layer->SetTexturePriorities(priority_calculator_); |
1363 resource_manager_->PrioritizeTextures(); | 1314 resource_manager_->PrioritizeTextures(); |
1364 layer->SavePaintProperties(); | 1315 layer->SavePaintProperties(); |
1365 layer->Update(queue_.get(), &occluded); | 1316 layer->Update(queue_.get(), &occluded); |
1366 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); | 1317 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); |
1367 { UpdateTextures(); } | 1318 UpdateTextures(); |
1368 | |
1369 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1370 EXPECT_NEAR( | |
1371 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 330000, 1); | |
1372 EXPECT_EQ(3, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1373 | 1319 |
1374 layer->fake_layer_updater()->ClearUpdateCount(); | 1320 layer->fake_layer_updater()->ClearUpdateCount(); |
1375 layer->SetTexturePriorities(priority_calculator_); | 1321 layer->SetTexturePriorities(priority_calculator_); |
1376 resource_manager_->PrioritizeTextures(); | 1322 resource_manager_->PrioritizeTextures(); |
1377 layer->SavePaintProperties(); | 1323 layer->SavePaintProperties(); |
1378 | 1324 |
1379 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted | 1325 // Repaint without marking it dirty. The 3 culled tiles will be pre-painted |
1380 // now. | 1326 // now. |
1381 layer->Update(queue_.get(), &occluded); | 1327 layer->Update(queue_.get(), &occluded); |
1382 EXPECT_EQ(3, layer->fake_layer_updater()->update_count()); | 1328 EXPECT_EQ(3, layer->fake_layer_updater()->update_count()); |
1383 | |
1384 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1385 EXPECT_NEAR( | |
1386 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 330000, 1); | |
1387 EXPECT_EQ(6, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1388 } | 1329 } |
1389 | 1330 |
1390 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndTransforms) { | 1331 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndTransforms) { |
1391 scoped_refptr<FakeTiledLayer> layer = | 1332 scoped_refptr<FakeTiledLayer> layer = |
1392 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1333 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
1393 RenderSurfaceLayerList render_surface_layer_list; | 1334 RenderSurfaceLayerList render_surface_layer_list; |
1394 TestOcclusionTracker occluded; | 1335 TestOcclusionTracker occluded; |
1395 occlusion_ = &occluded; | 1336 occlusion_ = &occluded; |
1396 | 1337 |
1397 layer_tree_host_->root_layer()->AddChild(layer); | 1338 layer_tree_host_->root_layer()->AddChild(layer); |
(...skipping 14 matching lines...) Expand all Loading... |
1412 layer->draw_properties().drawable_content_rect = | 1353 layer->draw_properties().drawable_content_rect = |
1413 gfx::Rect(layer->content_bounds()); | 1354 gfx::Rect(layer->content_bounds()); |
1414 layer->draw_properties().visible_content_rect = | 1355 layer->draw_properties().visible_content_rect = |
1415 gfx::Rect(layer->content_bounds()); | 1356 gfx::Rect(layer->content_bounds()); |
1416 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1357 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1417 layer->SetTexturePriorities(priority_calculator_); | 1358 layer->SetTexturePriorities(priority_calculator_); |
1418 resource_manager_->PrioritizeTextures(); | 1359 resource_manager_->PrioritizeTextures(); |
1419 layer->SavePaintProperties(); | 1360 layer->SavePaintProperties(); |
1420 layer->Update(queue_.get(), &occluded); | 1361 layer->Update(queue_.get(), &occluded); |
1421 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); | 1362 EXPECT_EQ(36 - 3, layer->fake_layer_updater()->update_count()); |
1422 | |
1423 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1424 EXPECT_NEAR( | |
1425 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 330000, 1); | |
1426 EXPECT_EQ(3, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1427 } | 1363 } |
1428 | 1364 |
1429 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndScaling) { | 1365 TEST_F(TiledLayerTest, TilesPaintedWithOcclusionAndScaling) { |
1430 scoped_refptr<FakeTiledLayer> layer = | 1366 scoped_refptr<FakeTiledLayer> layer = |
1431 new FakeTiledLayer(resource_manager_.get()); | 1367 new FakeTiledLayer(resource_manager_.get()); |
1432 RenderSurfaceLayerList render_surface_layer_list; | 1368 RenderSurfaceLayerList render_surface_layer_list; |
1433 TestOcclusionTracker occluded; | 1369 TestOcclusionTracker occluded; |
1434 occlusion_ = &occluded; | 1370 occlusion_ = &occluded; |
1435 | 1371 |
1436 scoped_refptr<FakeTiledLayer> scale_layer = | 1372 scoped_refptr<FakeTiledLayer> scale_layer = |
(...skipping 25 matching lines...) Expand all Loading... |
1462 layer->draw_properties().visible_content_rect = | 1398 layer->draw_properties().visible_content_rect = |
1463 gfx::Rect(layer->content_bounds()); | 1399 gfx::Rect(layer->content_bounds()); |
1464 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1400 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1465 layer->SetTexturePriorities(priority_calculator_); | 1401 layer->SetTexturePriorities(priority_calculator_); |
1466 resource_manager_->PrioritizeTextures(); | 1402 resource_manager_->PrioritizeTextures(); |
1467 layer->SavePaintProperties(); | 1403 layer->SavePaintProperties(); |
1468 layer->Update(queue_.get(), &occluded); | 1404 layer->Update(queue_.get(), &occluded); |
1469 int visible_tiles1 = 6 * 6; | 1405 int visible_tiles1 = 6 * 6; |
1470 EXPECT_EQ(visible_tiles1, layer->fake_layer_updater()->update_count()); | 1406 EXPECT_EQ(visible_tiles1, layer->fake_layer_updater()->update_count()); |
1471 | 1407 |
1472 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1473 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1474 visible_tiles1 * 100 * 100, | |
1475 1); | |
1476 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1477 | |
1478 layer->fake_layer_updater()->ClearUpdateCount(); | 1408 layer->fake_layer_updater()->ClearUpdateCount(); |
1479 | 1409 |
1480 // The occlusion of 300x100 will be cover 3 tiles as tiles are 100x100 still. | 1410 // The occlusion of 300x100 will be cover 3 tiles as tiles are 100x100 still. |
1481 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); | 1411 occluded.SetOcclusion(gfx::Rect(200, 200, 300, 100)); |
1482 layer->draw_properties().drawable_content_rect = | 1412 layer->draw_properties().drawable_content_rect = |
1483 gfx::Rect(layer->bounds()); | 1413 gfx::Rect(layer->bounds()); |
1484 layer->draw_properties().visible_content_rect = | 1414 layer->draw_properties().visible_content_rect = |
1485 gfx::Rect(layer->content_bounds()); | 1415 gfx::Rect(layer->content_bounds()); |
1486 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1416 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1487 layer->SetTexturePriorities(priority_calculator_); | 1417 layer->SetTexturePriorities(priority_calculator_); |
1488 resource_manager_->PrioritizeTextures(); | 1418 resource_manager_->PrioritizeTextures(); |
1489 layer->SavePaintProperties(); | 1419 layer->SavePaintProperties(); |
1490 layer->Update(queue_.get(), &occluded); | 1420 layer->Update(queue_.get(), &occluded); |
1491 int visible_tiles2 = 6 * 6 - 3; | 1421 int visible_tiles2 = 6 * 6 - 3; |
1492 EXPECT_EQ(visible_tiles2, layer->fake_layer_updater()->update_count()); | 1422 EXPECT_EQ(visible_tiles2, layer->fake_layer_updater()->update_count()); |
1493 | 1423 |
1494 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1495 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1496 visible_tiles2 * 100 * 100 + | |
1497 visible_tiles1 * 100 * 100, | |
1498 1); | |
1499 EXPECT_EQ(3, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1500 | |
1501 layer->fake_layer_updater()->ClearUpdateCount(); | 1424 layer->fake_layer_updater()->ClearUpdateCount(); |
1502 | 1425 |
1503 // This makes sure content scaling and transforms work together. | 1426 // This makes sure content scaling and transforms work together. |
1504 // When the tiles are scaled down by half, they are 50x50 each in the | 1427 // When the tiles are scaled down by half, they are 50x50 each in the |
1505 // screen. | 1428 // screen. |
1506 gfx::Transform screen_transform; | 1429 gfx::Transform screen_transform; |
1507 screen_transform.Scale(0.5, 0.5); | 1430 screen_transform.Scale(0.5, 0.5); |
1508 layer->draw_properties().screen_space_transform = screen_transform; | 1431 layer->draw_properties().screen_space_transform = screen_transform; |
1509 layer->draw_properties().target_space_transform = screen_transform; | 1432 layer->draw_properties().target_space_transform = screen_transform; |
1510 | 1433 |
1511 // An occlusion of 150x100 will cover 3*2 = 6 tiles. | 1434 // An occlusion of 150x100 will cover 3*2 = 6 tiles. |
1512 occluded.SetOcclusion(gfx::Rect(100, 100, 150, 100)); | 1435 occluded.SetOcclusion(gfx::Rect(100, 100, 150, 100)); |
1513 | 1436 |
1514 gfx::Rect layer_bounds_rect(layer->bounds()); | 1437 gfx::Rect layer_bounds_rect(layer->bounds()); |
1515 layer->draw_properties().drawable_content_rect = | 1438 layer->draw_properties().drawable_content_rect = |
1516 gfx::ScaleToEnclosingRect(layer_bounds_rect, 0.5f); | 1439 gfx::ScaleToEnclosingRect(layer_bounds_rect, 0.5f); |
1517 layer->draw_properties().visible_content_rect = | 1440 layer->draw_properties().visible_content_rect = |
1518 gfx::Rect(layer->content_bounds()); | 1441 gfx::Rect(layer->content_bounds()); |
1519 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); | 1442 layer->InvalidateContentRect(gfx::Rect(0, 0, 600, 600)); |
1520 layer->SetTexturePriorities(priority_calculator_); | 1443 layer->SetTexturePriorities(priority_calculator_); |
1521 resource_manager_->PrioritizeTextures(); | 1444 resource_manager_->PrioritizeTextures(); |
1522 layer->SavePaintProperties(); | 1445 layer->SavePaintProperties(); |
1523 layer->Update(queue_.get(), &occluded); | 1446 layer->Update(queue_.get(), &occluded); |
1524 int visible_tiles3 = 6 * 6 - 6; | 1447 int visible_tiles3 = 6 * 6 - 6; |
1525 EXPECT_EQ(visible_tiles3, layer->fake_layer_updater()->update_count()); | 1448 EXPECT_EQ(visible_tiles3, layer->fake_layer_updater()->update_count()); |
1526 | |
1527 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1528 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1529 visible_tiles3 * 100 * 100 + | |
1530 visible_tiles2 * 100 * 100 + | |
1531 visible_tiles1 * 100 * 100, | |
1532 1); | |
1533 EXPECT_EQ(6 + 3, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1534 } | 1449 } |
1535 | 1450 |
1536 TEST_F(TiledLayerTest, VisibleContentOpaqueRegion) { | 1451 TEST_F(TiledLayerTest, VisibleContentOpaqueRegion) { |
1537 scoped_refptr<FakeTiledLayer> layer = | 1452 scoped_refptr<FakeTiledLayer> layer = |
1538 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 1453 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
1539 RenderSurfaceLayerList render_surface_layer_list; | 1454 RenderSurfaceLayerList render_surface_layer_list; |
1540 TestOcclusionTracker occluded; | 1455 TestOcclusionTracker occluded; |
1541 occlusion_ = &occluded; | 1456 occlusion_ = &occluded; |
1542 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | 1457 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); |
1543 | 1458 |
(...skipping 17 matching lines...) Expand all Loading... |
1561 // VisibleContentOpaqueRegion should be empty. | 1476 // VisibleContentOpaqueRegion should be empty. |
1562 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); | 1477 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); |
1563 layer->InvalidateContentRect(content_bounds); | 1478 layer->InvalidateContentRect(content_bounds); |
1564 layer->SetTexturePriorities(priority_calculator_); | 1479 layer->SetTexturePriorities(priority_calculator_); |
1565 resource_manager_->PrioritizeTextures(); | 1480 resource_manager_->PrioritizeTextures(); |
1566 layer->SavePaintProperties(); | 1481 layer->SavePaintProperties(); |
1567 layer->Update(queue_.get(), &occluded); | 1482 layer->Update(queue_.get(), &occluded); |
1568 opaque_contents = layer->VisibleContentOpaqueRegion(); | 1483 opaque_contents = layer->VisibleContentOpaqueRegion(); |
1569 EXPECT_TRUE(opaque_contents.IsEmpty()); | 1484 EXPECT_TRUE(opaque_contents.IsEmpty()); |
1570 | 1485 |
1571 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_painted(), 20000, 1); | |
1572 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1573 EXPECT_NEAR( | |
1574 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 20000, 1); | |
1575 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1576 | |
1577 // VisibleContentOpaqueRegion should match the visible part of what is painted | 1486 // VisibleContentOpaqueRegion should match the visible part of what is painted |
1578 // opaque. | 1487 // opaque. |
1579 opaque_paint_rect = gfx::Rect(10, 10, 90, 190); | 1488 opaque_paint_rect = gfx::Rect(10, 10, 90, 190); |
1580 layer->fake_layer_updater()->SetOpaquePaintRect(opaque_paint_rect); | 1489 layer->fake_layer_updater()->SetOpaquePaintRect(opaque_paint_rect); |
1581 layer->InvalidateContentRect(content_bounds); | 1490 layer->InvalidateContentRect(content_bounds); |
1582 layer->SetTexturePriorities(priority_calculator_); | 1491 layer->SetTexturePriorities(priority_calculator_); |
1583 resource_manager_->PrioritizeTextures(); | 1492 resource_manager_->PrioritizeTextures(); |
1584 layer->SavePaintProperties(); | 1493 layer->SavePaintProperties(); |
1585 layer->Update(queue_.get(), &occluded); | 1494 layer->Update(queue_.get(), &occluded); |
1586 UpdateTextures(); | 1495 UpdateTextures(); |
1587 opaque_contents = layer->VisibleContentOpaqueRegion(); | 1496 opaque_contents = layer->VisibleContentOpaqueRegion(); |
1588 EXPECT_EQ(gfx::IntersectRects(opaque_paint_rect, visible_bounds).ToString(), | 1497 EXPECT_EQ(gfx::IntersectRects(opaque_paint_rect, visible_bounds).ToString(), |
1589 opaque_contents.ToString()); | 1498 opaque_contents.ToString()); |
1590 | 1499 |
1591 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_painted(), 20000 * 2, 1); | |
1592 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 17100, 1); | |
1593 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1594 20000 + 20000 - 17100, | |
1595 1); | |
1596 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1597 | |
1598 // If we paint again without invalidating, the same stuff should be opaque. | 1500 // If we paint again without invalidating, the same stuff should be opaque. |
1599 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); | 1501 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); |
1600 layer->SetTexturePriorities(priority_calculator_); | 1502 layer->SetTexturePriorities(priority_calculator_); |
1601 resource_manager_->PrioritizeTextures(); | 1503 resource_manager_->PrioritizeTextures(); |
1602 layer->SavePaintProperties(); | 1504 layer->SavePaintProperties(); |
1603 layer->Update(queue_.get(), &occluded); | 1505 layer->Update(queue_.get(), &occluded); |
1604 UpdateTextures(); | 1506 UpdateTextures(); |
1605 opaque_contents = layer->VisibleContentOpaqueRegion(); | 1507 opaque_contents = layer->VisibleContentOpaqueRegion(); |
1606 EXPECT_EQ(gfx::IntersectRects(opaque_paint_rect, visible_bounds).ToString(), | 1508 EXPECT_EQ(gfx::IntersectRects(opaque_paint_rect, visible_bounds).ToString(), |
1607 opaque_contents.ToString()); | 1509 opaque_contents.ToString()); |
1608 | 1510 |
1609 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_painted(), 20000 * 2, 1); | |
1610 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 17100, 1); | |
1611 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1612 20000 + 20000 - 17100, | |
1613 1); | |
1614 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1615 | |
1616 // If we repaint a non-opaque part of the tile, then it shouldn't lose its | 1511 // If we repaint a non-opaque part of the tile, then it shouldn't lose its |
1617 // opaque-ness. And other tiles should not be affected. | 1512 // opaque-ness. And other tiles should not be affected. |
1618 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); | 1513 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); |
1619 layer->InvalidateContentRect(gfx::Rect(0, 0, 1, 1)); | 1514 layer->InvalidateContentRect(gfx::Rect(0, 0, 1, 1)); |
1620 layer->SetTexturePriorities(priority_calculator_); | 1515 layer->SetTexturePriorities(priority_calculator_); |
1621 resource_manager_->PrioritizeTextures(); | 1516 resource_manager_->PrioritizeTextures(); |
1622 layer->SavePaintProperties(); | 1517 layer->SavePaintProperties(); |
1623 layer->Update(queue_.get(), &occluded); | 1518 layer->Update(queue_.get(), &occluded); |
1624 UpdateTextures(); | 1519 UpdateTextures(); |
1625 opaque_contents = layer->VisibleContentOpaqueRegion(); | 1520 opaque_contents = layer->VisibleContentOpaqueRegion(); |
1626 EXPECT_EQ(gfx::IntersectRects(opaque_paint_rect, visible_bounds).ToString(), | 1521 EXPECT_EQ(gfx::IntersectRects(opaque_paint_rect, visible_bounds).ToString(), |
1627 opaque_contents.ToString()); | 1522 opaque_contents.ToString()); |
1628 | 1523 |
1629 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_painted(), 20000 * 2 + 1, 1); | |
1630 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 17100, 1); | |
1631 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1632 20000 + 20000 - 17100 + 1, | |
1633 1); | |
1634 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1635 | |
1636 // If we repaint an opaque part of the tile, then it should lose its | 1524 // If we repaint an opaque part of the tile, then it should lose its |
1637 // opaque-ness. But other tiles should still not be affected. | 1525 // opaque-ness. But other tiles should still not be affected. |
1638 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); | 1526 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); |
1639 layer->InvalidateContentRect(gfx::Rect(10, 10, 1, 1)); | 1527 layer->InvalidateContentRect(gfx::Rect(10, 10, 1, 1)); |
1640 layer->SetTexturePriorities(priority_calculator_); | 1528 layer->SetTexturePriorities(priority_calculator_); |
1641 resource_manager_->PrioritizeTextures(); | 1529 resource_manager_->PrioritizeTextures(); |
1642 layer->SavePaintProperties(); | 1530 layer->SavePaintProperties(); |
1643 layer->Update(queue_.get(), &occluded); | 1531 layer->Update(queue_.get(), &occluded); |
1644 UpdateTextures(); | 1532 UpdateTextures(); |
1645 opaque_contents = layer->VisibleContentOpaqueRegion(); | 1533 opaque_contents = layer->VisibleContentOpaqueRegion(); |
1646 EXPECT_EQ(gfx::IntersectRects(gfx::Rect(10, 100, 90, 100), | 1534 EXPECT_EQ(gfx::IntersectRects(gfx::Rect(10, 100, 90, 100), |
1647 visible_bounds).ToString(), | 1535 visible_bounds).ToString(), |
1648 opaque_contents.ToString()); | 1536 opaque_contents.ToString()); |
1649 | |
1650 EXPECT_NEAR( | |
1651 occluded.overdraw_metrics()->pixels_painted(), 20000 * 2 + 1 + 1, 1); | |
1652 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 17100, 1); | |
1653 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1654 20000 + 20000 - 17100 + 1 + 1, | |
1655 1); | |
1656 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1657 } | |
1658 | |
1659 TEST_F(TiledLayerTest, PixelsPaintedMetrics) { | |
1660 scoped_refptr<FakeTiledLayer> layer = | |
1661 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | |
1662 RenderSurfaceLayerList render_surface_layer_list; | |
1663 TestOcclusionTracker occluded; | |
1664 occlusion_ = &occluded; | |
1665 layer_tree_host_->SetViewportSize(gfx::Size(1000, 1000)); | |
1666 | |
1667 layer_tree_host_->root_layer()->AddChild(layer); | |
1668 | |
1669 // The tile size is 100x100, so this invalidates and then paints two tiles in | |
1670 // various ways. | |
1671 | |
1672 gfx::Rect opaque_paint_rect; | |
1673 Region opaque_contents; | |
1674 | |
1675 gfx::Rect content_bounds = gfx::Rect(0, 0, 100, 300); | |
1676 layer->SetBounds(content_bounds.size()); | |
1677 CalcDrawProps(&render_surface_layer_list); | |
1678 | |
1679 // Invalidates and paints the whole layer. | |
1680 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); | |
1681 layer->InvalidateContentRect(content_bounds); | |
1682 layer->SetTexturePriorities(priority_calculator_); | |
1683 resource_manager_->PrioritizeTextures(); | |
1684 layer->SavePaintProperties(); | |
1685 layer->Update(queue_.get(), &occluded); | |
1686 UpdateTextures(); | |
1687 opaque_contents = layer->VisibleContentOpaqueRegion(); | |
1688 EXPECT_TRUE(opaque_contents.IsEmpty()); | |
1689 | |
1690 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_painted(), 30000, 1); | |
1691 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1692 EXPECT_NEAR( | |
1693 occluded.overdraw_metrics()->pixels_uploaded_translucent(), 30000, 1); | |
1694 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1695 | |
1696 // Invalidates an area on the top and bottom tile, which will cause us to | |
1697 // paint the tile in the middle, even though it is not dirty and will not be | |
1698 // uploaded. | |
1699 layer->fake_layer_updater()->SetOpaquePaintRect(gfx::Rect()); | |
1700 layer->InvalidateContentRect(gfx::Rect(0, 0, 1, 1)); | |
1701 layer->InvalidateContentRect(gfx::Rect(50, 200, 10, 10)); | |
1702 layer->SetTexturePriorities(priority_calculator_); | |
1703 resource_manager_->PrioritizeTextures(); | |
1704 layer->SavePaintProperties(); | |
1705 layer->Update(queue_.get(), &occluded); | |
1706 UpdateTextures(); | |
1707 opaque_contents = layer->VisibleContentOpaqueRegion(); | |
1708 EXPECT_TRUE(opaque_contents.IsEmpty()); | |
1709 | |
1710 // The middle tile was painted even though not invalidated. | |
1711 EXPECT_NEAR( | |
1712 occluded.overdraw_metrics()->pixels_painted(), 30000 + 60 * 210, 1); | |
1713 // The pixels uploaded will not include the non-invalidated tile in the | |
1714 // middle. | |
1715 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_opaque(), 0, 1); | |
1716 EXPECT_NEAR(occluded.overdraw_metrics()->pixels_uploaded_translucent(), | |
1717 30000 + 1 + 100, | |
1718 1); | |
1719 EXPECT_EQ(0, occluded.overdraw_metrics()->tiles_culled_for_upload()); | |
1720 } | 1537 } |
1721 | 1538 |
1722 TEST_F(TiledLayerTest, DontAllocateContentsWhenTargetSurfaceCantBeAllocated) { | 1539 TEST_F(TiledLayerTest, DontAllocateContentsWhenTargetSurfaceCantBeAllocated) { |
1723 // Tile size is 100x100. | 1540 // Tile size is 100x100. |
1724 gfx::Rect root_rect(0, 0, 300, 200); | 1541 gfx::Rect root_rect(0, 0, 300, 200); |
1725 gfx::Rect child_rect(0, 0, 300, 100); | 1542 gfx::Rect child_rect(0, 0, 300, 100); |
1726 gfx::Rect child2_rect(0, 100, 300, 100); | 1543 gfx::Rect child2_rect(0, 100, 300, 100); |
1727 | 1544 |
1728 scoped_refptr<FakeTiledLayer> root = make_scoped_refptr( | 1545 scoped_refptr<FakeTiledLayer> root = make_scoped_refptr( |
1729 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); | 1546 new FakeTiledLayer(layer_tree_host_->contents_texture_manager())); |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1995 // Invalidate the entire layer in layer space. When painting, the rect given | 1812 // Invalidate the entire layer in layer space. When painting, the rect given |
1996 // to webkit should match the layer's bounds. | 1813 // to webkit should match the layer's bounds. |
1997 layer->SetNeedsDisplayRect(layer_rect); | 1814 layer->SetNeedsDisplayRect(layer_rect); |
1998 layer->Update(queue_.get(), NULL); | 1815 layer->Update(queue_.get(), NULL); |
1999 | 1816 |
2000 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); | 1817 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); |
2001 } | 1818 } |
2002 | 1819 |
2003 } // namespace | 1820 } // namespace |
2004 } // namespace cc | 1821 } // namespace cc |
OLD | NEW |