1 /* 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 #include "test/run_loop.h" 11 12 #include "rtc_base/time_utils.h" 13 14 namespace webrtc { 15 namespace test { 16 RunLoop()17RunLoop::RunLoop() { 18 worker_thread_.WrapCurrent(); 19 } 20 ~RunLoop()21RunLoop::~RunLoop() { 22 worker_thread_.UnwrapCurrent(); 23 } 24 task_queue()25TaskQueueBase* RunLoop::task_queue() { 26 return &worker_thread_; 27 } 28 Run()29void RunLoop::Run() { 30 worker_thread_.ProcessMessages(WorkerThread::kForever); 31 } 32 Quit()33void RunLoop::Quit() { 34 socket_server_.FailNextWait(); 35 } 36 Flush()37void RunLoop::Flush() { 38 worker_thread_.PostTask([this]() { socket_server_.FailNextWait(); }); 39 // If a test clock is used, like with GlobalSimulatedTimeController then the 40 // thread will loop forever since time never increases. Since the clock is 41 // simulated, 0ms can be used as the loop delay, which will process all 42 // messages ready for execution. 43 int cms = rtc::GetClockForTesting() ? 0 : 1000; 44 worker_thread_.ProcessMessages(cms); 45 } 46 47 RunLoop::FakeSocketServer::FakeSocketServer() = default; 48 RunLoop::FakeSocketServer::~FakeSocketServer() = default; 49 FailNextWait()50void RunLoop::FakeSocketServer::FailNextWait() { 51 fail_next_wait_ = true; 52 } 53 Wait(webrtc::TimeDelta max_wait_duration,bool process_io)54bool RunLoop::FakeSocketServer::Wait(webrtc::TimeDelta max_wait_duration, 55 bool process_io) { 56 if (fail_next_wait_) { 57 fail_next_wait_ = false; 58 return false; 59 } 60 return true; 61 } 62 WakeUp()63void RunLoop::FakeSocketServer::WakeUp() {} 64 CreateSocket(int family,int type)65rtc::Socket* RunLoop::FakeSocketServer::CreateSocket(int family, int type) { 66 return nullptr; 67 } 68 WorkerThread(rtc::SocketServer * ss)69RunLoop::WorkerThread::WorkerThread(rtc::SocketServer* ss) 70 : rtc::Thread(ss), tq_setter_(this) {} 71 72 } // namespace test 73 } // namespace webrtc 74