OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/atomic_sequence_num.h" | 5 #include "base/atomic_sequence_num.h" |
6 #include "base/lock.h" | 6 #include "base/lock.h" |
7 #include "base/simple_thread.h" | 7 #include "base/simple_thread.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/waitable_event.h" | 9 #include "base/waitable_event.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 | 11 |
12 namespace { | 12 namespace { |
13 | 13 |
14 class SetIntRunner : public base::DelegateSimpleThread::Delegate { | 14 class SetIntRunner : public base::DelegateSimpleThread::Delegate { |
15 public: | 15 public: |
16 SetIntRunner(int* ptr, int val) : ptr_(ptr), val_(val) { } | 16 SetIntRunner(int* ptr, int val) : ptr_(ptr), val_(val) { } |
17 ~SetIntRunner() { } | 17 ~SetIntRunner() { } |
18 | 18 |
19 virtual void Run() { | 19 virtual void Run() { |
20 *ptr_ = val_; | 20 *ptr_ = val_; |
21 } | 21 } |
22 | 22 |
23 private: | 23 private: |
24 int* ptr_; | 24 int* ptr_; |
25 int val_; | 25 int val_; |
26 }; | 26 }; |
27 | 27 |
28 class WaitEventRunner : public base::DelegateSimpleThread::Delegate { | 28 class WaitEventRunner : public base::DelegateSimpleThread::Delegate { |
29 public: | 29 public: |
30 WaitEventRunner(base::WaitableEvent* event) : event_(event) { } | 30 explicit WaitEventRunner(base::WaitableEvent* event) : event_(event) { } |
31 ~WaitEventRunner() { } | 31 ~WaitEventRunner() { } |
32 | 32 |
33 virtual void Run() { | 33 virtual void Run() { |
34 EXPECT_FALSE(event_->IsSignaled()); | 34 EXPECT_FALSE(event_->IsSignaled()); |
35 event_->Signal(); | 35 event_->Signal(); |
36 EXPECT_TRUE(event_->IsSignaled()); | 36 EXPECT_TRUE(event_->IsSignaled()); |
37 } | 37 } |
38 private: | 38 private: |
39 base::WaitableEvent* event_; | 39 base::WaitableEvent* event_; |
40 }; | 40 }; |
41 | 41 |
42 class SeqRunner : public base::DelegateSimpleThread::Delegate { | 42 class SeqRunner : public base::DelegateSimpleThread::Delegate { |
43 public: | 43 public: |
44 SeqRunner(base::AtomicSequenceNumber* seq) : seq_(seq) { } | 44 explicit SeqRunner(base::AtomicSequenceNumber* seq) : seq_(seq) { } |
45 virtual void Run() { | 45 virtual void Run() { |
46 seq_->GetNext(); | 46 seq_->GetNext(); |
47 } | 47 } |
48 | 48 |
49 private: | 49 private: |
50 base::AtomicSequenceNumber* seq_; | 50 base::AtomicSequenceNumber* seq_; |
51 }; | 51 }; |
52 | 52 |
53 // We count up on a sequence number, firing on the event when we've hit our | 53 // We count up on a sequence number, firing on the event when we've hit our |
54 // expected amount, otherwise we wait on the event. This will ensure that we | 54 // expected amount, otherwise we wait on the event. This will ensure that we |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 base::WaitableEvent event(true, false); | 158 base::WaitableEvent event(true, false); |
159 // Changing 9 to 10, for example, would cause us JoinAll() to never return. | 159 // Changing 9 to 10, for example, would cause us JoinAll() to never return. |
160 VerifyPoolRunner verifier(&seq2, 9, &event); | 160 VerifyPoolRunner verifier(&seq2, 9, &event); |
161 pool.Start(); | 161 pool.Start(); |
162 | 162 |
163 pool.AddWork(&verifier, 10); | 163 pool.AddWork(&verifier, 10); |
164 | 164 |
165 pool.JoinAll(); | 165 pool.JoinAll(); |
166 EXPECT_EQ(seq2.GetNext(), 10); | 166 EXPECT_EQ(seq2.GetNext(), 10); |
167 } | 167 } |
OLD | NEW |