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

Side by Side Diff: cc/trees/damage_tracker_unittest.cc

Issue 12662021: cc: Don't draw and swap if the frame will not change. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 8 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/trees/damage_tracker.cc ('k') | cc/trees/layer_tree_host_impl.h » ('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/trees/damage_tracker.h" 5 #include "cc/trees/damage_tracker.h"
6 6
7 #include "cc/base/math_util.h" 7 #include "cc/base/math_util.h"
8 #include "cc/layers/layer_impl.h" 8 #include "cc/layers/layer_impl.h"
9 #include "cc/test/fake_impl_proxy.h" 9 #include "cc/test/fake_impl_proxy.h"
10 #include "cc/test/fake_layer_tree_host_impl.h" 10 #include "cc/test/fake_layer_tree_host_impl.h"
(...skipping 1244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 ClearDamageForAllSurfaces(root.get()); 1255 ClearDamageForAllSurfaces(root.get());
1256 replica_mask_layer->SetStackingOrderChanged(true); 1256 replica_mask_layer->SetStackingOrderChanged(true);
1257 1257
1258 EmulateDrawingOneFrame(root.get()); 1258 EmulateDrawingOneFrame(root.get());
1259 1259
1260 gfx::RectF child_damage_rect = 1260 gfx::RectF child_damage_rect =
1261 child1->render_surface()->damage_tracker()->current_damage_rect(); 1261 child1->render_surface()->damage_tracker()->current_damage_rect();
1262 EXPECT_FLOAT_RECT_EQ(gfx::RectF(206.f, 200.f, 6.f, 8.f), child_damage_rect); 1262 EXPECT_FLOAT_RECT_EQ(gfx::RectF(206.f, 200.f, 6.f, 8.f), child_damage_rect);
1263 } 1263 }
1264 1264
1265 TEST_F(DamageTrackerTest, VerifyDamageWhenForcedFullDamage) { 1265 TEST_F(DamageTrackerTest, DamageWhenAddedExternally) {
1266 scoped_ptr<LayerImpl> root = CreateAndSetUpTestTreeWithOneSurface(); 1266 scoped_ptr<LayerImpl> root = CreateAndSetUpTestTreeWithOneSurface();
1267 LayerImpl* child = root->children()[0]; 1267 LayerImpl* child = root->children()[0];
1268 1268
1269 // Case 1: This test ensures that when the tracker is forced to have full 1269 // Case 1: This test ensures that when the tracker is given damage, that
1270 // damage, that it takes priority over any other partial damage. 1270 // it is included with any other partial damage.
1271 // 1271 //
1272 ClearDamageForAllSurfaces(root.get()); 1272 ClearDamageForAllSurfaces(root.get());
1273 child->set_update_rect(gfx::RectF(10.f, 11.f, 12.f, 13.f)); 1273 child->set_update_rect(gfx::RectF(10, 11, 12, 13));
1274 root->render_surface()->damage_tracker()->ForceFullDamageNextUpdate(); 1274 root->render_surface()->damage_tracker()->AddDamageNextUpdate(
1275 gfx::RectF(15, 16, 32, 33));
1275 EmulateDrawingOneFrame(root.get()); 1276 EmulateDrawingOneFrame(root.get());
1276 gfx::RectF root_damage_rect = 1277 gfx::RectF root_damage_rect =
1277 root->render_surface()->damage_tracker()->current_damage_rect(); 1278 root->render_surface()->damage_tracker()->current_damage_rect();
1278 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0.f, 0.f, 500.f, 500.f), root_damage_rect); 1279 EXPECT_FLOAT_RECT_EQ(
1280 gfx::UnionRects(gfx::RectF(15, 16, 32, 33),
1281 gfx::RectF(100+10, 100+11, 12, 13)),
1282 root_damage_rect);
1279 1283
1280 // Case 2: An additional sanity check that forcing full damage works even 1284 // Case 2: An additional sanity check that adding damage works even when
1281 // when nothing on the layer tree changed. 1285 // nothing on the layer tree changed.
1282 // 1286 //
1283 ClearDamageForAllSurfaces(root.get()); 1287 ClearDamageForAllSurfaces(root.get());
1284 root->render_surface()->damage_tracker()->ForceFullDamageNextUpdate(); 1288 root->render_surface()->damage_tracker()->AddDamageNextUpdate(
1289 gfx::RectF(30, 31, 14, 15));
1285 EmulateDrawingOneFrame(root.get()); 1290 EmulateDrawingOneFrame(root.get());
1286 root_damage_rect = 1291 root_damage_rect =
1287 root->render_surface()->damage_tracker()->current_damage_rect(); 1292 root->render_surface()->damage_tracker()->current_damage_rect();
1288 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0.f, 0.f, 500.f, 500.f), root_damage_rect); 1293 EXPECT_FLOAT_RECT_EQ(gfx::RectF(30, 31, 14, 15), root_damage_rect);
1289 } 1294 }
1290 1295
1291 TEST_F(DamageTrackerTest, VerifyDamageForEmptyLayerList) { 1296 TEST_F(DamageTrackerTest, VerifyDamageForEmptyLayerList) {
1292 // Though it should never happen, its a good idea to verify that the damage 1297 // Though it should never happen, its a good idea to verify that the damage
1293 // tracker does not crash when it receives an empty layer_list. 1298 // tracker does not crash when it receives an empty layer_list.
1294 1299
1295 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_.active_tree(), 1); 1300 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_.active_tree(), 1);
1296 root->CreateRenderSurface(); 1301 root->CreateRenderSurface();
1297 1302
1298 ASSERT_TRUE(root == root->render_target()); 1303 ASSERT_TRUE(root == root->render_target());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 // Damage should remain empty even after one frame, since there's yet no new 1350 // Damage should remain empty even after one frame, since there's yet no new
1346 // damage. 1351 // damage.
1347 EmulateDrawingOneFrame(root.get()); 1352 EmulateDrawingOneFrame(root.get());
1348 root_damage_rect = 1353 root_damage_rect =
1349 root->render_surface()->damage_tracker()->current_damage_rect(); 1354 root->render_surface()->damage_tracker()->current_damage_rect();
1350 EXPECT_TRUE(root_damage_rect.IsEmpty()); 1355 EXPECT_TRUE(root_damage_rect.IsEmpty());
1351 } 1356 }
1352 1357
1353 } // namespace 1358 } // namespace
1354 } // namespace cc 1359 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/damage_tracker.cc ('k') | cc/trees/layer_tree_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698