OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/public/cpp/utility/mutex.h" | 5 #include "mojo/public/cpp/utility/mutex.h" |
6 | 6 |
7 #include <stdlib.h> // For |rand()|. | 7 #include <stdlib.h> // For |rand()|. |
8 #include <time.h> // For |nanosleep()| (defined by POSIX). | 8 #include <time.h> // For |nanosleep()| (defined by POSIX). |
9 | 9 |
10 #include <vector> | 10 #include <vector> |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 MOJO_DISALLOW_COPY_AND_ASSIGN(Fiddler); | 104 MOJO_DISALLOW_COPY_AND_ASSIGN(Fiddler); |
105 }; | 105 }; |
106 | 106 |
107 class FiddlerThread : public Thread { | 107 class FiddlerThread : public Thread { |
108 public: | 108 public: |
109 // Takes ownership of |fiddler|. | 109 // Takes ownership of |fiddler|. |
110 FiddlerThread(Fiddler* fiddler) | 110 FiddlerThread(Fiddler* fiddler) |
111 : fiddler_(fiddler) { | 111 : fiddler_(fiddler) { |
112 } | 112 } |
113 | 113 |
114 virtual ~FiddlerThread() { | 114 ~FiddlerThread() override { delete fiddler_; } |
115 delete fiddler_; | |
116 } | |
117 | 115 |
118 virtual void Run() override { fiddler_->Fiddle(); } | 116 void Run() override { fiddler_->Fiddle(); } |
119 | 117 |
120 private: | 118 private: |
121 Fiddler* const fiddler_; | 119 Fiddler* const fiddler_; |
122 | 120 |
123 MOJO_DISALLOW_COPY_AND_ASSIGN(FiddlerThread); | 121 MOJO_DISALLOW_COPY_AND_ASSIGN(FiddlerThread); |
124 }; | 122 }; |
125 | 123 |
126 // This does a stress test (that also checks exclusion). | 124 // This does a stress test (that also checks exclusion). |
127 TEST(MutexTest, ThreadedStress) { | 125 TEST(MutexTest, ThreadedStress) { |
128 static const size_t kNumThreads = 20; | 126 static const size_t kNumThreads = 20; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 | 158 |
161 // Delete. | 159 // Delete. |
162 for (size_t i = 0; i < kNumThreads; i++) | 160 for (size_t i = 0; i < kNumThreads; i++) |
163 delete fiddler_threads[i]; | 161 delete fiddler_threads[i]; |
164 fiddler_threads.clear(); | 162 fiddler_threads.clear(); |
165 } | 163 } |
166 | 164 |
167 class TryThread : public Thread { | 165 class TryThread : public Thread { |
168 public: | 166 public: |
169 explicit TryThread(Mutex* mutex) : mutex_(mutex), try_lock_succeeded_() {} | 167 explicit TryThread(Mutex* mutex) : mutex_(mutex), try_lock_succeeded_() {} |
170 virtual ~TryThread() {} | 168 ~TryThread() override {} |
171 | 169 |
172 virtual void Run() override { | 170 void Run() override { |
173 try_lock_succeeded_ = mutex_->TryLock(); | 171 try_lock_succeeded_ = mutex_->TryLock(); |
174 if (try_lock_succeeded_) | 172 if (try_lock_succeeded_) |
175 mutex_->Unlock(); | 173 mutex_->Unlock(); |
176 } | 174 } |
177 | 175 |
178 bool try_lock_succeeded() const { return try_lock_succeeded_; } | 176 bool try_lock_succeeded() const { return try_lock_succeeded_; } |
179 | 177 |
180 private: | 178 private: |
181 Mutex* const mutex_; | 179 Mutex* const mutex_; |
182 bool try_lock_succeeded_; | 180 bool try_lock_succeeded_; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 // Destroy lock with lock held. | 250 // Destroy lock with lock held. |
253 EXPECT_DEATH_IF_SUPPORTED({ | 251 EXPECT_DEATH_IF_SUPPORTED({ |
254 Mutex mutex; | 252 Mutex mutex; |
255 mutex.Lock(); | 253 mutex.Lock(); |
256 }, ""); | 254 }, ""); |
257 } | 255 } |
258 #endif // !defined(NDEBUG) | 256 #endif // !defined(NDEBUG) |
259 | 257 |
260 } // namespace | 258 } // namespace |
261 } // namespace mojo | 259 } // namespace mojo |
OLD | NEW |