Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "cc/layers/heads_up_display_layer.h" | 9 #include "cc/layers/heads_up_display_layer.h" |
| 10 #include "cc/layers/layer_impl.h" | 10 #include "cc/layers/layer_impl.h" |
| (...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1268 } | 1268 } |
| 1269 } | 1269 } |
| 1270 }; | 1270 }; |
| 1271 | 1271 |
| 1272 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostAfterCommit); | 1272 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostAfterCommit); |
| 1273 | 1273 |
| 1274 // Losing context before UI resource requests can be commited. Three sequences | 1274 // Losing context before UI resource requests can be commited. Three sequences |
| 1275 // of creation/deletion are considered: | 1275 // of creation/deletion are considered: |
| 1276 // 1. Create one resource -> Context Lost => Expect the resource to have been | 1276 // 1. Create one resource -> Context Lost => Expect the resource to have been |
| 1277 // created. | 1277 // created. |
| 1278 // 2. Delete an exisiting resource (test_id0_) -> create a second resource | 1278 // 2. Delete an existing resource (test_id0_) -> create a second resource |
| 1279 // (test_id1_) -> Context Lost => Expect the test_id0_ to be removed and | 1279 // (test_id1_) -> Context Lost => Expect the test_id0_ to be removed and |
| 1280 // test_id1_ to have been created. | 1280 // test_id1_ to have been created. |
| 1281 // 3. Create one resource -> Delete that same resource -> Context Lost => Expect | 1281 // 3. Create one resource -> Delete that same resource -> Context Lost => Expect |
| 1282 // the resource to not exist in the manager. | 1282 // the resource to not exist in the manager. |
| 1283 class UIResourceLostBeforeCommit : public UIResourceLostTestSimple { | 1283 class UIResourceLostBeforeCommit : public UIResourceLostTestSimple { |
| 1284 public: | 1284 public: |
| 1285 UIResourceLostBeforeCommit() : test_id0_(0), test_id1_(0) {} | 1285 UIResourceLostBeforeCommit() : test_id0_(0), test_id1_(0) {} |
| 1286 | 1286 |
| 1287 void StepCompleteOnMainThread(int step) override { | 1287 void StepCompleteOnMainThread(int step) override { |
| 1288 switch (step) { | 1288 switch (step) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1346 EXPECT_EQ(0, ui_resource_->lost_resource_count); | 1346 EXPECT_EQ(0, ui_resource_->lost_resource_count); |
| 1347 // Resource Id on the impl-side has been created. | 1347 // Resource Id on the impl-side has been created. |
| 1348 PostSetNeedsCommitToMainThread(); | 1348 PostSetNeedsCommitToMainThread(); |
| 1349 break; | 1349 break; |
| 1350 case 3: | 1350 case 3: |
| 1351 // Sequence 2 (continued): | 1351 // Sequence 2 (continued): |
| 1352 // The previous resource should have been deleted. | 1352 // The previous resource should have been deleted. |
| 1353 EXPECT_EQ(0u, impl->ResourceIdForUIResource(test_id0_)); | 1353 EXPECT_EQ(0u, impl->ResourceIdForUIResource(test_id0_)); |
| 1354 // The second resource should have been created. | 1354 // The second resource should have been created. |
| 1355 EXPECT_NE(0u, impl->ResourceIdForUIResource(test_id1_)); | 1355 EXPECT_NE(0u, impl->ResourceIdForUIResource(test_id1_)); |
| 1356 // The second resource called the resource callback once and since the | 1356 // The second resource was not actually uploaded before the context |
| 1357 // context is lost, a "resource lost" callback was also issued. | 1357 // was lost, so it only got created once. |
| 1358 EXPECT_EQ(2, ui_resource_->resource_create_count); | 1358 EXPECT_EQ(1, ui_resource_->resource_create_count); |
| 1359 EXPECT_EQ(1, ui_resource_->lost_resource_count); | 1359 EXPECT_EQ(0, ui_resource_->lost_resource_count); |
| 1360 break; | 1360 break; |
| 1361 case 5: | 1361 case 5: |
| 1362 // Sequence 3 (continued): | 1362 // Sequence 3 (continued): |
| 1363 // Expect the resource callback to have been called once. | 1363 // Expect the resource callback to have been called once. |
| 1364 EXPECT_EQ(1, ui_resource_->resource_create_count); | 1364 EXPECT_EQ(1, ui_resource_->resource_create_count); |
| 1365 // No "resource lost" callbacks. | 1365 // No "resource lost" callbacks. |
| 1366 EXPECT_EQ(0, ui_resource_->lost_resource_count); | 1366 EXPECT_EQ(0, ui_resource_->lost_resource_count); |
| 1367 // The UI resource id should not be valid | 1367 // The UI resource id should not be valid |
| 1368 EXPECT_EQ(0u, impl->ResourceIdForUIResource(test_id0_)); | 1368 EXPECT_EQ(0u, impl->ResourceIdForUIResource(test_id0_)); |
| 1369 break; | 1369 break; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1461 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostBeforeActivateTree); | 1461 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostBeforeActivateTree); |
| 1462 | 1462 |
| 1463 // Resources evicted explicitly and by visibility changes. | 1463 // Resources evicted explicitly and by visibility changes. |
| 1464 class UIResourceLostEviction : public UIResourceLostTestSimple { | 1464 class UIResourceLostEviction : public UIResourceLostTestSimple { |
| 1465 public: | 1465 public: |
| 1466 void StepCompleteOnMainThread(int step) override { | 1466 void StepCompleteOnMainThread(int step) override { |
| 1467 EXPECT_TRUE(layer_tree_host()->task_runner_provider()->IsMainThread()); | 1467 EXPECT_TRUE(layer_tree_host()->task_runner_provider()->IsMainThread()); |
| 1468 switch (step) { | 1468 switch (step) { |
| 1469 case 0: | 1469 case 0: |
| 1470 ui_resource_ = FakeScopedUIResource::Create(layer_tree_host()); | 1470 ui_resource_ = FakeScopedUIResource::Create(layer_tree_host()); |
| 1471 ui_resource2_ = FakeScopedUIResource::Create(layer_tree_host()); | |
| 1471 EXPECT_NE(0, ui_resource_->id()); | 1472 EXPECT_NE(0, ui_resource_->id()); |
|
danakj
2016/08/15 22:52:11
do this for both?
no sievers
2016/08/26 18:38:19
Done.
| |
| 1472 PostSetNeedsCommitToMainThread(); | 1473 PostSetNeedsCommitToMainThread(); |
| 1473 break; | 1474 break; |
| 1474 case 2: | 1475 case 2: |
| 1475 // Make the tree not visible. | 1476 // Make the tree not visible. |
| 1476 PostSetVisibleToMainThread(false); | 1477 PostSetVisibleToMainThread(false); |
| 1478 ui_resource2_->DeleteResource(); | |
| 1479 ui_resource3_ = FakeScopedUIResource::Create(layer_tree_host()); | |
| 1477 break; | 1480 break; |
| 1478 case 3: | 1481 case 3: |
| 1479 // Release resource before ending the test. | 1482 // Release resources before ending the test. |
| 1480 ui_resource_ = nullptr; | 1483 ui_resource_ = nullptr; |
| 1484 ui_resource2_ = nullptr; | |
| 1485 ui_resource3_ = nullptr; | |
| 1481 EndTest(); | 1486 EndTest(); |
| 1482 break; | 1487 break; |
| 1483 case 4: | 1488 case 4: |
| 1484 NOTREACHED(); | 1489 NOTREACHED(); |
| 1485 } | 1490 } |
| 1486 } | 1491 } |
| 1487 | 1492 |
| 1488 void DidSetVisibleOnImplTree(LayerTreeHostImpl* impl, bool visible) override { | 1493 void DidSetVisibleOnImplTree(LayerTreeHostImpl* impl, bool visible) override { |
| 1489 if (!visible) { | 1494 if (!visible) { |
| 1490 // All resources should have been evicted. | 1495 // All resources should have been evicted. |
| 1491 ASSERT_EQ(0u, context3d_->NumTextures()); | 1496 ASSERT_EQ(0u, context3d_->NumTextures()); |
| 1492 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1497 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
|
danakj
2016/08/15 22:52:11
do this for 2 and 3?
no sievers
2016/08/26 18:38:18
Done.
| |
| 1493 EXPECT_EQ(2, ui_resource_->resource_create_count); | 1498 EXPECT_EQ(2, ui_resource_->resource_create_count); |
| 1494 EXPECT_EQ(1, ui_resource_->lost_resource_count); | 1499 EXPECT_EQ(1, ui_resource_->lost_resource_count); |
| 1495 // Drawing is disabled both because of the evicted resources and | 1500 // Drawing is disabled both because of the evicted resources and |
| 1496 // because the renderer is not visible. | 1501 // because the renderer is not visible. |
| 1497 EXPECT_FALSE(impl->CanDraw()); | 1502 EXPECT_FALSE(impl->CanDraw()); |
| 1498 // Make the renderer visible again. | 1503 // Make the renderer visible again. |
| 1499 PostSetVisibleToMainThread(true); | 1504 PostSetVisibleToMainThread(true); |
| 1500 } | 1505 } |
| 1501 } | 1506 } |
| 1502 | 1507 |
| 1503 void StepCompleteOnImplThread(LayerTreeHostImpl* impl) override { | 1508 void StepCompleteOnImplThread(LayerTreeHostImpl* impl) override { |
| 1504 LayerTreeHostContextTest::CommitCompleteOnThread(impl); | 1509 LayerTreeHostContextTest::CommitCompleteOnThread(impl); |
| 1505 switch (time_step_) { | 1510 switch (time_step_) { |
| 1506 case 1: | 1511 case 1: |
| 1507 // The resource should have been created on LTHI after the commit. | 1512 // The resource should have been created on LTHI after the commit. |
|
danakj
2016/08/15 22:52:11
Which resource, both right?
no sievers
2016/08/26 18:38:18
Done.
| |
| 1508 ASSERT_EQ(1u, context3d_->NumTextures()); | 1513 ASSERT_EQ(2u, context3d_->NumTextures()); |
| 1509 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1514 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
|
danakj
2016/08/15 22:52:11
do this for both?
no sievers
2016/08/26 18:38:18
Done.
| |
| 1510 EXPECT_EQ(1, ui_resource_->resource_create_count); | 1515 EXPECT_EQ(1, ui_resource_->resource_create_count); |
| 1511 EXPECT_EQ(0, ui_resource_->lost_resource_count); | 1516 EXPECT_EQ(0, ui_resource_->lost_resource_count); |
| 1512 EXPECT_TRUE(impl->CanDraw()); | 1517 EXPECT_TRUE(impl->CanDraw()); |
| 1513 // Evict all UI resources. This will trigger a commit. | 1518 // Evict all UI resources. This will trigger a commit. |
| 1514 impl->EvictAllUIResources(); | 1519 impl->EvictAllUIResources(); |
| 1515 ASSERT_EQ(0u, context3d_->NumTextures()); | 1520 ASSERT_EQ(0u, context3d_->NumTextures()); |
| 1516 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1521 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
|
danakj
2016/08/15 22:52:11
do this for both?
no sievers
2016/08/26 18:38:18
Done.
| |
| 1517 EXPECT_EQ(1, ui_resource_->resource_create_count); | 1522 EXPECT_EQ(1, ui_resource_->resource_create_count); |
| 1518 EXPECT_EQ(0, ui_resource_->lost_resource_count); | 1523 EXPECT_EQ(0, ui_resource_->lost_resource_count); |
| 1519 EXPECT_FALSE(impl->CanDraw()); | 1524 EXPECT_FALSE(impl->CanDraw()); |
| 1520 break; | 1525 break; |
| 1521 case 2: | 1526 case 2: |
| 1522 // The resource should have been recreated. | 1527 // The resource should have been recreated. |
|
danakj
2016/08/15 22:52:11
Both resource and resource2 ya?
no sievers
2016/08/26 18:38:18
Done.
| |
| 1523 ASSERT_EQ(1u, context3d_->NumTextures()); | 1528 ASSERT_EQ(2u, context3d_->NumTextures()); |
| 1524 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1529 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
| 1525 EXPECT_EQ(2, ui_resource_->resource_create_count); | 1530 EXPECT_EQ(2, ui_resource_->resource_create_count); |
| 1526 EXPECT_EQ(1, ui_resource_->lost_resource_count); | 1531 EXPECT_EQ(1, ui_resource_->lost_resource_count); |
| 1532 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource2_->id())); | |
| 1533 EXPECT_EQ(2, ui_resource2_->resource_create_count); | |
| 1534 EXPECT_EQ(1, ui_resource2_->lost_resource_count); | |
| 1527 EXPECT_TRUE(impl->CanDraw()); | 1535 EXPECT_TRUE(impl->CanDraw()); |
| 1528 break; | 1536 break; |
| 1529 case 3: | 1537 case 3: |
| 1530 // The resource should have been recreated after visibility was | 1538 // The resource should have been recreated after visibility was |
| 1531 // restored. | 1539 // restored. |
| 1532 ASSERT_EQ(1u, context3d_->NumTextures()); | 1540 ASSERT_EQ(2u, context3d_->NumTextures()); |
| 1533 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1541 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
| 1534 EXPECT_EQ(3, ui_resource_->resource_create_count); | 1542 EXPECT_EQ(3, ui_resource_->resource_create_count); |
| 1535 EXPECT_EQ(2, ui_resource_->lost_resource_count); | 1543 EXPECT_EQ(2, ui_resource_->lost_resource_count); |
| 1544 | |
| 1545 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource2_->id())); | |
| 1546 EXPECT_EQ(2, ui_resource2_->resource_create_count); | |
| 1547 EXPECT_EQ(1, ui_resource2_->lost_resource_count); | |
| 1548 | |
| 1549 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource3_->id())); | |
| 1550 EXPECT_EQ(1, ui_resource3_->resource_create_count); | |
| 1551 EXPECT_EQ(0, ui_resource3_->lost_resource_count); | |
| 1536 EXPECT_TRUE(impl->CanDraw()); | 1552 EXPECT_TRUE(impl->CanDraw()); |
| 1537 break; | 1553 break; |
| 1538 } | 1554 } |
| 1539 } | 1555 } |
| 1556 | |
| 1557 private: | |
| 1558 std::unique_ptr<FakeScopedUIResource> ui_resource2_; | |
| 1559 std::unique_ptr<FakeScopedUIResource> ui_resource3_; | |
| 1540 }; | 1560 }; |
| 1541 | 1561 |
| 1542 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostEviction); | 1562 SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostEviction); |
| 1543 | 1563 |
| 1544 class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame | 1564 class LayerTreeHostContextTestLoseAfterSendingBeginMainFrame |
| 1545 : public LayerTreeHostContextTest { | 1565 : public LayerTreeHostContextTest { |
| 1546 protected: | 1566 protected: |
| 1547 void BeginTest() override { | 1567 void BeginTest() override { |
| 1548 deferred_ = false; | 1568 deferred_ = false; |
| 1549 PostSetNeedsCommitToMainThread(); | 1569 PostSetNeedsCommitToMainThread(); |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 1579 void AfterTest() override {} | 1599 void AfterTest() override {} |
| 1580 | 1600 |
| 1581 bool deferred_; | 1601 bool deferred_; |
| 1582 }; | 1602 }; |
| 1583 | 1603 |
| 1584 SINGLE_AND_MULTI_THREAD_TEST_F( | 1604 SINGLE_AND_MULTI_THREAD_TEST_F( |
| 1585 LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); | 1605 LayerTreeHostContextTestLoseAfterSendingBeginMainFrame); |
| 1586 | 1606 |
| 1587 } // namespace | 1607 } // namespace |
| 1588 } // namespace cc | 1608 } // namespace cc |
| OLD | NEW |