OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 // Tests that we can wake up the worker thread to give us a callback right | 244 // Tests that we can wake up the worker thread to give us a callback right |
245 // away when we know the thread is sleeping. | 245 // away when we know the thread is sleeping. |
246 TEST(ProcessThreadImpl, WakeUp) { | 246 TEST(ProcessThreadImpl, WakeUp) { |
247 ProcessThreadImpl thread("ProcessThread"); | 247 ProcessThreadImpl thread("ProcessThread"); |
248 thread.Start(); | 248 thread.Start(); |
249 | 249 |
250 rtc::scoped_ptr<EventWrapper> started(EventWrapper::Create()); | 250 rtc::scoped_ptr<EventWrapper> started(EventWrapper::Create()); |
251 rtc::scoped_ptr<EventWrapper> called(EventWrapper::Create()); | 251 rtc::scoped_ptr<EventWrapper> called(EventWrapper::Create()); |
252 | 252 |
253 MockModule module; | 253 MockModule module; |
254 int64_t start_time = 0; | 254 int64_t start_time; |
255 int64_t called_time = 0; | 255 int64_t called_time; |
| 256 |
256 // Ask for a callback after 1000ms. | 257 // Ask for a callback after 1000ms. |
257 // TimeUntilNextProcess will be called twice. | 258 // TimeUntilNextProcess will be called twice. |
258 // The first time we use it to get the thread into a waiting state. | 259 // The first time we use it to get the thread into a waiting state. |
259 // Then we wake the thread and there should not be another call made to | 260 // Then we wake the thread and there should not be another call made to |
260 // TimeUntilNextProcess before Process() is called. | 261 // TimeUntilNextProcess before Process() is called. |
261 // The second time TimeUntilNextProcess is then called, is after Process | 262 // The second time TimeUntilNextProcess is then called, is after Process |
262 // has been called and we don't expect any more calls. | 263 // has been called and we don't expect any more calls. |
263 EXPECT_CALL(module, TimeUntilNextProcess()) | 264 EXPECT_CALL(module, TimeUntilNextProcess()) |
264 .WillOnce(DoAll(SetTimestamp(&start_time), | 265 .WillOnce(DoAll(SetTimestamp(&start_time), |
265 SetEvent(started.get()), | 266 SetEvent(started.get()), |
266 Return(1000))) | 267 Return(1000))) |
267 .WillOnce(Return(1000)); | 268 .WillOnce(Return(1000)); |
268 EXPECT_CALL(module, Process()) | 269 EXPECT_CALL(module, Process()) |
269 .WillOnce(DoAll(SetTimestamp(&called_time), | 270 .WillOnce(DoAll(SetTimestamp(&called_time), |
270 SetEvent(called.get()), | 271 SetEvent(called.get()), |
271 Return(0))) | 272 Return(0))) |
272 .WillRepeatedly(Return(0)); | 273 .WillRepeatedly(Return(0)); |
273 | 274 |
274 EXPECT_CALL(module, ProcessThreadAttached(&thread)).Times(1); | 275 EXPECT_CALL(module, ProcessThreadAttached(&thread)).Times(1); |
275 thread.RegisterModule(&module); | 276 thread.RegisterModule(&module); |
276 | 277 |
277 EXPECT_EQ(kEventSignaled, started->Wait(100)); | 278 EXPECT_EQ(kEventSignaled, started->Wait(100)); |
278 thread.WakeUp(&module); | 279 thread.WakeUp(&module); |
279 EXPECT_EQ(kEventSignaled, called->Wait(100)); | 280 EXPECT_EQ(kEventSignaled, called->Wait(100)); |
280 | 281 |
281 EXPECT_CALL(module, ProcessThreadAttached(nullptr)).Times(1); | 282 EXPECT_CALL(module, ProcessThreadAttached(nullptr)).Times(1); |
282 thread.Stop(); | 283 thread.Stop(); |
283 | 284 |
284 ASSERT_GT(start_time, 0); | |
285 ASSERT_GT(called_time, 0); | |
286 EXPECT_GE(called_time, start_time); | 285 EXPECT_GE(called_time, start_time); |
287 uint32_t diff = called_time - start_time; | 286 uint32_t diff = called_time - start_time; |
288 // We should have been called back much quicker than 1sec. | 287 // We should have been called back much quicker than 1sec. |
289 EXPECT_LE(diff, 100u); | 288 EXPECT_LE(diff, 100u); |
290 } | 289 } |
291 | 290 |
292 // Tests that we can post a task that gets run straight away on the worker | 291 // Tests that we can post a task that gets run straight away on the worker |
293 // thread. | 292 // thread. |
294 TEST(ProcessThreadImpl, PostTask) { | 293 TEST(ProcessThreadImpl, PostTask) { |
295 ProcessThreadImpl thread("ProcessThread"); | 294 ProcessThreadImpl thread("ProcessThread"); |
296 rtc::scoped_ptr<EventWrapper> task_ran(EventWrapper::Create()); | 295 rtc::scoped_ptr<EventWrapper> task_ran(EventWrapper::Create()); |
297 rtc::scoped_ptr<RaiseEventTask> task(new RaiseEventTask(task_ran.get())); | 296 rtc::scoped_ptr<RaiseEventTask> task(new RaiseEventTask(task_ran.get())); |
298 thread.Start(); | 297 thread.Start(); |
299 thread.PostTask(task.Pass()); | 298 thread.PostTask(task.Pass()); |
300 EXPECT_EQ(kEventSignaled, task_ran->Wait(100)); | 299 EXPECT_EQ(kEventSignaled, task_ran->Wait(100)); |
301 thread.Stop(); | 300 thread.Stop(); |
302 } | 301 } |
303 | 302 |
304 } // namespace webrtc | 303 } // namespace webrtc |
OLD | NEW |