diff options
author | bauerb <bauerb@chromium.org> | 2016-01-07 07:34:08 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-07 15:34:58 +0000 |
commit | 5d315e4b4a7cdef34b0c1e863353d03a30781217 (patch) | |
tree | 3fd1226458e92904b86761ff0aebaf0b706dc163 /base/threading/sequenced_task_runner_handle_unittest.cc | |
parent | e3de6dea8003be39328bea275763daab36a8df24 (diff) | |
download | chromium_src-5d315e4b4a7cdef34b0c1e863353d03a30781217.zip chromium_src-5d315e4b4a7cdef34b0c1e863353d03a30781217.tar.gz chromium_src-5d315e4b4a7cdef34b0c1e863353d03a30781217.tar.bz2 |
Allow SequencedTaskRunnerHandle::Get() while running unsequenced tasks.
If the SequencedWorkerPool is running an unsequenced task, it will
assign a new sequence token to it and use that for the returned
SequencedTaskRunner.
Review URL: https://codereview.chromium.org/1414793009
Cr-Commit-Position: refs/heads/master@{#368078}
Diffstat (limited to 'base/threading/sequenced_task_runner_handle_unittest.cc')
-rw-r--r-- | base/threading/sequenced_task_runner_handle_unittest.cc | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/base/threading/sequenced_task_runner_handle_unittest.cc b/base/threading/sequenced_task_runner_handle_unittest.cc index bd380ef..1e624f4 100644 --- a/base/threading/sequenced_task_runner_handle_unittest.cc +++ b/base/threading/sequenced_task_runner_handle_unittest.cc @@ -23,21 +23,24 @@ namespace { class SequencedTaskRunnerHandleTest : public ::testing::Test { protected: - static void GetTaskRunner(const Closure& callback) { - // Use SequenceCheckerImpl to make sure it's not a no-op in Release builds. - scoped_ptr<SequenceCheckerImpl> sequence_checker(new SequenceCheckerImpl); + static void VerifyCurrentSequencedTaskRunner(const Closure& callback) { ASSERT_TRUE(SequencedTaskRunnerHandle::IsSet()); scoped_refptr<SequencedTaskRunner> task_runner = SequencedTaskRunnerHandle::Get(); ASSERT_TRUE(task_runner); + + // Use SequenceCheckerImpl to make sure it's not a no-op in Release builds. + scoped_ptr<SequenceCheckerImpl> sequence_checker(new SequenceCheckerImpl); task_runner->PostTask( - FROM_HERE, base::Bind(&SequencedTaskRunnerHandleTest::CheckValidThread, - base::Passed(&sequence_checker), callback)); + FROM_HERE, + base::Bind(&SequencedTaskRunnerHandleTest::CheckValidSequence, + base::Passed(&sequence_checker), callback)); } private: - static void CheckValidThread(scoped_ptr<SequenceCheckerImpl> sequence_checker, - const Closure& callback) { + static void CheckValidSequence( + scoped_ptr<SequenceCheckerImpl> sequence_checker, + const Closure& callback) { EXPECT_TRUE(sequence_checker->CalledOnValidSequencedThread()); callback.Run(); } @@ -47,19 +50,34 @@ class SequencedTaskRunnerHandleTest : public ::testing::Test { TEST_F(SequencedTaskRunnerHandleTest, FromMessageLoop) { RunLoop run_loop; - GetTaskRunner(run_loop.QuitClosure()); + VerifyCurrentSequencedTaskRunner(run_loop.QuitClosure()); run_loop.Run(); } -TEST_F(SequencedTaskRunnerHandleTest, FromSequencedWorkerPool) { +TEST_F(SequencedTaskRunnerHandleTest, FromSequencedWorkerPoolTask) { // Wrap the SequencedWorkerPool to avoid leaks due to its asynchronous // destruction. SequencedWorkerPoolOwner owner(3, "Test"); WaitableEvent event(false, false); owner.pool()->PostSequencedWorkerTask( owner.pool()->GetSequenceToken(), FROM_HERE, - base::Bind(&SequencedTaskRunnerHandleTest::GetTaskRunner, - base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); + base::Bind( + &SequencedTaskRunnerHandleTest::VerifyCurrentSequencedTaskRunner, + base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); + event.Wait(); + owner.pool()->Shutdown(); +} + +TEST_F(SequencedTaskRunnerHandleTest, FromUnsequencedTask) { + // Wrap the SequencedWorkerPool to avoid leaks due to its asynchronous + // destruction. + SequencedWorkerPoolOwner owner(3, "Test"); + WaitableEvent event(false, false); + owner.pool()->PostWorkerTask( + FROM_HERE, + base::Bind( + &SequencedTaskRunnerHandleTest::VerifyCurrentSequencedTaskRunner, + base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); event.Wait(); } |