| Index: gpu/command_buffer/service/sync_point_manager_unittest.cc
|
| diff --git a/gpu/command_buffer/service/sync_point_manager_unittest.cc b/gpu/command_buffer/service/sync_point_manager_unittest.cc
|
| index 96b80623bb64f0c00dca29df3db5a26c09e43934..b3501a5ec10568fb0ad1d06285f027f99ee1681f 100644
|
| --- a/gpu/command_buffer/service/sync_point_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/sync_point_manager_unittest.cc
|
| @@ -28,26 +28,27 @@ class SyncPointManagerTest : public testing::Test {
|
|
|
| struct SyncPointStream {
|
| scoped_refptr<SyncPointOrderData> order_data;
|
| - std::unique_ptr<SyncPointClient> client;
|
| + scoped_refptr<SyncPointClientState> client_state;
|
| std::queue<uint32_t> order_numbers;
|
|
|
| SyncPointStream(SyncPointManager* sync_point_manager,
|
| CommandBufferNamespace namespace_id,
|
| CommandBufferId command_buffer_id)
|
| - : order_data(SyncPointOrderData::Create()),
|
| - client(base::MakeUnique<SyncPointClient>(sync_point_manager,
|
| - order_data,
|
| - namespace_id,
|
| - command_buffer_id)) {}
|
| + : order_data(sync_point_manager->CreateSyncPointOrderData()),
|
| + client_state(sync_point_manager->CreateSyncPointClientState(
|
| + namespace_id,
|
| + command_buffer_id,
|
| + order_data->sequence_id())) {}
|
|
|
| ~SyncPointStream() {
|
| - order_data->Destroy();
|
| - order_data = nullptr;
|
| + if (order_data)
|
| + order_data->Destroy();
|
| + if (client_state)
|
| + client_state->Destroy();
|
| }
|
|
|
| - void AllocateOrderNum(SyncPointManager* sync_point_manager) {
|
| - order_numbers.push(
|
| - order_data->GenerateUnprocessedOrderNumber(sync_point_manager));
|
| + void AllocateOrderNum() {
|
| + order_numbers.push(order_data->GenerateUnprocessedOrderNumber());
|
| }
|
|
|
| void BeginProcessing() {
|
| @@ -63,14 +64,14 @@ struct SyncPointStream {
|
| };
|
|
|
| TEST_F(SyncPointManagerTest, BasicSyncPointOrderDataTest) {
|
| - scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create();
|
| + scoped_refptr<SyncPointOrderData> order_data =
|
| + sync_point_manager_->CreateSyncPointOrderData();
|
|
|
| EXPECT_EQ(0u, order_data->current_order_num());
|
| EXPECT_EQ(0u, order_data->processed_order_num());
|
| EXPECT_EQ(0u, order_data->unprocessed_order_num());
|
|
|
| - uint32_t order_num =
|
| - order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get());
|
| + uint32_t order_num = order_data->GenerateUnprocessedOrderNumber();
|
| EXPECT_EQ(1u, order_num);
|
|
|
| EXPECT_EQ(0u, order_data->current_order_num());
|
| @@ -94,6 +95,8 @@ TEST_F(SyncPointManagerTest, BasicSyncPointOrderDataTest) {
|
| EXPECT_EQ(order_num, order_data->processed_order_num());
|
| EXPECT_EQ(order_num, order_data->unprocessed_order_num());
|
| EXPECT_FALSE(order_data->IsProcessingOrderNumber());
|
| +
|
| + order_data->Destroy();
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, BasicFenceSyncRelease) {
|
| @@ -108,12 +111,12 @@ TEST_F(SyncPointManagerTest, BasicFenceSyncRelease) {
|
|
|
| SyncPointStream stream(sync_point_manager_.get(), kNamespaceId, kBufferId);
|
|
|
| - stream.AllocateOrderNum(sync_point_manager_.get());
|
| + stream.AllocateOrderNum();
|
|
|
| EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| stream.order_data->BeginProcessingOrderNumber(1);
|
| - stream.client->ReleaseFenceSync(release_count);
|
| + stream.client_state->ReleaseFenceSync(release_count);
|
| stream.order_data->FinishProcessingOrderNumber(1);
|
|
|
| EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| @@ -131,16 +134,16 @@ TEST_F(SyncPointManagerTest, MultipleClientsPerOrderData) {
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token1(kNamespaceId, 0, kCmdBufferId1, release_count);
|
| - stream1.AllocateOrderNum(sync_point_manager_.get());
|
| + stream1.AllocateOrderNum();
|
|
|
| SyncToken sync_token2(kNamespaceId, 0, kCmdBufferId2, release_count);
|
| - stream2.AllocateOrderNum(sync_point_manager_.get());
|
| + stream2.AllocateOrderNum();
|
|
|
| EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token1));
|
| EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token2));
|
|
|
| stream1.order_data->BeginProcessingOrderNumber(1);
|
| - stream1.client->ReleaseFenceSync(release_count);
|
| + stream1.client_state->ReleaseFenceSync(release_count);
|
| stream1.order_data->FinishProcessingOrderNumber(1);
|
|
|
| EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token1));
|
| @@ -157,15 +160,15 @@ TEST_F(SyncPointManagerTest, BasicFenceSyncWaitRelease) {
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| kWaitCmdBufferId);
|
|
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
|
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| @@ -173,7 +176,7 @@ TEST_F(SyncPointManagerTest, BasicFenceSyncWaitRelease) {
|
| EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| release_stream.BeginProcessing();
|
| - release_stream.client->ReleaseFenceSync(release_count);
|
| + release_stream.client_state->ReleaseFenceSync(release_count);
|
| EXPECT_EQ(123, test_num);
|
| EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
| @@ -188,15 +191,15 @@ TEST_F(SyncPointManagerTest, WaitOnSelfFails) {
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| kWaitCmdBufferId);
|
|
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kWaitCmdBufferId, release_count);
|
|
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_FALSE(valid_wait);
|
| @@ -215,15 +218,15 @@ TEST_F(SyncPointManagerTest, OutOfOrderRelease) {
|
| kWaitCmdBufferId);
|
|
|
| // Generate wait order number first.
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + wait_stream.AllocateOrderNum();
|
| + release_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
|
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_FALSE(valid_wait);
|
| @@ -242,21 +245,21 @@ TEST_F(SyncPointManagerTest, HigherOrderNumberRelease) {
|
| kWaitCmdBufferId);
|
|
|
| // Generate wait order number first.
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + wait_stream.AllocateOrderNum();
|
| + release_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
|
|
| // Order number was higher but it was actually released.
|
| release_stream.BeginProcessing();
|
| - release_stream.client->ReleaseFenceSync(release_count);
|
| + release_stream.client_state->ReleaseFenceSync(release_count);
|
| release_stream.EndProcessing();
|
|
|
| // Release stream has already released so there's no need to wait.
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_FALSE(valid_wait);
|
| @@ -274,8 +277,8 @@ TEST_F(SyncPointManagerTest, DestroyedClientRelease) {
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| kWaitCmdBufferId);
|
|
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| @@ -283,14 +286,16 @@ TEST_F(SyncPointManagerTest, DestroyedClientRelease) {
|
| wait_stream.BeginProcessing();
|
|
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| EXPECT_EQ(10, test_num);
|
|
|
| // Destroying the client should release the wait.
|
| - release_stream.client.reset();
|
| + release_stream.client_state->Destroy();
|
| + release_stream.client_state = nullptr;
|
| +
|
| EXPECT_EQ(123, test_num);
|
| EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
| @@ -309,15 +314,15 @@ TEST_F(SyncPointManagerTest, NonExistentRelease) {
|
| // This test simply tests that a wait stream of order [2] waiting on
|
| // release stream of order [1] will still release the fence sync even
|
| // though nothing was released.
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
|
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| @@ -348,9 +353,9 @@ TEST_F(SyncPointManagerTest, NonExistentRelease2) {
|
| // The wait stream [3] is waiting on release stream [1] even though
|
| // order [2] was also generated. Although order [2] only exists on the
|
| // wait stream so the release stream should only know about order [1].
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| @@ -363,7 +368,7 @@ TEST_F(SyncPointManagerTest, NonExistentRelease2) {
|
| wait_stream.BeginProcessing();
|
| EXPECT_EQ(3u, wait_stream.order_data->current_order_num());
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| @@ -381,9 +386,9 @@ TEST_F(SyncPointManagerTest, NonExistentRelease2) {
|
| // Ensure that the wait callback does not get triggered again when it is
|
| // actually released.
|
| test_num = 1;
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| release_stream.BeginProcessing();
|
| - release_stream.client->ReleaseFenceSync(release_count);
|
| + release_stream.client_state->ReleaseFenceSync(release_count);
|
| release_stream.EndProcessing();
|
| EXPECT_EQ(1, test_num);
|
| EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| @@ -405,10 +410,10 @@ TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) {
|
| // to the release stream so it is essentially non-existent to the release
|
| // stream's point of view. Once the release stream begins processing the next
|
| // order [3], it should realize order [2] didn't exist and release the fence.
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| + release_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
| + wait_stream.AllocateOrderNum();
|
| + release_stream.AllocateOrderNum();
|
|
|
| uint64_t release_count = 1;
|
| SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| @@ -420,7 +425,7 @@ TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) {
|
| wait_stream.BeginProcessing();
|
| EXPECT_EQ(3u, wait_stream.order_data->current_order_num());
|
| int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| + bool valid_wait = wait_stream.client_state->Wait(
|
| sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| @@ -444,7 +449,7 @@ TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) {
|
| // Ensure that the wait callback does not get triggered again when it is
|
| // actually released.
|
| test_num = 1;
|
| - release_stream.client->ReleaseFenceSync(1);
|
| + release_stream.client_state->ReleaseFenceSync(1);
|
| EXPECT_EQ(1, test_num);
|
| EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|