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

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

Issue 2722883002: gpu: Allow waiting on sync tokens without sync token client. (Closed)
Patch Set: review Created 3 years, 10 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 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
« 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