webrtc/test/time_controller/simulated_thread.h
Sebastian Jansson 6ce033a863 Moves ownership of time controller into NetworkEmulationManager.
This makes it easier to maintain consistency between real time
and simulated time modes.

The RealTimeController is updated to use an explicit main thread,
this ensures that pending destruction tasks are run as the network
emulator goes out of scope.

Bug: webrtc:11255
Change-Id: Ie73ab778c78a68d7c58c0f857f14a8d8ac027c67
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166164
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30342}
2020-01-22 11:12:27 +00:00

78 lines
2.5 KiB
C++

/*
* Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef TEST_TIME_CONTROLLER_SIMULATED_THREAD_H_
#define TEST_TIME_CONTROLLER_SIMULATED_THREAD_H_
#include <memory>
#include "test/time_controller/simulated_time_controller.h"
namespace webrtc {
class SimulatedThread : public rtc::Thread,
public sim_time_impl::SimulatedSequenceRunner {
public:
using CurrentThreadSetter = CurrentThreadSetter;
SimulatedThread(sim_time_impl::SimulatedTimeControllerImpl* handler,
absl::string_view name,
std::unique_ptr<rtc::SocketServer> socket_server);
~SimulatedThread() override;
void RunReady(Timestamp at_time) override;
Timestamp GetNextRunTime() const override {
rtc::CritScope lock(&lock_);
return next_run_time_;
}
TaskQueueBase* GetAsTaskQueue() override { return this; }
// Thread interface
void Send(const rtc::Location& posted_from,
rtc::MessageHandler* phandler,
uint32_t id,
rtc::MessageData* pdata) override;
void Post(const rtc::Location& posted_from,
rtc::MessageHandler* phandler,
uint32_t id,
rtc::MessageData* pdata,
bool time_sensitive) override;
void PostDelayed(const rtc::Location& posted_from,
int delay_ms,
rtc::MessageHandler* phandler,
uint32_t id,
rtc::MessageData* pdata) override;
void PostAt(const rtc::Location& posted_from,
int64_t target_time_ms,
rtc::MessageHandler* phandler,
uint32_t id,
rtc::MessageData* pdata) override;
void Stop() override;
private:
sim_time_impl::SimulatedTimeControllerImpl* const handler_;
// Using char* to be debugger friendly.
char* name_;
rtc::CriticalSection lock_;
Timestamp next_run_time_ RTC_GUARDED_BY(lock_) = Timestamp::PlusInfinity();
};
class SimulatedMainThread : public SimulatedThread {
public:
explicit SimulatedMainThread(
sim_time_impl::SimulatedTimeControllerImpl* handler);
~SimulatedMainThread();
private:
CurrentThreadSetter current_setter_;
};
} // namespace webrtc
#endif // TEST_TIME_CONTROLLER_SIMULATED_THREAD_H_