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

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

Issue 195803003: cc: Remove OverdrawMetrics and --trace-overdraw flag. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm-overdraw: switches Created 6 years, 9 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
« no previous file with comments | « cc/layers/tiled_layer.cc ('k') | cc/layers/ui_resource_layer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/layers/tiled_layer.cc ('k') | cc/layers/ui_resource_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698