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

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

Issue 18191020: UI Resource Manager (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Added DCHECK of resource queue size to PushPropertiesTo Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 13 matching lines...) Expand all
24 #include "cc/resources/prioritized_resource_manager.h" 24 #include "cc/resources/prioritized_resource_manager.h"
25 #include "cc/resources/resource_update_queue.h" 25 #include "cc/resources/resource_update_queue.h"
26 #include "cc/scheduler/frame_rate_controller.h" 26 #include "cc/scheduler/frame_rate_controller.h"
27 #include "cc/test/fake_content_layer.h" 27 #include "cc/test/fake_content_layer.h"
28 #include "cc/test/fake_content_layer_client.h" 28 #include "cc/test/fake_content_layer_client.h"
29 #include "cc/test/fake_layer_tree_host_client.h" 29 #include "cc/test/fake_layer_tree_host_client.h"
30 #include "cc/test/fake_output_surface.h" 30 #include "cc/test/fake_output_surface.h"
31 #include "cc/test/fake_picture_layer.h" 31 #include "cc/test/fake_picture_layer.h"
32 #include "cc/test/fake_picture_layer_impl.h" 32 #include "cc/test/fake_picture_layer_impl.h"
33 #include "cc/test/fake_proxy.h" 33 #include "cc/test/fake_proxy.h"
34 #include "cc/test/fake_scoped_ui_resource.h"
34 #include "cc/test/fake_scrollbar_layer.h" 35 #include "cc/test/fake_scrollbar_layer.h"
35 #include "cc/test/geometry_test_utils.h" 36 #include "cc/test/geometry_test_utils.h"
36 #include "cc/test/layer_tree_test.h" 37 #include "cc/test/layer_tree_test.h"
37 #include "cc/test/occlusion_tracker_test_common.h" 38 #include "cc/test/occlusion_tracker_test_common.h"
38 #include "cc/trees/layer_tree_host_impl.h" 39 #include "cc/trees/layer_tree_host_impl.h"
39 #include "cc/trees/layer_tree_impl.h" 40 #include "cc/trees/layer_tree_impl.h"
40 #include "cc/trees/single_thread_proxy.h" 41 #include "cc/trees/single_thread_proxy.h"
41 #include "cc/trees/thread_proxy.h" 42 #include "cc/trees/thread_proxy.h"
42 #include "gpu/GLES2/gl2extchromium.h" 43 #include "gpu/GLES2/gl2extchromium.h"
43 #include "skia/ext/refptr.h" 44 #include "skia/ext/refptr.h"
(...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 1101
1101 private: 1102 private:
1102 FakeContentLayerClient client_; 1103 FakeContentLayerClient client_;
1103 scoped_refptr<NoScaleContentLayer> root_layer_; 1104 scoped_refptr<NoScaleContentLayer> root_layer_;
1104 scoped_refptr<ContentLayer> child_layer_; 1105 scoped_refptr<ContentLayer> child_layer_;
1105 }; 1106 };
1106 1107
1107 MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers); 1108 MULTI_THREAD_TEST_F(LayerTreeHostTestDeviceScaleFactorScalesViewportAndLayers);
1108 1109
1109 // Verify atomicity of commits and reuse of textures. 1110 // Verify atomicity of commits and reuse of textures.
1110 class LayerTreeHostTestAtomicCommit : public LayerTreeHostTest { 1111 class LayerTreeHostTestDirectRendererAtomicCommit : public LayerTreeHostTest {
1111 public: 1112 public:
1112 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 1113 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
1113 // Make sure partial texture updates are turned off. 1114 // Make sure partial texture updates are turned off.
1114 settings->max_partial_texture_updates = 0; 1115 settings->max_partial_texture_updates = 0;
1115 // Linear fade animator prevents scrollbars from drawing immediately. 1116 // Linear fade animator prevents scrollbars from drawing immediately.
1116 settings->use_linear_fade_scrollbar_animator = false; 1117 settings->use_linear_fade_scrollbar_animator = false;
1117 } 1118 }
1118 1119
1119 virtual void SetupTree() OVERRIDE { 1120 virtual void SetupTree() OVERRIDE {
1120 layer_ = FakeContentLayer::Create(&client_); 1121 layer_ = FakeContentLayer::Create(&client_);
(...skipping 30 matching lines...) Expand all
1151 // Number of textures used for commit should be one for each layer. 1152 // Number of textures used for commit should be one for each layer.
1152 EXPECT_EQ(2u, context->NumUsedTextures()); 1153 EXPECT_EQ(2u, context->NumUsedTextures());
1153 // Verify that used texture is correct. 1154 // Verify that used texture is correct.
1154 EXPECT_TRUE(context->UsedTexture(context->TextureAt(0))); 1155 EXPECT_TRUE(context->UsedTexture(context->TextureAt(0)));
1155 EXPECT_TRUE(context->UsedTexture(context->TextureAt(1))); 1156 EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
1156 1157
1157 context->ResetUsedTextures(); 1158 context->ResetUsedTextures();
1158 PostSetNeedsCommitToMainThread(); 1159 PostSetNeedsCommitToMainThread();
1159 break; 1160 break;
1160 case 1: 1161 case 1:
1161 // Number of textures should be doubled as the first textures 1162 // Number of textures should be one for scrollbar layer since it was
1162 // are used by impl thread and cannot by used for update. 1163 // requested and deleted on the impl-thread, and double for the content
1163 ASSERT_EQ(4u, context->NumTextures()); 1164 // layer since its first texture is used by impl thread and cannot by
1164 // Number of textures used for commit should still be 1165 // used for update.
1165 // one for each layer. 1166 ASSERT_EQ(3u, context->NumTextures());
1167 // Number of textures used for commit should be one for each layer.
1166 EXPECT_EQ(2u, context->NumUsedTextures()); 1168 EXPECT_EQ(2u, context->NumUsedTextures());
1167 // First textures should not have been used. 1169 // First textures should not have been used.
1168 EXPECT_FALSE(context->UsedTexture(context->TextureAt(0))); 1170 EXPECT_FALSE(context->UsedTexture(context->TextureAt(0)));
1169 EXPECT_FALSE(context->UsedTexture(context->TextureAt(1))); 1171 EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
1170 // New textures should have been used. 1172 // New textures should have been used.
1171 EXPECT_TRUE(context->UsedTexture(context->TextureAt(2))); 1173 EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
1172 EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
1173
1174 context->ResetUsedTextures(); 1174 context->ResetUsedTextures();
1175 PostSetNeedsCommitToMainThread(); 1175 PostSetNeedsCommitToMainThread();
1176 break; 1176 break;
1177 case 2: 1177 case 2:
1178 EndTest(); 1178 EndTest();
1179 break; 1179 break;
1180 default: 1180 default:
1181 NOTREACHED(); 1181 NOTREACHED();
1182 break; 1182 break;
1183 } 1183 }
(...skipping 14 matching lines...) Expand all
1198 context->ResetUsedTextures(); 1198 context->ResetUsedTextures();
1199 } 1199 }
1200 1200
1201 virtual void Layout() OVERRIDE { 1201 virtual void Layout() OVERRIDE {
1202 layer_->SetNeedsDisplay(); 1202 layer_->SetNeedsDisplay();
1203 scrollbar_->SetNeedsDisplay(); 1203 scrollbar_->SetNeedsDisplay();
1204 } 1204 }
1205 1205
1206 virtual void AfterTest() OVERRIDE {} 1206 virtual void AfterTest() OVERRIDE {}
1207 1207
1208 private: 1208 protected:
1209 FakeContentLayerClient client_; 1209 FakeContentLayerClient client_;
1210 scoped_refptr<FakeContentLayer> layer_; 1210 scoped_refptr<FakeContentLayer> layer_;
1211 scoped_refptr<FakeScrollbarLayer> scrollbar_; 1211 scoped_refptr<FakeScrollbarLayer> scrollbar_;
1212 int drew_frame_; 1212 int drew_frame_;
1213 }; 1213 };
1214 1214
1215 MULTI_THREAD_TEST_F(LayerTreeHostTestAtomicCommit); 1215 MULTI_THREAD_DIRECT_RENDERER_TEST_F(
1216 LayerTreeHostTestDirectRendererAtomicCommit);
1217
1218 class LayerTreeHostTestDelegatingRendererAtomicCommit
1219 : public LayerTreeHostTestDirectRendererAtomicCommit {
1220 public:
1221 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1222 ASSERT_EQ(0u, layer_tree_host()->settings().max_partial_texture_updates);
1223
1224 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>(
1225 impl->output_surface()->context3d());
1226
1227 switch (impl->active_tree()->source_frame_number()) {
1228 case 0:
1229 // Number of textures should be one for each layer
1230 ASSERT_EQ(2u, context->NumTextures());
1231 // Number of textures used for commit should be one for each layer.
1232 EXPECT_EQ(2u, context->NumUsedTextures());
1233 // Verify that used texture is correct.
1234 EXPECT_TRUE(context->UsedTexture(context->TextureAt(0)));
1235 EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
1236 context->ResetUsedTextures();
1237 PostSetNeedsCommitToMainThread();
1238 break;
1239 case 1:
1240 // Number of textures should be doubled as the first context layer
1241 // texture is being used by the impl-thread and cannot be used for
1242 // update. The scrollbar behavior is different direct renderer because
1243 // UI resource deletion with delegating renderer occurs after tree
1244 // activation.
1245 ASSERT_EQ(4u, context->NumTextures());
1246 // Number of textures used for commit should still be
1247 // one for each layer.
1248 EXPECT_EQ(2u, context->NumUsedTextures());
1249 // First textures should not have been used.
1250 EXPECT_FALSE(context->UsedTexture(context->TextureAt(0)));
1251 EXPECT_FALSE(context->UsedTexture(context->TextureAt(1)));
1252 // New textures should have been used.
1253 EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
1254 EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
1255 context->ResetUsedTextures();
1256 PostSetNeedsCommitToMainThread();
1257 break;
1258 case 2:
1259 EndTest();
1260 break;
1261 default:
1262 NOTREACHED();
1263 break;
1264 }
1265 }
1266 };
1267
1268 MULTI_THREAD_DELEGATING_RENDERER_TEST_F(
1269 LayerTreeHostTestDelegatingRendererAtomicCommit);
1216 1270
1217 static void SetLayerPropertiesForTesting(Layer* layer, 1271 static void SetLayerPropertiesForTesting(Layer* layer,
1218 Layer* parent, 1272 Layer* parent,
1219 const gfx::Transform& transform, 1273 const gfx::Transform& transform,
1220 gfx::PointF anchor, 1274 gfx::PointF anchor,
1221 gfx::PointF position, 1275 gfx::PointF position,
1222 gfx::Size bounds, 1276 gfx::Size bounds,
1223 bool opaque) { 1277 bool opaque) {
1224 layer->RemoveAllChildren(); 1278 layer->RemoveAllChildren();
1225 if (parent) 1279 if (parent)
1226 parent->AddChild(layer); 1280 parent->AddChild(layer);
1227 layer->SetTransform(transform); 1281 layer->SetTransform(transform);
1228 layer->SetAnchorPoint(anchor); 1282 layer->SetAnchorPoint(anchor);
1229 layer->SetPosition(position); 1283 layer->SetPosition(position);
1230 layer->SetBounds(bounds); 1284 layer->SetBounds(bounds);
1231 layer->SetContentsOpaque(opaque); 1285 layer->SetContentsOpaque(opaque);
1232 } 1286 }
1233 1287
1234 class LayerTreeHostTestAtomicCommitWithPartialUpdate 1288 class LayerTreeHostTestAtomicCommitWithPartialUpdate
1235 : public LayerTreeHostTest { 1289 : public LayerTreeHostTest {
1236 public: 1290 public:
1237 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 1291 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
1238 // Allow one partial texture update. 1292 // Allow one partial texture update.
1239 settings->max_partial_texture_updates = 1; 1293 settings->max_partial_texture_updates = 1;
1240 // Linear fade animator prevents scrollbars from drawing immediately.
1241 settings->use_linear_fade_scrollbar_animator = false;
1242 // No partial updates when impl side painting is enabled. 1294 // No partial updates when impl side painting is enabled.
1243 settings->impl_side_painting = false; 1295 settings->impl_side_painting = false;
1244 } 1296 }
1245 1297
1246 virtual void SetupTree() OVERRIDE { 1298 virtual void SetupTree() OVERRIDE {
1247 parent_ = FakeContentLayer::Create(&client_); 1299 parent_ = FakeContentLayer::Create(&client_);
1248 parent_->SetBounds(gfx::Size(10, 20)); 1300 parent_->SetBounds(gfx::Size(10, 20));
1249 1301
1250 child_ = FakeContentLayer::Create(&client_); 1302 child_ = FakeContentLayer::Create(&client_);
1251 child_->SetPosition(gfx::Point(0, 10)); 1303 child_->SetPosition(gfx::Point(0, 10));
1252 child_->SetBounds(gfx::Size(3, 10)); 1304 child_->SetBounds(gfx::Size(3, 10));
1253 1305
1254 bool paint_scrollbar = true;
1255 bool has_thumb = false;
1256 scrollbar_with_paints_ =
1257 FakeScrollbarLayer::Create(paint_scrollbar, has_thumb, parent_->id());
1258 scrollbar_with_paints_->SetPosition(gfx::Point(3, 10));
1259 scrollbar_with_paints_->SetBounds(gfx::Size(3, 10));
1260
1261 paint_scrollbar = false;
1262 scrollbar_without_paints_ =
1263 FakeScrollbarLayer::Create(paint_scrollbar, has_thumb, parent_->id());
1264 scrollbar_without_paints_->SetPosition(gfx::Point(6, 10));
1265 scrollbar_without_paints_->SetBounds(gfx::Size(3, 10));
1266
1267 parent_->AddChild(child_); 1306 parent_->AddChild(child_);
1268 parent_->AddChild(scrollbar_with_paints_);
1269 parent_->AddChild(scrollbar_without_paints_);
1270 1307
1271 layer_tree_host()->SetRootLayer(parent_); 1308 layer_tree_host()->SetRootLayer(parent_);
1272 LayerTreeHostTest::SetupTree(); 1309 LayerTreeHostTest::SetupTree();
1273 } 1310 }
1274 1311
1275 virtual void BeginTest() OVERRIDE { 1312 virtual void BeginTest() OVERRIDE {
1276 PostSetNeedsCommitToMainThread(); 1313 PostSetNeedsCommitToMainThread();
1277 } 1314 }
1278 1315
1279 virtual void DidCommitAndDrawFrame() OVERRIDE { 1316 virtual void DidCommitAndDrawFrame() OVERRIDE {
1280 switch (layer_tree_host()->source_frame_number()) { 1317 switch (layer_tree_host()->source_frame_number()) {
1281 case 1: 1318 case 1:
1282 parent_->SetNeedsDisplay(); 1319 parent_->SetNeedsDisplay();
1283 child_->SetNeedsDisplay(); 1320 child_->SetNeedsDisplay();
1284 scrollbar_with_paints_->SetNeedsDisplay();
1285 scrollbar_without_paints_->SetNeedsDisplay();
1286 break; 1321 break;
1287 case 2: 1322 case 2:
1288 // Damage part of layers. 1323 // Damage part of layers.
1289 parent_->SetNeedsDisplayRect(gfx::RectF(0.f, 0.f, 5.f, 5.f)); 1324 parent_->SetNeedsDisplayRect(gfx::RectF(0.f, 0.f, 5.f, 5.f));
1290 child_->SetNeedsDisplayRect(gfx::RectF(0.f, 0.f, 5.f, 5.f)); 1325 child_->SetNeedsDisplayRect(gfx::RectF(0.f, 0.f, 5.f, 5.f));
1291 scrollbar_with_paints_->SetNeedsDisplayRect(
1292 gfx::RectF(0.f, 0.f, 5.f, 5.f));
1293 scrollbar_without_paints_->SetNeedsDisplayRect(
1294 gfx::RectF(0.f, 0.f, 5.f, 5.f));
1295 break; 1326 break;
1296 case 3: 1327 case 3:
1297 child_->SetNeedsDisplay(); 1328 child_->SetNeedsDisplay();
1298 scrollbar_with_paints_->SetNeedsDisplay();
1299 scrollbar_without_paints_->SetNeedsDisplay();
1300 layer_tree_host()->SetViewportSize(gfx::Size(10, 10)); 1329 layer_tree_host()->SetViewportSize(gfx::Size(10, 10));
1301 break; 1330 break;
1302 case 4: 1331 case 4:
1303 layer_tree_host()->SetViewportSize(gfx::Size(10, 20)); 1332 layer_tree_host()->SetViewportSize(gfx::Size(10, 20));
1304 break; 1333 break;
1305 case 5: 1334 case 5:
1306 EndTest(); 1335 EndTest();
1307 break; 1336 break;
1308 default: 1337 default:
1309 NOTREACHED() << layer_tree_host()->source_frame_number(); 1338 NOTREACHED() << layer_tree_host()->source_frame_number();
1310 break; 1339 break;
1311 } 1340 }
1312 } 1341 }
1313 1342
1314 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { 1343 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1315 ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates); 1344 ASSERT_EQ(1u, layer_tree_host()->settings().max_partial_texture_updates);
1316 1345
1317 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>( 1346 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>(
1318 impl->output_surface()->context3d()); 1347 impl->output_surface()->context3d());
1319 1348
1320 switch (impl->active_tree()->source_frame_number()) { 1349 switch (impl->active_tree()->source_frame_number()) {
1321 case 0: 1350 case 0:
1322 // Number of textures should be one for each layer. 1351 // Number of textures should be one for each layer.
1323 ASSERT_EQ(4u, context->NumTextures()); 1352 ASSERT_EQ(2u, context->NumTextures());
1324 // Number of textures used for commit should be one for each layer. 1353 // Number of textures used for commit should be one for each layer.
1325 EXPECT_EQ(4u, context->NumUsedTextures()); 1354 EXPECT_EQ(2u, context->NumUsedTextures());
1326 // Verify that used textures are correct. 1355 // Verify that used textures are correct.
1327 EXPECT_TRUE(context->UsedTexture(context->TextureAt(0))); 1356 EXPECT_TRUE(context->UsedTexture(context->TextureAt(0)));
1328 EXPECT_TRUE(context->UsedTexture(context->TextureAt(1))); 1357 EXPECT_TRUE(context->UsedTexture(context->TextureAt(1)));
1358 context->ResetUsedTextures();
1359 break;
1360 case 1:
1361 // Number of textures should be two for each content layer.
1362 ASSERT_EQ(4u, context->NumTextures());
1363 // Number of textures used for commit should be one for each content
1364 // layer.
1365 EXPECT_EQ(2u, context->NumUsedTextures());
1366
1367 // First content textures should not have been used.
1368 EXPECT_FALSE(context->UsedTexture(context->TextureAt(0)));
1369 EXPECT_FALSE(context->UsedTexture(context->TextureAt(1)));
1370 // New textures should have been used.
1329 EXPECT_TRUE(context->UsedTexture(context->TextureAt(2))); 1371 EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
1330 EXPECT_TRUE(context->UsedTexture(context->TextureAt(3))); 1372 EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
1331 1373
1332 context->ResetUsedTextures(); 1374 context->ResetUsedTextures();
1333 break; 1375 break;
1334 case 1: 1376 case 2:
1335 // Number of textures should be two for each content layer and one 1377 // Number of textures should be two for each content layer.
1336 // for each scrollbar, since they always do a partial update. 1378 ASSERT_EQ(4u, context->NumTextures());
1337 ASSERT_EQ(6u, context->NumTextures());
1338 // Number of textures used for commit should be one for each content 1379 // Number of textures used for commit should be one for each content
1339 // layer, and one for the scrollbar layer that paints. 1380 // layer.
1340 EXPECT_EQ(3u, context->NumUsedTextures()); 1381 EXPECT_EQ(2u, context->NumUsedTextures());
1341 1382
1342 // First content textures should not have been used. 1383 // One content layer does a partial update also.
1343 EXPECT_FALSE(context->UsedTexture(context->TextureAt(0))); 1384 EXPECT_TRUE(context->UsedTexture(context->TextureAt(2)));
1344 EXPECT_FALSE(context->UsedTexture(context->TextureAt(1))); 1385 EXPECT_FALSE(context->UsedTexture(context->TextureAt(3)));
1345 // The non-painting scrollbar's texture wasn't updated.
1346 EXPECT_FALSE(context->UsedTexture(context->TextureAt(2)));
1347 // The painting scrollbar's partial update texture was used.
1348 EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
1349 // New textures should have been used.
1350 EXPECT_TRUE(context->UsedTexture(context->TextureAt(4)));
1351 EXPECT_TRUE(context->UsedTexture(context->TextureAt(5)));
1352 1386
1353 context->ResetUsedTextures(); 1387 context->ResetUsedTextures();
1354 break; 1388 break;
1355 case 2:
1356 // Number of textures should be two for each content layer and one
1357 // for each scrollbar, since they always do a partial update.
1358 ASSERT_EQ(6u, context->NumTextures());
1359 // Number of textures used for commit should be one for each content
1360 // layer, and one for the scrollbar layer that paints.
1361 EXPECT_EQ(3u, context->NumUsedTextures());
1362
1363 // The non-painting scrollbar's texture wasn't updated.
1364 EXPECT_FALSE(context->UsedTexture(context->TextureAt(2)));
1365 // The painting scrollbar does a partial update.
1366 EXPECT_TRUE(context->UsedTexture(context->TextureAt(3)));
1367 // One content layer does a partial update also.
1368 EXPECT_TRUE(context->UsedTexture(context->TextureAt(4)));
1369 EXPECT_FALSE(context->UsedTexture(context->TextureAt(5)));
1370
1371 context->ResetUsedTextures();
1372 break;
1373 case 3: 1389 case 3:
1374 // No textures should be used for commit. 1390 // No textures should be used for commit.
1375 EXPECT_EQ(0u, context->NumUsedTextures()); 1391 EXPECT_EQ(0u, context->NumUsedTextures());
1376 1392
1377 context->ResetUsedTextures(); 1393 context->ResetUsedTextures();
1378 break; 1394 break;
1379 case 4: 1395 case 4:
1380 // Number of textures used for commit should be two. One for the 1396 // Number of textures used for commit should be one, for the
1381 // content layer, and one for the painting scrollbar. The 1397 // content layer.
1382 // non-painting scrollbar doesn't update its texture. 1398 EXPECT_EQ(1u, context->NumUsedTextures());
1383 EXPECT_EQ(2u, context->NumUsedTextures());
1384 1399
1385 context->ResetUsedTextures(); 1400 context->ResetUsedTextures();
1386 break; 1401 break;
1387 default: 1402 default:
1388 NOTREACHED(); 1403 NOTREACHED();
1389 break; 1404 break;
1390 } 1405 }
1391 } 1406 }
1392 1407
1393 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { 1408 virtual void DrawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1394 EXPECT_LT(impl->active_tree()->source_frame_number(), 5); 1409 EXPECT_LT(impl->active_tree()->source_frame_number(), 5);
1395 1410
1396 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>( 1411 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>(
1397 impl->output_surface()->context3d()); 1412 impl->output_surface()->context3d());
1398 1413
1399 // Number of textures used for drawing should one per layer except for 1414 // Number of textures used for drawing should one per layer except for
1400 // frame 3 where the viewport only contains one layer. 1415 // frame 3 where the viewport only contains one layer.
1401 if (impl->active_tree()->source_frame_number() == 3) { 1416 if (impl->active_tree()->source_frame_number() == 3) {
1402 EXPECT_EQ(1u, context->NumUsedTextures()); 1417 EXPECT_EQ(1u, context->NumUsedTextures());
1403 } else { 1418 } else {
1404 EXPECT_EQ(4u, context->NumUsedTextures()) << 1419 EXPECT_EQ(2u, context->NumUsedTextures()) <<
1405 "For frame " << impl->active_tree()->source_frame_number(); 1420 "For frame " << impl->active_tree()->source_frame_number();
1406 } 1421 }
1407 1422
1408 context->ResetUsedTextures(); 1423 context->ResetUsedTextures();
1409 } 1424 }
1410 1425
1411 virtual void AfterTest() OVERRIDE {} 1426 virtual void AfterTest() OVERRIDE {}
1412 1427
1413 private: 1428 private:
1414 FakeContentLayerClient client_; 1429 FakeContentLayerClient client_;
1415 scoped_refptr<FakeContentLayer> parent_; 1430 scoped_refptr<FakeContentLayer> parent_;
1416 scoped_refptr<FakeContentLayer> child_; 1431 scoped_refptr<FakeContentLayer> child_;
1417 scoped_refptr<FakeScrollbarLayer> scrollbar_with_paints_;
1418 scoped_refptr<FakeScrollbarLayer> scrollbar_without_paints_;
1419 }; 1432 };
1420 1433
1421 // Partial updates are not possible with a delegating renderer. 1434 // Partial updates are not possible with a delegating renderer.
1422 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( 1435 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
1423 LayerTreeHostTestAtomicCommitWithPartialUpdate); 1436 LayerTreeHostTestAtomicCommitWithPartialUpdate);
1424 1437
1425 class LayerTreeHostTestFinishAllRendering : public LayerTreeHostTest { 1438 class LayerTreeHostTestFinishAllRendering : public LayerTreeHostTest {
1426 public: 1439 public:
1427 LayerTreeHostTestFinishAllRendering() : once_(false), draw_count_(0) {} 1440 LayerTreeHostTestFinishAllRendering() : once_(false), draw_count_(0) {}
1428 1441
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
1928 }; 1941 };
1929 1942
1930 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits); 1943 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits);
1931 1944
1932 class LayerTreeHostWithProxy : public LayerTreeHost { 1945 class LayerTreeHostWithProxy : public LayerTreeHost {
1933 public: 1946 public:
1934 LayerTreeHostWithProxy(FakeLayerTreeHostClient* client, 1947 LayerTreeHostWithProxy(FakeLayerTreeHostClient* client,
1935 const LayerTreeSettings& settings, 1948 const LayerTreeSettings& settings,
1936 scoped_ptr<FakeProxy> proxy) 1949 scoped_ptr<FakeProxy> proxy)
1937 : LayerTreeHost(client, settings) { 1950 : LayerTreeHost(client, settings) {
1938 proxy->SetLayerTreeHost(this); 1951 proxy->SetLayerTreeHost(this);
1939 EXPECT_TRUE(InitializeForTesting(proxy.PassAs<Proxy>())); 1952 EXPECT_TRUE(InitializeForTesting(proxy.PassAs<Proxy>()));
1940 } 1953 }
1941 }; 1954 };
1942 1955
1943 TEST(LayerTreeHostTest, LimitPartialUpdates) { 1956 TEST(LayerTreeHostTest, LimitPartialUpdates) {
1944 // When partial updates are not allowed, max updates should be 0. 1957 // When partial updates are not allowed, max updates should be 0.
1945 { 1958 {
1946 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 1959 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D);
1947 1960
1948 scoped_ptr<FakeProxy> proxy(new FakeProxy); 1961 scoped_ptr<FakeProxy> proxy(new FakeProxy);
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
2365 virtual WebKit::WebString getString(WebKit::WGC3Denum name) OVERRIDE { 2378 virtual WebKit::WebString getString(WebKit::WGC3Denum name) OVERRIDE {
2366 if (name == GL_EXTENSIONS) { 2379 if (name == GL_EXTENSIONS) {
2367 return WebKit::WebString( 2380 return WebKit::WebString(
2368 "GL_CHROMIUM_iosurface GL_ARB_texture_rectangle"); 2381 "GL_CHROMIUM_iosurface GL_ARB_texture_rectangle");
2369 } 2382 }
2370 return WebKit::WebString(); 2383 return WebKit::WebString();
2371 } 2384 }
2372 2385
2373 MOCK_METHOD1(activeTexture, void(WebKit::WGC3Denum texture)); 2386 MOCK_METHOD1(activeTexture, void(WebKit::WGC3Denum texture));
2374 MOCK_METHOD2(bindTexture, void(WebKit::WGC3Denum target, 2387 MOCK_METHOD2(bindTexture, void(WebKit::WGC3Denum target,
2375 WebKit::WebGLId texture_id)); 2388 WebKit::WebGLId texture_id));
2376 MOCK_METHOD3(texParameteri, void(WebKit::WGC3Denum target, 2389 MOCK_METHOD3(texParameteri, void(WebKit::WGC3Denum target,
2377 WebKit::WGC3Denum pname, 2390 WebKit::WGC3Denum pname,
2378 WebKit::WGC3Dint param)); 2391 WebKit::WGC3Dint param));
2379 MOCK_METHOD5(texImageIOSurface2DCHROMIUM, void(WebKit::WGC3Denum target, 2392 MOCK_METHOD5(texImageIOSurface2DCHROMIUM, void(WebKit::WGC3Denum target,
2380 WebKit::WGC3Dint width, 2393 WebKit::WGC3Dint width,
2381 WebKit::WGC3Dint height, 2394 WebKit::WGC3Dint height,
2382 WebKit::WGC3Duint ioSurfaceId, 2395 WebKit::WGC3Duint ioSurfaceId,
2383 WebKit::WGC3Duint plane)); 2396 WebKit::WGC3Duint plane));
2384 MOCK_METHOD4(drawElements, void(WebKit::WGC3Denum mode, 2397 MOCK_METHOD4(drawElements, void(WebKit::WGC3Denum mode,
2385 WebKit::WGC3Dsizei count, 2398 WebKit::WGC3Dsizei count,
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
3186 private: 3199 private:
3187 FakeContentLayerClient client_; 3200 FakeContentLayerClient client_;
3188 scoped_refptr<FakePictureLayer> layer_; 3201 scoped_refptr<FakePictureLayer> layer_;
3189 bool did_initialize_gl_; 3202 bool did_initialize_gl_;
3190 bool did_release_gl_; 3203 bool did_release_gl_;
3191 int last_source_frame_number_drawn_; 3204 int last_source_frame_number_drawn_;
3192 }; 3205 };
3193 3206
3194 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize); 3207 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize);
3195 3208
3209 // Test for UI Resource management.
3210 class LayerTreeHostTestUIResource : public LayerTreeHostTest {
3211 public:
3212 LayerTreeHostTestUIResource() : num_ui_resources_(0), num_commits_(0) {}
3213
3214 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
3215
3216 virtual void DidCommit() OVERRIDE {
3217 int frame = num_commits_;
3218 switch (frame) {
3219 case 1:
3220 CreateResource();
3221 CreateResource();
3222 PostSetNeedsCommitToMainThread();
3223 break;
3224 case 2:
3225 // Usually ScopedUIResource are deleted from the manager in their
3226 // destructor. Here we just want to test that a direct call to
3227 // DeleteUIResource works.
3228 layer_tree_host()->DeleteUIResource(ui_resources_[0]->id());
3229 PostSetNeedsCommitToMainThread();
3230 break;
3231 case 3:
3232 // DeleteUIResource can be called with an invalid id.
3233 layer_tree_host()->DeleteUIResource(ui_resources_[0]->id());
3234 PostSetNeedsCommitToMainThread();
3235 break;
3236 case 4:
3237 CreateResource();
3238 CreateResource();
3239 PostSetNeedsCommitToMainThread();
3240 break;
3241 case 5:
3242 ClearResources();
3243 EndTest();
3244 break;
3245 }
3246 }
3247
3248 void PerformTest(LayerTreeHostImpl* impl) {
3249 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>(
3250 impl->output_surface()->context3d());
3251
3252 int frame = num_commits_;
3253 switch (frame) {
3254 case 1:
3255 ASSERT_EQ(0u, context->NumTextures());
3256 break;
3257 case 2:
3258 // Created two textures.
3259 ASSERT_EQ(2u, context->NumTextures());
3260 break;
3261 case 3:
3262 // One texture left after one deletion.
3263 ASSERT_EQ(1u, context->NumTextures());
3264 break;
3265 case 4:
3266 // Resource manager state should not change when delete is called on an
3267 // invalid id.
3268 ASSERT_EQ(1u, context->NumTextures());
3269 break;
3270 case 5:
3271 // Creation after deletion: two more creates should total up to
3272 // three textures.
3273 ASSERT_EQ(3u, context->NumTextures());
3274 break;
3275 }
3276 }
3277
3278 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
3279 ++num_commits_;
3280 if (!layer_tree_host()->settings().impl_side_painting)
3281 PerformTest(impl);
3282 }
3283
3284 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
3285 if (layer_tree_host()->settings().impl_side_painting)
3286 PerformTest(impl);
3287 }
3288
3289 virtual void AfterTest() OVERRIDE {}
3290
3291 private:
3292 // Must clear all resources before exiting.
3293 void ClearResources() {
3294 for (int i = 0; i < num_ui_resources_; i++)
3295 ui_resources_[i].reset();
3296 }
3297
3298 void CreateResource() {
3299 ui_resources_[num_ui_resources_++] =
3300 FakeScopedUIResource::Create(layer_tree_host());
3301 }
3302
3303 scoped_ptr<FakeScopedUIResource> ui_resources_[5];
3304 int num_ui_resources_;
3305 int num_commits_;
3306 };
3307
3308 MULTI_THREAD_TEST_F(LayerTreeHostTestUIResource);
3309
3196 class PushPropertiesCountingLayer : public Layer { 3310 class PushPropertiesCountingLayer : public Layer {
3197 public: 3311 public:
3198 static scoped_refptr<PushPropertiesCountingLayer> Create() { 3312 static scoped_refptr<PushPropertiesCountingLayer> Create() {
3199 return new PushPropertiesCountingLayer(); 3313 return new PushPropertiesCountingLayer();
3200 } 3314 }
3201 3315
3202 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE { 3316 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE {
3203 Layer::PushPropertiesTo(layer); 3317 Layer::PushPropertiesTo(layer);
3204 push_properties_count_++; 3318 push_properties_count_++;
3205 if (persist_needs_push_properties_) 3319 if (persist_needs_push_properties_)
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after
3952 TEST_F(LayerTreeHostTestTreeActivationCallback, DirectRenderer) { 4066 TEST_F(LayerTreeHostTestTreeActivationCallback, DirectRenderer) {
3953 RunTest(true, false, true); 4067 RunTest(true, false, true);
3954 } 4068 }
3955 4069
3956 TEST_F(LayerTreeHostTestTreeActivationCallback, DelegatingRenderer) { 4070 TEST_F(LayerTreeHostTestTreeActivationCallback, DelegatingRenderer) {
3957 RunTest(true, true, true); 4071 RunTest(true, true, true);
3958 } 4072 }
3959 4073
3960 } // namespace 4074 } // namespace
3961 } // namespace cc 4075 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698