OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/worker_pool.h" | 5 #include "base/threading/worker_pool.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 : public base::RefCountedThreadSafe<PostTaskAndReplyTester> { | 27 : public base::RefCountedThreadSafe<PostTaskAndReplyTester> { |
28 public: | 28 public: |
29 PostTaskAndReplyTester() | 29 PostTaskAndReplyTester() |
30 : finished_(false), | 30 : finished_(false), |
31 test_event_(WaitableEvent::ResetPolicy::AUTOMATIC, | 31 test_event_(WaitableEvent::ResetPolicy::AUTOMATIC, |
32 WaitableEvent::InitialState::NOT_SIGNALED) {} | 32 WaitableEvent::InitialState::NOT_SIGNALED) {} |
33 | 33 |
34 void RunTest() { | 34 void RunTest() { |
35 ASSERT_TRUE(thread_checker_.CalledOnValidThread()); | 35 ASSERT_TRUE(thread_checker_.CalledOnValidThread()); |
36 WorkerPool::PostTaskAndReply( | 36 WorkerPool::PostTaskAndReply( |
37 FROM_HERE, | 37 FROM_HERE, |
38 base::Bind(&PostTaskAndReplyTester::OnWorkerThread, this), | 38 base::BindOnce(&PostTaskAndReplyTester::OnWorkerThread, this), |
39 base::Bind(&PostTaskAndReplyTester::OnOriginalThread, this), | 39 base::BindOnce(&PostTaskAndReplyTester::OnOriginalThread, this), false); |
40 false); | |
41 | 40 |
42 test_event_.Wait(); | 41 test_event_.Wait(); |
43 } | 42 } |
44 | 43 |
45 void OnWorkerThread() { | 44 void OnWorkerThread() { |
46 // We're not on the original thread. | 45 // We're not on the original thread. |
47 EXPECT_FALSE(thread_checker_.CalledOnValidThread()); | 46 EXPECT_FALSE(thread_checker_.CalledOnValidThread()); |
48 | 47 |
49 test_event_.Signal(); | 48 test_event_.Signal(); |
50 } | 49 } |
(...skipping 19 matching lines...) Expand all Loading... |
70 }; | 69 }; |
71 | 70 |
72 } // namespace | 71 } // namespace |
73 | 72 |
74 TEST_F(WorkerPoolTest, PostTask) { | 73 TEST_F(WorkerPoolTest, PostTask) { |
75 WaitableEvent test_event(WaitableEvent::ResetPolicy::AUTOMATIC, | 74 WaitableEvent test_event(WaitableEvent::ResetPolicy::AUTOMATIC, |
76 WaitableEvent::InitialState::NOT_SIGNALED); | 75 WaitableEvent::InitialState::NOT_SIGNALED); |
77 WaitableEvent long_test_event(WaitableEvent::ResetPolicy::AUTOMATIC, | 76 WaitableEvent long_test_event(WaitableEvent::ResetPolicy::AUTOMATIC, |
78 WaitableEvent::InitialState::NOT_SIGNALED); | 77 WaitableEvent::InitialState::NOT_SIGNALED); |
79 | 78 |
| 79 WorkerPool::PostTask( |
| 80 FROM_HERE, |
| 81 base::BindOnce(&WaitableEvent::Signal, base::Unretained(&test_event)), |
| 82 false); |
80 WorkerPool::PostTask(FROM_HERE, | 83 WorkerPool::PostTask(FROM_HERE, |
81 base::Bind(&WaitableEvent::Signal, | 84 base::BindOnce(&WaitableEvent::Signal, |
82 base::Unretained(&test_event)), | 85 base::Unretained(&long_test_event)), |
83 false); | |
84 WorkerPool::PostTask(FROM_HERE, | |
85 base::Bind(&WaitableEvent::Signal, | |
86 base::Unretained(&long_test_event)), | |
87 true); | 86 true); |
88 | 87 |
89 test_event.Wait(); | 88 test_event.Wait(); |
90 long_test_event.Wait(); | 89 long_test_event.Wait(); |
91 } | 90 } |
92 | 91 |
93 #if defined(OS_WIN) || defined(OS_LINUX) | 92 #if defined(OS_WIN) || defined(OS_LINUX) |
94 // Flaky on Windows and Linux (http://crbug.com/130337) | 93 // Flaky on Windows and Linux (http://crbug.com/130337) |
95 #define MAYBE_PostTaskAndReply DISABLED_PostTaskAndReply | 94 #define MAYBE_PostTaskAndReply DISABLED_PostTaskAndReply |
96 #else | 95 #else |
(...skipping 12 matching lines...) Expand all Loading... |
109 // Ensure that the other thread has a chance to run even on a single-core | 108 // Ensure that the other thread has a chance to run even on a single-core |
110 // device. | 109 // device. |
111 pthread_yield_np(); | 110 pthread_yield_np(); |
112 #endif | 111 #endif |
113 RunLoop().RunUntilIdle(); | 112 RunLoop().RunUntilIdle(); |
114 } | 113 } |
115 EXPECT_TRUE(tester->finished()); | 114 EXPECT_TRUE(tester->finished()); |
116 } | 115 } |
117 | 116 |
118 } // namespace base | 117 } // namespace base |
OLD | NEW |