| 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 |