| 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 a9f6c56b8780f3c987ef76a6e9d24a2868a7b056..96b80623bb64f0c00dca29df3db5a26c09e43934 100644
|
| --- a/gpu/command_buffer/service/sync_point_manager_unittest.cc
|
| +++ b/gpu/command_buffer/service/sync_point_manager_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include <queue>
|
|
|
| #include "base/bind.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "gpu/command_buffer/service/sync_point_manager.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -15,29 +16,13 @@ namespace gpu {
|
|
|
| class SyncPointManagerTest : public testing::Test {
|
| public:
|
| - SyncPointManagerTest() {}
|
| -
|
| + SyncPointManagerTest() : sync_point_manager_(new SyncPointManager) {}
|
| ~SyncPointManagerTest() override {}
|
|
|
| protected:
|
| - void SetUp() override {
|
| - sync_point_manager_.reset(new SyncPointManager(false));
|
| - }
|
| -
|
| - void TearDown() override { sync_point_manager_.reset(); }
|
| -
|
| // Simple static function which can be used to test callbacks.
|
| static void SetIntegerFunction(int* test, int value) { *test = value; }
|
|
|
| - // Simple static function used for testing OnWaitCallback.
|
| - static void OnWait(CommandBufferNamespace* namespace_id_ptr,
|
| - CommandBufferId* client_id_ptr,
|
| - CommandBufferNamespace namespace_id,
|
| - CommandBufferId client_id) {
|
| - *namespace_id_ptr = namespace_id;
|
| - *client_id_ptr = client_id;
|
| - }
|
| -
|
| std::unique_ptr<SyncPointManager> sync_point_manager_;
|
| };
|
|
|
| @@ -50,9 +35,10 @@ struct SyncPointStream {
|
| CommandBufferNamespace namespace_id,
|
| CommandBufferId command_buffer_id)
|
| : order_data(SyncPointOrderData::Create()),
|
| - client(sync_point_manager->CreateSyncPointClient(order_data,
|
| - namespace_id,
|
| - command_buffer_id)) {}
|
| + client(base::MakeUnique<SyncPointClient>(sync_point_manager,
|
| + order_data,
|
| + namespace_id,
|
| + command_buffer_id)) {}
|
|
|
| ~SyncPointStream() {
|
| order_data->Destroy();
|
| @@ -83,7 +69,7 @@ TEST_F(SyncPointManagerTest, BasicSyncPointOrderDataTest) {
|
| EXPECT_EQ(0u, order_data->processed_order_num());
|
| EXPECT_EQ(0u, order_data->unprocessed_order_num());
|
|
|
| - const uint32_t order_num =
|
| + uint32_t order_num =
|
| order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get());
|
| EXPECT_EQ(1u, order_num);
|
|
|
| @@ -110,200 +96,195 @@ TEST_F(SyncPointManagerTest, BasicSyncPointOrderDataTest) {
|
| EXPECT_FALSE(order_data->IsProcessingOrderNumber());
|
| }
|
|
|
| -TEST_F(SyncPointManagerTest, SyncPointClientRegistration) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| +TEST_F(SyncPointManagerTest, BasicFenceSyncRelease) {
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
|
|
| - scoped_refptr<SyncPointClientState> empty_state =
|
| - sync_point_manager_->GetSyncPointClientState(kNamespaceId, kBufferId);
|
| - EXPECT_FALSE(empty_state);
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kBufferId, release_count);
|
|
|
| - scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create();
|
| + // Can't wait for sync token before client is registered.
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| - std::unique_ptr<SyncPointClient> client =
|
| - sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId,
|
| - kBufferId);
|
| + SyncPointStream stream(sync_point_manager_.get(), kNamespaceId, kBufferId);
|
|
|
| - EXPECT_EQ(order_data, client->client_state()->order_data());
|
| - EXPECT_EQ(
|
| - client->client_state(),
|
| - sync_point_manager_->GetSyncPointClientState(kNamespaceId, kBufferId));
|
| -}
|
| + stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| -TEST_F(SyncPointManagerTest, BasicFenceSyncRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| - scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create();
|
| - std::unique_ptr<SyncPointClient> client =
|
| - sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId,
|
| - kBufferId);
|
| - scoped_refptr<SyncPointClientState> client_state = client->client_state();
|
| + stream.order_data->BeginProcessingOrderNumber(1);
|
| + stream.client->ReleaseFenceSync(release_count);
|
| + stream.order_data->FinishProcessingOrderNumber(1);
|
|
|
| - EXPECT_EQ(0u, client_state->fence_sync_release());
|
| - EXPECT_FALSE(client_state->IsFenceSyncReleased(1));
|
| -
|
| - const uint32_t order_num =
|
| - order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get());
|
| - order_data->BeginProcessingOrderNumber(order_num);
|
| - client->ReleaseFenceSync(1);
|
| - order_data->FinishProcessingOrderNumber(order_num);
|
| -
|
| - EXPECT_EQ(1u, client_state->fence_sync_release());
|
| - EXPECT_TRUE(client_state->IsFenceSyncReleased(1));
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, MultipleClientsPerOrderData) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kCmdBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kCmdBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| - scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create();
|
| - std::unique_ptr<SyncPointClient> client1 =
|
| - sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId,
|
| - kBufferId1);
|
| - std::unique_ptr<SyncPointClient> client2 =
|
| - sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId,
|
| - kBufferId2);
|
| + SyncPointStream stream1(sync_point_manager_.get(), kNamespaceId,
|
| + kCmdBufferId1);
|
| + SyncPointStream stream2(sync_point_manager_.get(), kNamespaceId,
|
| + kCmdBufferId2);
|
|
|
| - scoped_refptr<SyncPointClientState> client_state1 = client1->client_state();
|
| - scoped_refptr<SyncPointClientState> client_state2 = client2->client_state();
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token1(kNamespaceId, 0, kCmdBufferId1, release_count);
|
| + stream1.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| - const uint32_t order_num =
|
| - order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get());
|
| - order_data->BeginProcessingOrderNumber(order_num);
|
| - client1->ReleaseFenceSync(1);
|
| - order_data->FinishProcessingOrderNumber(order_num);
|
| + SyncToken sync_token2(kNamespaceId, 0, kCmdBufferId2, release_count);
|
| + stream2.AllocateOrderNum(sync_point_manager_.get());
|
| +
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token1));
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token2));
|
|
|
| - EXPECT_TRUE(client_state1->IsFenceSyncReleased(1));
|
| - EXPECT_FALSE(client_state2->IsFenceSyncReleased(1));
|
| + stream1.order_data->BeginProcessingOrderNumber(1);
|
| + stream1.client->ReleaseFenceSync(release_count);
|
| + stream1.order_data->FinishProcessingOrderNumber(1);
|
| +
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token1));
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token2));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, BasicFenceSyncWaitRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| +
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| - ASSERT_TRUE(valid_wait);
|
| + EXPECT_TRUE(valid_wait);
|
| EXPECT_EQ(10, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| release_stream.BeginProcessing();
|
| - release_stream.client->ReleaseFenceSync(1);
|
| + release_stream.client->ReleaseFenceSync(release_count);
|
| EXPECT_EQ(123, test_num);
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, WaitOnSelfFails) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| - // Generate wait order number first.
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kWaitCmdBufferId, release_count);
|
| +
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - wait_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_FALSE(valid_wait);
|
| - EXPECT_EQ(123, test_num);
|
| + EXPECT_EQ(10, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, OutOfOrderRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| // Generate wait order number first.
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| +
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_FALSE(valid_wait);
|
| - EXPECT_EQ(123, test_num);
|
| + EXPECT_EQ(10, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, HigherOrderNumberRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| // Generate wait order number first.
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + 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(1);
|
| + release_stream.client->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;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| - EXPECT_TRUE(valid_wait);
|
| - EXPECT_EQ(123, test_num);
|
| + EXPECT_FALSE(valid_wait);
|
| + EXPECT_EQ(10, test_num);
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, DestroyedClientRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| +
|
| wait_stream.BeginProcessing();
|
| +
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| EXPECT_EQ(10, test_num);
|
| @@ -311,18 +292,18 @@ TEST_F(SyncPointManagerTest, DestroyedClientRelease) {
|
| // Destroying the client should release the wait.
|
| release_stream.client.reset();
|
| EXPECT_EQ(123, test_num);
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, NonExistentRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| // Assign release stream order [1] and wait stream order [2].
|
| // This test simply tests that a wait stream of order [2] waiting on
|
| @@ -331,31 +312,35 @@ TEST_F(SyncPointManagerTest, NonExistentRelease) {
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| +
|
| wait_stream.BeginProcessing();
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| EXPECT_EQ(10, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| // No release but finishing the order number should automatically release.
|
| release_stream.BeginProcessing();
|
| EXPECT_EQ(10, test_num);
|
| release_stream.EndProcessing();
|
| EXPECT_EQ(123, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, NonExistentRelease2) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| // Assign Release stream order [1] and assign Wait stream orders [2, 3].
|
| // This test is similar to the NonExistentRelease case except
|
| @@ -367,47 +352,52 @@ TEST_F(SyncPointManagerTest, NonExistentRelease2) {
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| +
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| // Have wait with order [3] to wait on release.
|
| wait_stream.BeginProcessing();
|
| - ASSERT_EQ(2u, wait_stream.order_data->current_order_num());
|
| + EXPECT_EQ(2u, wait_stream.order_data->current_order_num());
|
| wait_stream.EndProcessing();
|
| wait_stream.BeginProcessing();
|
| - ASSERT_EQ(3u, wait_stream.order_data->current_order_num());
|
| + EXPECT_EQ(3u, wait_stream.order_data->current_order_num());
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| EXPECT_EQ(10, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| // Even though release stream order [1] did not have a release, it
|
| // should have changed test_num although the fence sync is still not released.
|
| release_stream.BeginProcessing();
|
| - ASSERT_EQ(1u, release_stream.order_data->current_order_num());
|
| + EXPECT_EQ(1u, release_stream.order_data->current_order_num());
|
| release_stream.EndProcessing();
|
| - EXPECT_FALSE(release_stream.client->client_state()->IsFenceSyncReleased(1));
|
| EXPECT_EQ(123, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| // 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.BeginProcessing();
|
| - release_stream.client->ReleaseFenceSync(1);
|
| + release_stream.client->ReleaseFenceSync(release_count);
|
| release_stream.EndProcessing();
|
| EXPECT_EQ(1, test_num);
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| + CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO;
|
| + CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123);
|
| + CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234);
|
|
|
| SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| + kReleaseCmdBufferId);
|
| SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| + kWaitCmdBufferId);
|
|
|
| // Assign Release stream orders [1, 4] and assign Wait stream orders [2, 3].
|
| // Here we are testing that wait order [3] will wait on a fence sync
|
| @@ -420,15 +410,18 @@ TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) {
|
| wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| release_stream.AllocateOrderNum(sync_point_manager_.get());
|
|
|
| + uint64_t release_count = 1;
|
| + SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count);
|
| +
|
| // Have wait with order [3] to wait on release order [1] or [2].
|
| wait_stream.BeginProcessing();
|
| - ASSERT_EQ(2u, wait_stream.order_data->current_order_num());
|
| + EXPECT_EQ(2u, wait_stream.order_data->current_order_num());
|
| wait_stream.EndProcessing();
|
| wait_stream.BeginProcessing();
|
| - ASSERT_EQ(3u, wait_stream.order_data->current_order_num());
|
| + EXPECT_EQ(3u, wait_stream.order_data->current_order_num());
|
| int test_num = 10;
|
| - const bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| + bool valid_wait = wait_stream.client->Wait(
|
| + sync_token,
|
| base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| EXPECT_TRUE(valid_wait);
|
| EXPECT_EQ(10, test_num);
|
| @@ -436,74 +429,24 @@ TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) {
|
| // Release stream should know it should release fence sync by order [3],
|
| // so going through order [1] should not release it yet.
|
| release_stream.BeginProcessing();
|
| - ASSERT_EQ(1u, release_stream.order_data->current_order_num());
|
| + EXPECT_EQ(1u, release_stream.order_data->current_order_num());
|
| release_stream.EndProcessing();
|
| - EXPECT_FALSE(release_stream.client->client_state()->IsFenceSyncReleased(1));
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| EXPECT_EQ(10, test_num);
|
|
|
| // Beginning order [4] should immediately trigger the wait although the fence
|
| // sync is still not released yet.
|
| release_stream.BeginProcessing();
|
| - ASSERT_EQ(4u, release_stream.order_data->current_order_num());
|
| - EXPECT_FALSE(release_stream.client->client_state()->IsFenceSyncReleased(1));
|
| + EXPECT_EQ(4u, release_stream.order_data->current_order_num());
|
| EXPECT_EQ(123, test_num);
|
| + EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
|
|
| // Ensure that the wait callback does not get triggered again when it is
|
| // actually released.
|
| test_num = 1;
|
| release_stream.client->ReleaseFenceSync(1);
|
| EXPECT_EQ(1, test_num);
|
| -}
|
| -
|
| -TEST_F(SyncPointManagerTest, OnWaitCallbackTest) {
|
| - const CommandBufferNamespace kNamespaceId =
|
| - gpu::CommandBufferNamespace::GPU_IO;
|
| - const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123);
|
| - const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234);
|
| -
|
| - SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId1);
|
| - SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId,
|
| - kBufferId2);
|
| -
|
| - CommandBufferNamespace namespace_id = CommandBufferNamespace::INVALID;
|
| - CommandBufferId client_id;
|
| - release_stream.client->SetOnWaitCallback(
|
| - base::Bind(&SyncPointManagerTest::OnWait, &namespace_id, &client_id));
|
| -
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - wait_stream.AllocateOrderNum(sync_point_manager_.get());
|
| - release_stream.AllocateOrderNum(sync_point_manager_.get());
|
| -
|
| - wait_stream.BeginProcessing();
|
| - int test_num = 10;
|
| - bool valid_wait = wait_stream.client->Wait(
|
| - release_stream.client->client_state().get(), 1,
|
| - base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| - EXPECT_TRUE(valid_wait);
|
| - EXPECT_EQ(10, test_num);
|
| - EXPECT_EQ(kNamespaceId, namespace_id);
|
| - EXPECT_EQ(kBufferId2, client_id);
|
| -
|
| - release_stream.BeginProcessing();
|
| - release_stream.client->ReleaseFenceSync(1);
|
| - EXPECT_EQ(123, test_num);
|
| -
|
| - wait_stream.EndProcessing();
|
| -
|
| - namespace_id = CommandBufferNamespace::INVALID;
|
| - client_id = CommandBufferId();
|
| - test_num = 10;
|
| - valid_wait = wait_stream.client->WaitOutOfOrder(
|
| - release_stream.client->client_state().get(), 2,
|
| - base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123));
|
| - EXPECT_TRUE(valid_wait);
|
| - EXPECT_EQ(10, test_num);
|
| - EXPECT_EQ(kNamespaceId, namespace_id);
|
| - EXPECT_EQ(kBufferId2, client_id);
|
| -
|
| - release_stream.client->ReleaseFenceSync(2);
|
| - EXPECT_EQ(123, test_num);
|
| + EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token));
|
| }
|
|
|
| } // namespace gpu
|
|
|