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

Unified Diff: gpu/command_buffer/service/sync_point_manager_unittest.cc

Issue 2752393002: gpu: Add SequenceId for identifying sync point sequences. (Closed)
Patch Set: piman's review 3 Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/sync_point_manager.cc ('k') | gpu/command_buffer/tests/fuzzer_main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
}
« no previous file with comments | « gpu/command_buffer/service/sync_point_manager.cc ('k') | gpu/command_buffer/tests/fuzzer_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698