summaryrefslogtreecommitdiffstats
path: root/base/threading/sequenced_task_runner_handle_unittest.cc
diff options
context:
space:
mode:
authorbauerb <bauerb@chromium.org>2016-01-07 07:34:08 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-07 15:34:58 +0000
commit5d315e4b4a7cdef34b0c1e863353d03a30781217 (patch)
tree3fd1226458e92904b86761ff0aebaf0b706dc163 /base/threading/sequenced_task_runner_handle_unittest.cc
parente3de6dea8003be39328bea275763daab36a8df24 (diff)
downloadchromium_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.cc40
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();
}