blob: 7cc80ab481822fd5e0c45abd38a4f1d9511a08f2 [file] [log] [blame]
pbos@webrtc.orgadf23a52013-07-10 14:07:561/*
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 */
Mirko Bonadei92ea95e2017-09-15 04:47:3110#include "test/run_loop.h"
pbos@webrtc.orgadf23a52013-07-10 14:07:5611
Evan Shrubsole9a999052021-12-12 14:27:0012#include "rtc_base/time_utils.h"
pbos@webrtc.orgadf23a52013-07-10 14:07:5613
14namespace webrtc {
15namespace test {
16
Tommi9e46cf52020-05-04 14:43:0517RunLoop::RunLoop() {
18 worker_thread_.WrapCurrent();
pbos@webrtc.orgadf23a52013-07-10 14:07:5619}
Tommi9e46cf52020-05-04 14:43:0520
21RunLoop::~RunLoop() {
22 worker_thread_.UnwrapCurrent();
23}
24
25TaskQueueBase* RunLoop::task_queue() {
26 return &worker_thread_;
27}
28
29void RunLoop::Run() {
30 worker_thread_.ProcessMessages(WorkerThread::kForever);
31}
32
33void RunLoop::Quit() {
34 socket_server_.FailNextWait();
35}
36
37void RunLoop::Flush() {
Danil Chapovalov9c125c62022-07-07 18:29:3038 worker_thread_.PostTask([this]() { socket_server_.FailNextWait(); });
Evan Shrubsole9a999052021-12-12 14:27:0039 // 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);
Tommi9e46cf52020-05-04 14:43:0545}
46
47RunLoop::FakeSocketServer::FakeSocketServer() = default;
48RunLoop::FakeSocketServer::~FakeSocketServer() = default;
49
50void RunLoop::FakeSocketServer::FailNextWait() {
51 fail_next_wait_ = true;
52}
53
Markus Handell9a21c492022-08-25 11:40:1354bool RunLoop::FakeSocketServer::Wait(webrtc::TimeDelta max_wait_duration,
55 bool process_io) {
Tommi9e46cf52020-05-04 14:43:0556 if (fail_next_wait_) {
57 fail_next_wait_ = false;
58 return false;
59 }
60 return true;
61}
62
63void RunLoop::FakeSocketServer::WakeUp() {}
64
65rtc::Socket* RunLoop::FakeSocketServer::CreateSocket(int family, int type) {
66 return nullptr;
67}
68
Tommi9e46cf52020-05-04 14:43:0569RunLoop::WorkerThread::WorkerThread(rtc::SocketServer* ss)
70 : rtc::Thread(ss), tq_setter_(this) {}
71
pbos@webrtc.orgadf23a52013-07-10 14:07:5672} // namespace test
73} // namespace webrtc