OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "base/threading/sequenced_task_runner_handle.h" | 5 #include "base/threading/sequenced_task_runner_handle.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 ASSERT_TRUE(SequencedTaskRunnerHandle::IsSet()); | 34 ASSERT_TRUE(SequencedTaskRunnerHandle::IsSet()); |
35 scoped_refptr<SequencedTaskRunner> task_runner = | 35 scoped_refptr<SequencedTaskRunner> task_runner = |
36 SequencedTaskRunnerHandle::Get(); | 36 SequencedTaskRunnerHandle::Get(); |
37 ASSERT_TRUE(task_runner); | 37 ASSERT_TRUE(task_runner); |
38 | 38 |
39 // Use SequenceCheckerImpl to make sure it's not a no-op in Release builds. | 39 // Use SequenceCheckerImpl to make sure it's not a no-op in Release builds. |
40 std::unique_ptr<SequenceCheckerImpl> sequence_checker( | 40 std::unique_ptr<SequenceCheckerImpl> sequence_checker( |
41 new SequenceCheckerImpl); | 41 new SequenceCheckerImpl); |
42 task_runner->PostTask( | 42 task_runner->PostTask( |
43 FROM_HERE, | 43 FROM_HERE, |
44 base::Bind(&SequencedTaskRunnerHandleTest::CheckValidSequence, | 44 base::BindOnce(&SequencedTaskRunnerHandleTest::CheckValidSequence, |
45 base::Passed(&sequence_checker), callback)); | 45 base::Passed(&sequence_checker), callback)); |
46 } | 46 } |
47 | 47 |
48 // Verifies that there is no SequencedTaskRunnerHandle in the context it runs. | 48 // Verifies that there is no SequencedTaskRunnerHandle in the context it runs. |
49 // Runs |callback| when done. | 49 // Runs |callback| when done. |
50 static void VerifyNoSequencedTaskRunner(const Closure& callback) { | 50 static void VerifyNoSequencedTaskRunner(const Closure& callback) { |
51 ASSERT_FALSE(SequencedTaskRunnerHandle::IsSet()); | 51 ASSERT_FALSE(SequencedTaskRunnerHandle::IsSet()); |
52 callback.Run(); | 52 callback.Run(); |
53 } | 53 } |
54 | 54 |
55 private: | 55 private: |
(...skipping 14 matching lines...) Expand all Loading... |
70 } | 70 } |
71 | 71 |
72 TEST_F(SequencedTaskRunnerHandleTest, FromSequencedWorkerPoolTask) { | 72 TEST_F(SequencedTaskRunnerHandleTest, FromSequencedWorkerPoolTask) { |
73 // Wrap the SequencedWorkerPool to avoid leaks due to its asynchronous | 73 // Wrap the SequencedWorkerPool to avoid leaks due to its asynchronous |
74 // destruction. | 74 // destruction. |
75 SequencedWorkerPoolOwner owner(3, "Test"); | 75 SequencedWorkerPoolOwner owner(3, "Test"); |
76 WaitableEvent event(WaitableEvent::ResetPolicy::AUTOMATIC, | 76 WaitableEvent event(WaitableEvent::ResetPolicy::AUTOMATIC, |
77 WaitableEvent::InitialState::NOT_SIGNALED); | 77 WaitableEvent::InitialState::NOT_SIGNALED); |
78 owner.pool()->PostSequencedWorkerTask( | 78 owner.pool()->PostSequencedWorkerTask( |
79 owner.pool()->GetSequenceToken(), FROM_HERE, | 79 owner.pool()->GetSequenceToken(), FROM_HERE, |
80 base::Bind( | 80 base::BindOnce( |
81 &SequencedTaskRunnerHandleTest::VerifyCurrentSequencedTaskRunner, | 81 &SequencedTaskRunnerHandleTest::VerifyCurrentSequencedTaskRunner, |
82 base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); | 82 base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); |
83 event.Wait(); | 83 event.Wait(); |
84 } | 84 } |
85 | 85 |
86 TEST_F(SequencedTaskRunnerHandleTest, NoHandleFromUnsequencedTask) { | 86 TEST_F(SequencedTaskRunnerHandleTest, NoHandleFromUnsequencedTask) { |
87 // Wrap the SequencedWorkerPool to avoid leaks due to its asynchronous | 87 // Wrap the SequencedWorkerPool to avoid leaks due to its asynchronous |
88 // destruction. | 88 // destruction. |
89 SequencedWorkerPoolOwner owner(3, "Test"); | 89 SequencedWorkerPoolOwner owner(3, "Test"); |
90 WaitableEvent event(WaitableEvent::ResetPolicy::AUTOMATIC, | 90 WaitableEvent event(WaitableEvent::ResetPolicy::AUTOMATIC, |
91 WaitableEvent::InitialState::NOT_SIGNALED); | 91 WaitableEvent::InitialState::NOT_SIGNALED); |
92 owner.pool()->PostWorkerTask( | 92 owner.pool()->PostWorkerTask( |
93 FROM_HERE, | 93 FROM_HERE, |
94 base::Bind( | 94 base::BindOnce( |
95 &SequencedTaskRunnerHandleTest::VerifyNoSequencedTaskRunner, | 95 &SequencedTaskRunnerHandleTest::VerifyNoSequencedTaskRunner, |
96 base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); | 96 base::Bind(&WaitableEvent::Signal, base::Unretained(&event)))); |
97 event.Wait(); | 97 event.Wait(); |
98 } | 98 } |
99 | 99 |
100 TEST(SequencedTaskRunnerHandleTestWithoutMessageLoop, FromHandleInScope) { | 100 TEST(SequencedTaskRunnerHandleTestWithoutMessageLoop, FromHandleInScope) { |
101 scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner); | 101 scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner); |
102 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); | 102 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); |
103 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); | 103 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); |
104 { | 104 { |
105 SequencedTaskRunnerHandle handle(test_task_runner); | 105 SequencedTaskRunnerHandle handle(test_task_runner); |
106 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); | 106 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); |
107 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); | 107 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); |
108 EXPECT_EQ(test_task_runner, SequencedTaskRunnerHandle::Get()); | 108 EXPECT_EQ(test_task_runner, SequencedTaskRunnerHandle::Get()); |
109 } | 109 } |
110 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); | 110 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); |
111 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); | 111 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); |
112 } | 112 } |
113 | 113 |
114 } // namespace | 114 } // namespace |
115 } // namespace base | 115 } // namespace base |
OLD | NEW |