OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project 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 "src/base/atomicops.h" | 5 #include "src/base/atomicops.h" |
6 #include "src/base/platform/platform.h" | 6 #include "src/base/platform/platform.h" |
7 #include "src/cancelable-task.h" | 7 #include "src/cancelable-task.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 | 10 |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 | 207 |
208 TEST(CancelableTask, RemoveUnmanagedId) { | 208 TEST(CancelableTask, RemoveUnmanagedId) { |
209 CancelableTaskManager manager; | 209 CancelableTaskManager manager; |
210 EXPECT_FALSE(manager.TryAbort(1)); | 210 EXPECT_FALSE(manager.TryAbort(1)); |
211 EXPECT_FALSE(manager.TryAbort(2)); | 211 EXPECT_FALSE(manager.TryAbort(2)); |
212 manager.CancelAndWait(); | 212 manager.CancelAndWait(); |
213 EXPECT_FALSE(manager.TryAbort(1)); | 213 EXPECT_FALSE(manager.TryAbort(1)); |
214 EXPECT_FALSE(manager.TryAbort(3)); | 214 EXPECT_FALSE(manager.TryAbort(3)); |
215 } | 215 } |
216 | 216 |
217 TEST(CancelableTask, EmptyTryAbortAll) { | |
218 CancelableTaskManager manager; | |
219 EXPECT_EQ(manager.TryAbortAll(), CancelableTaskManager::kTaskRemoved); | |
220 } | |
221 | |
222 TEST(CancelableTask, ThreadedMultipleTasksNotRunTryAbortAll) { | |
223 CancelableTaskManager manager; | |
224 ResultType result1 = 0; | |
225 ResultType result2 = 0; | |
226 TestTask* task1 = new TestTask(&manager, &result1, TestTask::kCheckNotRun); | |
227 TestTask* task2 = new TestTask(&manager, &result2, TestTask::kCheckNotRun); | |
228 ThreadedRunner runner1(task1); | |
229 ThreadedRunner runner2(task2); | |
230 EXPECT_EQ(manager.TryAbortAll(), CancelableTaskManager::kTaskAborted); | |
231 // Tasks are canceled, hence the runner will bail out and not update result. | |
232 runner1.Start(); | |
233 runner2.Start(); | |
234 runner1.Join(); | |
235 runner2.Join(); | |
236 EXPECT_EQ(GetValue(&result1), 0); | |
237 EXPECT_EQ(GetValue(&result2), 0); | |
238 } | |
239 | |
240 TEST(CancelableTask, ThreadedMultipleTasksStartedTryAbortAll) { | |
241 CancelableTaskManager manager; | |
242 ResultType result1 = 0; | |
243 ResultType result2 = 0; | |
244 TestTask* task1 = | |
245 new TestTask(&manager, &result1, TestTask::kWaitTillCanceledAgain); | |
246 TestTask* task2 = | |
247 new TestTask(&manager, &result2, TestTask::kWaitTillCanceledAgain); | |
248 ThreadedRunner runner1(task1); | |
249 ThreadedRunner runner2(task2); | |
250 runner1.Start(); | |
251 // Busy wait on result to make sure task1 is done. | |
252 while (GetValue(&result1) == 0) { | |
253 } | |
254 EXPECT_EQ(manager.TryAbortAll(), CancelableTaskManager::kTaskRunning); | |
255 runner2.Start(); | |
256 runner1.Join(); | |
257 runner2.Join(); | |
258 EXPECT_EQ(GetValue(&result1), 1); | |
259 EXPECT_EQ(GetValue(&result2), 0); | |
260 } | |
261 | |
262 } // namespace internal | 217 } // namespace internal |
263 } // namespace v8 | 218 } // namespace v8 |
OLD | NEW |