| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <queue> | 8 #include <queue> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/memory/ptr_util.h" |
| 11 #include "gpu/command_buffer/service/sync_point_manager.h" | 12 #include "gpu/command_buffer/service/sync_point_manager.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 14 |
| 14 namespace gpu { | 15 namespace gpu { |
| 15 | 16 |
| 16 class SyncPointManagerTest : public testing::Test { | 17 class SyncPointManagerTest : public testing::Test { |
| 17 public: | 18 public: |
| 18 SyncPointManagerTest() {} | 19 SyncPointManagerTest() : sync_point_manager_(new SyncPointManager) {} |
| 19 | |
| 20 ~SyncPointManagerTest() override {} | 20 ~SyncPointManagerTest() override {} |
| 21 | 21 |
| 22 protected: | 22 protected: |
| 23 void SetUp() override { | |
| 24 sync_point_manager_.reset(new SyncPointManager(false)); | |
| 25 } | |
| 26 | |
| 27 void TearDown() override { sync_point_manager_.reset(); } | |
| 28 | |
| 29 // Simple static function which can be used to test callbacks. | 23 // Simple static function which can be used to test callbacks. |
| 30 static void SetIntegerFunction(int* test, int value) { *test = value; } | 24 static void SetIntegerFunction(int* test, int value) { *test = value; } |
| 31 | 25 |
| 32 // Simple static function used for testing OnWaitCallback. | |
| 33 static void OnWait(CommandBufferNamespace* namespace_id_ptr, | |
| 34 CommandBufferId* client_id_ptr, | |
| 35 CommandBufferNamespace namespace_id, | |
| 36 CommandBufferId client_id) { | |
| 37 *namespace_id_ptr = namespace_id; | |
| 38 *client_id_ptr = client_id; | |
| 39 } | |
| 40 | |
| 41 std::unique_ptr<SyncPointManager> sync_point_manager_; | 26 std::unique_ptr<SyncPointManager> sync_point_manager_; |
| 42 }; | 27 }; |
| 43 | 28 |
| 44 struct SyncPointStream { | 29 struct SyncPointStream { |
| 45 scoped_refptr<SyncPointOrderData> order_data; | 30 scoped_refptr<SyncPointOrderData> order_data; |
| 46 std::unique_ptr<SyncPointClient> client; | 31 std::unique_ptr<SyncPointClient> client; |
| 47 std::queue<uint32_t> order_numbers; | 32 std::queue<uint32_t> order_numbers; |
| 48 | 33 |
| 49 SyncPointStream(SyncPointManager* sync_point_manager, | 34 SyncPointStream(SyncPointManager* sync_point_manager, |
| 50 CommandBufferNamespace namespace_id, | 35 CommandBufferNamespace namespace_id, |
| 51 CommandBufferId command_buffer_id) | 36 CommandBufferId command_buffer_id) |
| 52 : order_data(SyncPointOrderData::Create()), | 37 : order_data(SyncPointOrderData::Create()), |
| 53 client(sync_point_manager->CreateSyncPointClient(order_data, | 38 client(base::MakeUnique<SyncPointClient>(sync_point_manager, |
| 54 namespace_id, | 39 order_data, |
| 55 command_buffer_id)) {} | 40 namespace_id, |
| 41 command_buffer_id)) {} |
| 56 | 42 |
| 57 ~SyncPointStream() { | 43 ~SyncPointStream() { |
| 58 order_data->Destroy(); | 44 order_data->Destroy(); |
| 59 order_data = nullptr; | 45 order_data = nullptr; |
| 60 } | 46 } |
| 61 | 47 |
| 62 void AllocateOrderNum(SyncPointManager* sync_point_manager) { | 48 void AllocateOrderNum(SyncPointManager* sync_point_manager) { |
| 63 order_numbers.push( | 49 order_numbers.push( |
| 64 order_data->GenerateUnprocessedOrderNumber(sync_point_manager)); | 50 order_data->GenerateUnprocessedOrderNumber(sync_point_manager)); |
| 65 } | 51 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 76 } | 62 } |
| 77 }; | 63 }; |
| 78 | 64 |
| 79 TEST_F(SyncPointManagerTest, BasicSyncPointOrderDataTest) { | 65 TEST_F(SyncPointManagerTest, BasicSyncPointOrderDataTest) { |
| 80 scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create(); | 66 scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create(); |
| 81 | 67 |
| 82 EXPECT_EQ(0u, order_data->current_order_num()); | 68 EXPECT_EQ(0u, order_data->current_order_num()); |
| 83 EXPECT_EQ(0u, order_data->processed_order_num()); | 69 EXPECT_EQ(0u, order_data->processed_order_num()); |
| 84 EXPECT_EQ(0u, order_data->unprocessed_order_num()); | 70 EXPECT_EQ(0u, order_data->unprocessed_order_num()); |
| 85 | 71 |
| 86 const uint32_t order_num = | 72 uint32_t order_num = |
| 87 order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get()); | 73 order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get()); |
| 88 EXPECT_EQ(1u, order_num); | 74 EXPECT_EQ(1u, order_num); |
| 89 | 75 |
| 90 EXPECT_EQ(0u, order_data->current_order_num()); | 76 EXPECT_EQ(0u, order_data->current_order_num()); |
| 91 EXPECT_EQ(0u, order_data->processed_order_num()); | 77 EXPECT_EQ(0u, order_data->processed_order_num()); |
| 92 EXPECT_EQ(order_num, order_data->unprocessed_order_num()); | 78 EXPECT_EQ(order_num, order_data->unprocessed_order_num()); |
| 93 | 79 |
| 94 order_data->BeginProcessingOrderNumber(order_num); | 80 order_data->BeginProcessingOrderNumber(order_num); |
| 95 EXPECT_EQ(order_num, order_data->current_order_num()); | 81 EXPECT_EQ(order_num, order_data->current_order_num()); |
| 96 EXPECT_EQ(0u, order_data->processed_order_num()); | 82 EXPECT_EQ(0u, order_data->processed_order_num()); |
| 97 EXPECT_EQ(order_num, order_data->unprocessed_order_num()); | 83 EXPECT_EQ(order_num, order_data->unprocessed_order_num()); |
| 98 EXPECT_TRUE(order_data->IsProcessingOrderNumber()); | 84 EXPECT_TRUE(order_data->IsProcessingOrderNumber()); |
| 99 | 85 |
| 100 order_data->PauseProcessingOrderNumber(order_num); | 86 order_data->PauseProcessingOrderNumber(order_num); |
| 101 EXPECT_FALSE(order_data->IsProcessingOrderNumber()); | 87 EXPECT_FALSE(order_data->IsProcessingOrderNumber()); |
| 102 | 88 |
| 103 order_data->BeginProcessingOrderNumber(order_num); | 89 order_data->BeginProcessingOrderNumber(order_num); |
| 104 EXPECT_TRUE(order_data->IsProcessingOrderNumber()); | 90 EXPECT_TRUE(order_data->IsProcessingOrderNumber()); |
| 105 | 91 |
| 106 order_data->FinishProcessingOrderNumber(order_num); | 92 order_data->FinishProcessingOrderNumber(order_num); |
| 107 EXPECT_EQ(order_num, order_data->current_order_num()); | 93 EXPECT_EQ(order_num, order_data->current_order_num()); |
| 108 EXPECT_EQ(order_num, order_data->processed_order_num()); | 94 EXPECT_EQ(order_num, order_data->processed_order_num()); |
| 109 EXPECT_EQ(order_num, order_data->unprocessed_order_num()); | 95 EXPECT_EQ(order_num, order_data->unprocessed_order_num()); |
| 110 EXPECT_FALSE(order_data->IsProcessingOrderNumber()); | 96 EXPECT_FALSE(order_data->IsProcessingOrderNumber()); |
| 111 } | 97 } |
| 112 | 98 |
| 113 TEST_F(SyncPointManagerTest, SyncPointClientRegistration) { | 99 TEST_F(SyncPointManagerTest, BasicFenceSyncRelease) { |
| 114 const CommandBufferNamespace kNamespaceId = | 100 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 115 gpu::CommandBufferNamespace::GPU_IO; | 101 CommandBufferId kBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 116 const CommandBufferId kBufferId = CommandBufferId::FromUnsafeValue(0x123); | |
| 117 | 102 |
| 118 scoped_refptr<SyncPointClientState> empty_state = | 103 uint64_t release_count = 1; |
| 119 sync_point_manager_->GetSyncPointClientState(kNamespaceId, kBufferId); | 104 SyncToken sync_token(kNamespaceId, 0, kBufferId, release_count); |
| 120 EXPECT_FALSE(empty_state); | |
| 121 | 105 |
| 122 scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create(); | 106 // Can't wait for sync token before client is registered. |
| 107 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 123 | 108 |
| 124 std::unique_ptr<SyncPointClient> client = | 109 SyncPointStream stream(sync_point_manager_.get(), kNamespaceId, kBufferId); |
| 125 sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId, | |
| 126 kBufferId); | |
| 127 | 110 |
| 128 EXPECT_EQ(order_data, client->client_state()->order_data()); | 111 stream.AllocateOrderNum(sync_point_manager_.get()); |
| 129 EXPECT_EQ( | |
| 130 client->client_state(), | |
| 131 sync_point_manager_->GetSyncPointClientState(kNamespaceId, kBufferId)); | |
| 132 } | |
| 133 | 112 |
| 134 TEST_F(SyncPointManagerTest, BasicFenceSyncRelease) { | 113 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 135 const CommandBufferNamespace kNamespaceId = | |
| 136 gpu::CommandBufferNamespace::GPU_IO; | |
| 137 const CommandBufferId kBufferId = CommandBufferId::FromUnsafeValue(0x123); | |
| 138 | 114 |
| 139 scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create(); | 115 stream.order_data->BeginProcessingOrderNumber(1); |
| 140 std::unique_ptr<SyncPointClient> client = | 116 stream.client->ReleaseFenceSync(release_count); |
| 141 sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId, | 117 stream.order_data->FinishProcessingOrderNumber(1); |
| 142 kBufferId); | |
| 143 scoped_refptr<SyncPointClientState> client_state = client->client_state(); | |
| 144 | 118 |
| 145 EXPECT_EQ(0u, client_state->fence_sync_release()); | 119 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 146 EXPECT_FALSE(client_state->IsFenceSyncReleased(1)); | |
| 147 | |
| 148 const uint32_t order_num = | |
| 149 order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get()); | |
| 150 order_data->BeginProcessingOrderNumber(order_num); | |
| 151 client->ReleaseFenceSync(1); | |
| 152 order_data->FinishProcessingOrderNumber(order_num); | |
| 153 | |
| 154 EXPECT_EQ(1u, client_state->fence_sync_release()); | |
| 155 EXPECT_TRUE(client_state->IsFenceSyncReleased(1)); | |
| 156 } | 120 } |
| 157 | 121 |
| 158 TEST_F(SyncPointManagerTest, MultipleClientsPerOrderData) { | 122 TEST_F(SyncPointManagerTest, MultipleClientsPerOrderData) { |
| 159 const CommandBufferNamespace kNamespaceId = | 123 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 160 gpu::CommandBufferNamespace::GPU_IO; | 124 CommandBufferId kCmdBufferId1 = CommandBufferId::FromUnsafeValue(0x123); |
| 161 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 125 CommandBufferId kCmdBufferId2 = CommandBufferId::FromUnsafeValue(0x234); |
| 162 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 163 | 126 |
| 164 scoped_refptr<SyncPointOrderData> order_data = SyncPointOrderData::Create(); | 127 SyncPointStream stream1(sync_point_manager_.get(), kNamespaceId, |
| 165 std::unique_ptr<SyncPointClient> client1 = | 128 kCmdBufferId1); |
| 166 sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId, | 129 SyncPointStream stream2(sync_point_manager_.get(), kNamespaceId, |
| 167 kBufferId1); | 130 kCmdBufferId2); |
| 168 std::unique_ptr<SyncPointClient> client2 = | |
| 169 sync_point_manager_->CreateSyncPointClient(order_data, kNamespaceId, | |
| 170 kBufferId2); | |
| 171 | 131 |
| 172 scoped_refptr<SyncPointClientState> client_state1 = client1->client_state(); | 132 uint64_t release_count = 1; |
| 173 scoped_refptr<SyncPointClientState> client_state2 = client2->client_state(); | 133 SyncToken sync_token1(kNamespaceId, 0, kCmdBufferId1, release_count); |
| 134 stream1.AllocateOrderNum(sync_point_manager_.get()); |
| 174 | 135 |
| 175 const uint32_t order_num = | 136 SyncToken sync_token2(kNamespaceId, 0, kCmdBufferId2, release_count); |
| 176 order_data->GenerateUnprocessedOrderNumber(sync_point_manager_.get()); | 137 stream2.AllocateOrderNum(sync_point_manager_.get()); |
| 177 order_data->BeginProcessingOrderNumber(order_num); | |
| 178 client1->ReleaseFenceSync(1); | |
| 179 order_data->FinishProcessingOrderNumber(order_num); | |
| 180 | 138 |
| 181 EXPECT_TRUE(client_state1->IsFenceSyncReleased(1)); | 139 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token1)); |
| 182 EXPECT_FALSE(client_state2->IsFenceSyncReleased(1)); | 140 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token2)); |
| 141 |
| 142 stream1.order_data->BeginProcessingOrderNumber(1); |
| 143 stream1.client->ReleaseFenceSync(release_count); |
| 144 stream1.order_data->FinishProcessingOrderNumber(1); |
| 145 |
| 146 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token1)); |
| 147 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token2)); |
| 183 } | 148 } |
| 184 | 149 |
| 185 TEST_F(SyncPointManagerTest, BasicFenceSyncWaitRelease) { | 150 TEST_F(SyncPointManagerTest, BasicFenceSyncWaitRelease) { |
| 186 const CommandBufferNamespace kNamespaceId = | 151 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 187 gpu::CommandBufferNamespace::GPU_IO; | 152 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 188 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 153 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 189 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 190 | 154 |
| 191 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 155 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 192 kBufferId1); | 156 kReleaseCmdBufferId); |
| 193 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 157 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 194 kBufferId2); | 158 kWaitCmdBufferId); |
| 195 | 159 |
| 196 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 160 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 197 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 161 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 198 | 162 |
| 163 uint64_t release_count = 1; |
| 164 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 165 |
| 199 wait_stream.BeginProcessing(); | 166 wait_stream.BeginProcessing(); |
| 200 int test_num = 10; | 167 int test_num = 10; |
| 201 const bool valid_wait = wait_stream.client->Wait( | 168 bool valid_wait = wait_stream.client->Wait( |
| 202 release_stream.client->client_state().get(), 1, | 169 sync_token, |
| 203 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 170 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 204 ASSERT_TRUE(valid_wait); | 171 EXPECT_TRUE(valid_wait); |
| 205 EXPECT_EQ(10, test_num); | 172 EXPECT_EQ(10, test_num); |
| 173 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 206 | 174 |
| 207 release_stream.BeginProcessing(); | 175 release_stream.BeginProcessing(); |
| 208 release_stream.client->ReleaseFenceSync(1); | 176 release_stream.client->ReleaseFenceSync(release_count); |
| 209 EXPECT_EQ(123, test_num); | 177 EXPECT_EQ(123, test_num); |
| 178 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 210 } | 179 } |
| 211 | 180 |
| 212 TEST_F(SyncPointManagerTest, WaitOnSelfFails) { | 181 TEST_F(SyncPointManagerTest, WaitOnSelfFails) { |
| 213 const CommandBufferNamespace kNamespaceId = | 182 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 214 gpu::CommandBufferNamespace::GPU_IO; | 183 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 215 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 184 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 216 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 217 | 185 |
| 218 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 186 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 219 kBufferId1); | 187 kReleaseCmdBufferId); |
| 220 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 188 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 221 kBufferId2); | 189 kWaitCmdBufferId); |
| 222 | 190 |
| 223 // Generate wait order number first. | |
| 224 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 191 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 225 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 192 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 226 | 193 |
| 194 uint64_t release_count = 1; |
| 195 SyncToken sync_token(kNamespaceId, 0, kWaitCmdBufferId, release_count); |
| 196 |
| 227 wait_stream.BeginProcessing(); | 197 wait_stream.BeginProcessing(); |
| 228 int test_num = 10; | 198 int test_num = 10; |
| 229 const bool valid_wait = wait_stream.client->Wait( | 199 bool valid_wait = wait_stream.client->Wait( |
| 230 wait_stream.client->client_state().get(), 1, | 200 sync_token, |
| 231 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 201 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 232 EXPECT_FALSE(valid_wait); | 202 EXPECT_FALSE(valid_wait); |
| 233 EXPECT_EQ(123, test_num); | 203 EXPECT_EQ(10, test_num); |
| 204 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 234 } | 205 } |
| 235 | 206 |
| 236 TEST_F(SyncPointManagerTest, OutOfOrderRelease) { | 207 TEST_F(SyncPointManagerTest, OutOfOrderRelease) { |
| 237 const CommandBufferNamespace kNamespaceId = | 208 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 238 gpu::CommandBufferNamespace::GPU_IO; | 209 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 239 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 210 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 240 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 241 | 211 |
| 242 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 212 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 243 kBufferId1); | 213 kReleaseCmdBufferId); |
| 244 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 214 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 245 kBufferId2); | 215 kWaitCmdBufferId); |
| 246 | 216 |
| 247 // Generate wait order number first. | 217 // Generate wait order number first. |
| 248 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 218 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 249 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 219 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 250 | 220 |
| 221 uint64_t release_count = 1; |
| 222 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 223 |
| 251 wait_stream.BeginProcessing(); | 224 wait_stream.BeginProcessing(); |
| 252 int test_num = 10; | 225 int test_num = 10; |
| 253 const bool valid_wait = wait_stream.client->Wait( | 226 bool valid_wait = wait_stream.client->Wait( |
| 254 release_stream.client->client_state().get(), 1, | 227 sync_token, |
| 255 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 228 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 256 EXPECT_FALSE(valid_wait); | 229 EXPECT_FALSE(valid_wait); |
| 257 EXPECT_EQ(123, test_num); | 230 EXPECT_EQ(10, test_num); |
| 231 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 258 } | 232 } |
| 259 | 233 |
| 260 TEST_F(SyncPointManagerTest, HigherOrderNumberRelease) { | 234 TEST_F(SyncPointManagerTest, HigherOrderNumberRelease) { |
| 261 const CommandBufferNamespace kNamespaceId = | 235 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 262 gpu::CommandBufferNamespace::GPU_IO; | 236 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 263 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 237 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 264 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 265 | 238 |
| 266 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 239 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 267 kBufferId1); | 240 kReleaseCmdBufferId); |
| 268 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 241 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 269 kBufferId2); | 242 kWaitCmdBufferId); |
| 270 | 243 |
| 271 // Generate wait order number first. | 244 // Generate wait order number first. |
| 272 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 245 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 273 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 246 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 274 | 247 |
| 248 uint64_t release_count = 1; |
| 249 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 250 |
| 275 // Order number was higher but it was actually released. | 251 // Order number was higher but it was actually released. |
| 276 release_stream.BeginProcessing(); | 252 release_stream.BeginProcessing(); |
| 277 release_stream.client->ReleaseFenceSync(1); | 253 release_stream.client->ReleaseFenceSync(release_count); |
| 278 release_stream.EndProcessing(); | 254 release_stream.EndProcessing(); |
| 279 | 255 |
| 256 // Release stream has already released so there's no need to wait. |
| 280 wait_stream.BeginProcessing(); | 257 wait_stream.BeginProcessing(); |
| 281 int test_num = 10; | 258 int test_num = 10; |
| 282 const bool valid_wait = wait_stream.client->Wait( | 259 bool valid_wait = wait_stream.client->Wait( |
| 283 release_stream.client->client_state().get(), 1, | 260 sync_token, |
| 284 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 261 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 285 EXPECT_TRUE(valid_wait); | 262 EXPECT_FALSE(valid_wait); |
| 286 EXPECT_EQ(123, test_num); | 263 EXPECT_EQ(10, test_num); |
| 264 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 287 } | 265 } |
| 288 | 266 |
| 289 TEST_F(SyncPointManagerTest, DestroyedClientRelease) { | 267 TEST_F(SyncPointManagerTest, DestroyedClientRelease) { |
| 290 const CommandBufferNamespace kNamespaceId = | 268 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 291 gpu::CommandBufferNamespace::GPU_IO; | 269 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 292 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 270 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 293 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 294 | 271 |
| 295 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 272 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 296 kBufferId1); | 273 kReleaseCmdBufferId); |
| 297 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 274 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 298 kBufferId2); | 275 kWaitCmdBufferId); |
| 299 | 276 |
| 300 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 277 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 301 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 278 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 302 | 279 |
| 280 uint64_t release_count = 1; |
| 281 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 282 |
| 303 wait_stream.BeginProcessing(); | 283 wait_stream.BeginProcessing(); |
| 284 |
| 304 int test_num = 10; | 285 int test_num = 10; |
| 305 const bool valid_wait = wait_stream.client->Wait( | 286 bool valid_wait = wait_stream.client->Wait( |
| 306 release_stream.client->client_state().get(), 1, | 287 sync_token, |
| 307 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 288 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 308 EXPECT_TRUE(valid_wait); | 289 EXPECT_TRUE(valid_wait); |
| 309 EXPECT_EQ(10, test_num); | 290 EXPECT_EQ(10, test_num); |
| 310 | 291 |
| 311 // Destroying the client should release the wait. | 292 // Destroying the client should release the wait. |
| 312 release_stream.client.reset(); | 293 release_stream.client.reset(); |
| 313 EXPECT_EQ(123, test_num); | 294 EXPECT_EQ(123, test_num); |
| 295 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 314 } | 296 } |
| 315 | 297 |
| 316 TEST_F(SyncPointManagerTest, NonExistentRelease) { | 298 TEST_F(SyncPointManagerTest, NonExistentRelease) { |
| 317 const CommandBufferNamespace kNamespaceId = | 299 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 318 gpu::CommandBufferNamespace::GPU_IO; | 300 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 319 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 301 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 320 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 321 | 302 |
| 322 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 303 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 323 kBufferId1); | 304 kReleaseCmdBufferId); |
| 324 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 305 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 325 kBufferId2); | 306 kWaitCmdBufferId); |
| 326 | 307 |
| 327 // Assign release stream order [1] and wait stream order [2]. | 308 // Assign release stream order [1] and wait stream order [2]. |
| 328 // This test simply tests that a wait stream of order [2] waiting on | 309 // This test simply tests that a wait stream of order [2] waiting on |
| 329 // release stream of order [1] will still release the fence sync even | 310 // release stream of order [1] will still release the fence sync even |
| 330 // though nothing was released. | 311 // though nothing was released. |
| 331 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 312 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 332 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 313 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 333 | 314 |
| 315 uint64_t release_count = 1; |
| 316 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 317 |
| 334 wait_stream.BeginProcessing(); | 318 wait_stream.BeginProcessing(); |
| 335 int test_num = 10; | 319 int test_num = 10; |
| 336 const bool valid_wait = wait_stream.client->Wait( | 320 bool valid_wait = wait_stream.client->Wait( |
| 337 release_stream.client->client_state().get(), 1, | 321 sync_token, |
| 338 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 322 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 339 EXPECT_TRUE(valid_wait); | 323 EXPECT_TRUE(valid_wait); |
| 340 EXPECT_EQ(10, test_num); | 324 EXPECT_EQ(10, test_num); |
| 325 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 341 | 326 |
| 342 // No release but finishing the order number should automatically release. | 327 // No release but finishing the order number should automatically release. |
| 343 release_stream.BeginProcessing(); | 328 release_stream.BeginProcessing(); |
| 344 EXPECT_EQ(10, test_num); | 329 EXPECT_EQ(10, test_num); |
| 345 release_stream.EndProcessing(); | 330 release_stream.EndProcessing(); |
| 346 EXPECT_EQ(123, test_num); | 331 EXPECT_EQ(123, test_num); |
| 332 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 347 } | 333 } |
| 348 | 334 |
| 349 TEST_F(SyncPointManagerTest, NonExistentRelease2) { | 335 TEST_F(SyncPointManagerTest, NonExistentRelease2) { |
| 350 const CommandBufferNamespace kNamespaceId = | 336 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 351 gpu::CommandBufferNamespace::GPU_IO; | 337 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 352 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 338 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 353 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 354 | 339 |
| 355 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 340 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 356 kBufferId1); | 341 kReleaseCmdBufferId); |
| 357 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 342 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 358 kBufferId2); | 343 kWaitCmdBufferId); |
| 359 | 344 |
| 360 // Assign Release stream order [1] and assign Wait stream orders [2, 3]. | 345 // Assign Release stream order [1] and assign Wait stream orders [2, 3]. |
| 361 // This test is similar to the NonExistentRelease case except | 346 // This test is similar to the NonExistentRelease case except |
| 362 // we place an extra order number in between the release and wait. | 347 // we place an extra order number in between the release and wait. |
| 363 // The wait stream [3] is waiting on release stream [1] even though | 348 // The wait stream [3] is waiting on release stream [1] even though |
| 364 // order [2] was also generated. Although order [2] only exists on the | 349 // order [2] was also generated. Although order [2] only exists on the |
| 365 // wait stream so the release stream should only know about order [1]. | 350 // wait stream so the release stream should only know about order [1]. |
| 366 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 351 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 367 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 352 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 368 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 353 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 369 | 354 |
| 355 uint64_t release_count = 1; |
| 356 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 357 |
| 358 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 370 // Have wait with order [3] to wait on release. | 359 // Have wait with order [3] to wait on release. |
| 371 wait_stream.BeginProcessing(); | 360 wait_stream.BeginProcessing(); |
| 372 ASSERT_EQ(2u, wait_stream.order_data->current_order_num()); | 361 EXPECT_EQ(2u, wait_stream.order_data->current_order_num()); |
| 373 wait_stream.EndProcessing(); | 362 wait_stream.EndProcessing(); |
| 374 wait_stream.BeginProcessing(); | 363 wait_stream.BeginProcessing(); |
| 375 ASSERT_EQ(3u, wait_stream.order_data->current_order_num()); | 364 EXPECT_EQ(3u, wait_stream.order_data->current_order_num()); |
| 376 int test_num = 10; | 365 int test_num = 10; |
| 377 const bool valid_wait = wait_stream.client->Wait( | 366 bool valid_wait = wait_stream.client->Wait( |
| 378 release_stream.client->client_state().get(), 1, | 367 sync_token, |
| 379 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 368 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 380 EXPECT_TRUE(valid_wait); | 369 EXPECT_TRUE(valid_wait); |
| 381 EXPECT_EQ(10, test_num); | 370 EXPECT_EQ(10, test_num); |
| 371 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 382 | 372 |
| 383 // Even though release stream order [1] did not have a release, it | 373 // Even though release stream order [1] did not have a release, it |
| 384 // should have changed test_num although the fence sync is still not released. | 374 // should have changed test_num although the fence sync is still not released. |
| 385 release_stream.BeginProcessing(); | 375 release_stream.BeginProcessing(); |
| 386 ASSERT_EQ(1u, release_stream.order_data->current_order_num()); | 376 EXPECT_EQ(1u, release_stream.order_data->current_order_num()); |
| 387 release_stream.EndProcessing(); | 377 release_stream.EndProcessing(); |
| 388 EXPECT_FALSE(release_stream.client->client_state()->IsFenceSyncReleased(1)); | |
| 389 EXPECT_EQ(123, test_num); | 378 EXPECT_EQ(123, test_num); |
| 379 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 390 | 380 |
| 391 // Ensure that the wait callback does not get triggered again when it is | 381 // Ensure that the wait callback does not get triggered again when it is |
| 392 // actually released. | 382 // actually released. |
| 393 test_num = 1; | 383 test_num = 1; |
| 394 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 384 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 395 release_stream.BeginProcessing(); | 385 release_stream.BeginProcessing(); |
| 396 release_stream.client->ReleaseFenceSync(1); | 386 release_stream.client->ReleaseFenceSync(release_count); |
| 397 release_stream.EndProcessing(); | 387 release_stream.EndProcessing(); |
| 398 EXPECT_EQ(1, test_num); | 388 EXPECT_EQ(1, test_num); |
| 389 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 399 } | 390 } |
| 400 | 391 |
| 401 TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) { | 392 TEST_F(SyncPointManagerTest, NonExistentOrderNumRelease) { |
| 402 const CommandBufferNamespace kNamespaceId = | 393 CommandBufferNamespace kNamespaceId = gpu::CommandBufferNamespace::GPU_IO; |
| 403 gpu::CommandBufferNamespace::GPU_IO; | 394 CommandBufferId kReleaseCmdBufferId = CommandBufferId::FromUnsafeValue(0x123); |
| 404 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | 395 CommandBufferId kWaitCmdBufferId = CommandBufferId::FromUnsafeValue(0x234); |
| 405 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 406 | 396 |
| 407 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | 397 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, |
| 408 kBufferId1); | 398 kReleaseCmdBufferId); |
| 409 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | 399 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, |
| 410 kBufferId2); | 400 kWaitCmdBufferId); |
| 411 | 401 |
| 412 // Assign Release stream orders [1, 4] and assign Wait stream orders [2, 3]. | 402 // Assign Release stream orders [1, 4] and assign Wait stream orders [2, 3]. |
| 413 // Here we are testing that wait order [3] will wait on a fence sync | 403 // Here we are testing that wait order [3] will wait on a fence sync |
| 414 // in either order [1] or order [2]. Order [2] was not actually assigned | 404 // in either order [1] or order [2]. Order [2] was not actually assigned |
| 415 // to the release stream so it is essentially non-existent to the release | 405 // to the release stream so it is essentially non-existent to the release |
| 416 // stream's point of view. Once the release stream begins processing the next | 406 // stream's point of view. Once the release stream begins processing the next |
| 417 // order [3], it should realize order [2] didn't exist and release the fence. | 407 // order [3], it should realize order [2] didn't exist and release the fence. |
| 418 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 408 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 419 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 409 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 420 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | 410 wait_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 421 release_stream.AllocateOrderNum(sync_point_manager_.get()); | 411 release_stream.AllocateOrderNum(sync_point_manager_.get()); |
| 422 | 412 |
| 413 uint64_t release_count = 1; |
| 414 SyncToken sync_token(kNamespaceId, 0, kReleaseCmdBufferId, release_count); |
| 415 |
| 423 // Have wait with order [3] to wait on release order [1] or [2]. | 416 // Have wait with order [3] to wait on release order [1] or [2]. |
| 424 wait_stream.BeginProcessing(); | 417 wait_stream.BeginProcessing(); |
| 425 ASSERT_EQ(2u, wait_stream.order_data->current_order_num()); | 418 EXPECT_EQ(2u, wait_stream.order_data->current_order_num()); |
| 426 wait_stream.EndProcessing(); | 419 wait_stream.EndProcessing(); |
| 427 wait_stream.BeginProcessing(); | 420 wait_stream.BeginProcessing(); |
| 428 ASSERT_EQ(3u, wait_stream.order_data->current_order_num()); | 421 EXPECT_EQ(3u, wait_stream.order_data->current_order_num()); |
| 429 int test_num = 10; | 422 int test_num = 10; |
| 430 const bool valid_wait = wait_stream.client->Wait( | 423 bool valid_wait = wait_stream.client->Wait( |
| 431 release_stream.client->client_state().get(), 1, | 424 sync_token, |
| 432 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | 425 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); |
| 433 EXPECT_TRUE(valid_wait); | 426 EXPECT_TRUE(valid_wait); |
| 434 EXPECT_EQ(10, test_num); | 427 EXPECT_EQ(10, test_num); |
| 435 | 428 |
| 436 // Release stream should know it should release fence sync by order [3], | 429 // Release stream should know it should release fence sync by order [3], |
| 437 // so going through order [1] should not release it yet. | 430 // so going through order [1] should not release it yet. |
| 438 release_stream.BeginProcessing(); | 431 release_stream.BeginProcessing(); |
| 439 ASSERT_EQ(1u, release_stream.order_data->current_order_num()); | 432 EXPECT_EQ(1u, release_stream.order_data->current_order_num()); |
| 440 release_stream.EndProcessing(); | 433 release_stream.EndProcessing(); |
| 441 EXPECT_FALSE(release_stream.client->client_state()->IsFenceSyncReleased(1)); | 434 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 442 EXPECT_EQ(10, test_num); | 435 EXPECT_EQ(10, test_num); |
| 443 | 436 |
| 444 // Beginning order [4] should immediately trigger the wait although the fence | 437 // Beginning order [4] should immediately trigger the wait although the fence |
| 445 // sync is still not released yet. | 438 // sync is still not released yet. |
| 446 release_stream.BeginProcessing(); | 439 release_stream.BeginProcessing(); |
| 447 ASSERT_EQ(4u, release_stream.order_data->current_order_num()); | 440 EXPECT_EQ(4u, release_stream.order_data->current_order_num()); |
| 448 EXPECT_FALSE(release_stream.client->client_state()->IsFenceSyncReleased(1)); | |
| 449 EXPECT_EQ(123, test_num); | 441 EXPECT_EQ(123, test_num); |
| 442 EXPECT_FALSE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 450 | 443 |
| 451 // Ensure that the wait callback does not get triggered again when it is | 444 // Ensure that the wait callback does not get triggered again when it is |
| 452 // actually released. | 445 // actually released. |
| 453 test_num = 1; | 446 test_num = 1; |
| 454 release_stream.client->ReleaseFenceSync(1); | 447 release_stream.client->ReleaseFenceSync(1); |
| 455 EXPECT_EQ(1, test_num); | 448 EXPECT_EQ(1, test_num); |
| 456 } | 449 EXPECT_TRUE(sync_point_manager_->IsSyncTokenReleased(sync_token)); |
| 457 | |
| 458 TEST_F(SyncPointManagerTest, OnWaitCallbackTest) { | |
| 459 const CommandBufferNamespace kNamespaceId = | |
| 460 gpu::CommandBufferNamespace::GPU_IO; | |
| 461 const CommandBufferId kBufferId1 = CommandBufferId::FromUnsafeValue(0x123); | |
| 462 const CommandBufferId kBufferId2 = CommandBufferId::FromUnsafeValue(0x234); | |
| 463 | |
| 464 SyncPointStream release_stream(sync_point_manager_.get(), kNamespaceId, | |
| 465 kBufferId1); | |
| 466 SyncPointStream wait_stream(sync_point_manager_.get(), kNamespaceId, | |
| 467 kBufferId2); | |
| 468 | |
| 469 CommandBufferNamespace namespace_id = CommandBufferNamespace::INVALID; | |
| 470 CommandBufferId client_id; | |
| 471 release_stream.client->SetOnWaitCallback( | |
| 472 base::Bind(&SyncPointManagerTest::OnWait, &namespace_id, &client_id)); | |
| 473 | |
| 474 release_stream.AllocateOrderNum(sync_point_manager_.get()); | |
| 475 wait_stream.AllocateOrderNum(sync_point_manager_.get()); | |
| 476 release_stream.AllocateOrderNum(sync_point_manager_.get()); | |
| 477 | |
| 478 wait_stream.BeginProcessing(); | |
| 479 int test_num = 10; | |
| 480 bool valid_wait = wait_stream.client->Wait( | |
| 481 release_stream.client->client_state().get(), 1, | |
| 482 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | |
| 483 EXPECT_TRUE(valid_wait); | |
| 484 EXPECT_EQ(10, test_num); | |
| 485 EXPECT_EQ(kNamespaceId, namespace_id); | |
| 486 EXPECT_EQ(kBufferId2, client_id); | |
| 487 | |
| 488 release_stream.BeginProcessing(); | |
| 489 release_stream.client->ReleaseFenceSync(1); | |
| 490 EXPECT_EQ(123, test_num); | |
| 491 | |
| 492 wait_stream.EndProcessing(); | |
| 493 | |
| 494 namespace_id = CommandBufferNamespace::INVALID; | |
| 495 client_id = CommandBufferId(); | |
| 496 test_num = 10; | |
| 497 valid_wait = wait_stream.client->WaitOutOfOrder( | |
| 498 release_stream.client->client_state().get(), 2, | |
| 499 base::Bind(&SyncPointManagerTest::SetIntegerFunction, &test_num, 123)); | |
| 500 EXPECT_TRUE(valid_wait); | |
| 501 EXPECT_EQ(10, test_num); | |
| 502 EXPECT_EQ(kNamespaceId, namespace_id); | |
| 503 EXPECT_EQ(kBufferId2, client_id); | |
| 504 | |
| 505 release_stream.client->ReleaseFenceSync(2); | |
| 506 EXPECT_EQ(123, test_num); | |
| 507 } | 450 } |
| 508 | 451 |
| 509 } // namespace gpu | 452 } // namespace gpu |
| OLD | NEW |