Adds CreateTaskQueueFactory to TimeController

Bug: webrtc:11255
Change-Id: I02bdc944c7081590f40a77b315f64c63adbc6ff8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166921
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30349}
This commit is contained in:
Sebastian Jansson 2020-01-22 14:37:52 +01:00 committed by Commit Bot
parent 133bf2bd28
commit 094ce2ef83
3 changed files with 23 additions and 16 deletions

View file

@ -10,6 +10,22 @@
#include "api/test/time_controller.h"
namespace webrtc {
std::unique_ptr<TaskQueueFactory> TimeController::CreateTaskQueueFactory() {
class FactoryWrapper final : public TaskQueueFactory {
public:
explicit FactoryWrapper(TaskQueueFactory* inner_factory)
: inner_(inner_factory) {}
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> CreateTaskQueue(
absl::string_view name,
Priority priority) const override {
return inner_->CreateTaskQueue(name, priority);
}
private:
TaskQueueFactory* const inner_;
};
return std::make_unique<FactoryWrapper>(GetTaskQueueFactory());
}
bool TimeController::Wait(const std::function<bool()>& done,
TimeDelta max_duration) {
// Step size is chosen to be short enough to not significantly affect latency

View file

@ -35,6 +35,12 @@ class TimeController {
// The returned factory will created task queues that runs in implementation
// defined time domain.
virtual TaskQueueFactory* GetTaskQueueFactory() = 0;
// Simple helper to create an owned factory that can be used as a parameter
// for PeerConnectionFactory. Note that this might depend on the underlying
// time controller and therfore must be destroyed before the time controller
// is destroyed.
std::unique_ptr<TaskQueueFactory> CreateTaskQueueFactory();
// Creates a process thread.
virtual std::unique_ptr<ProcessThread> CreateProcessThread(
const char* thread_name) = 0;

View file

@ -114,21 +114,6 @@ class LambdaPeerConnectionObserver final : public PeerConnectionObserver {
PeerScenarioClient::CallbackHandlers* handlers_;
};
// Used to supply a unique_ptr for an unowned TaskQueueFactory.
class TaskQueueFactoryWrapper final : public TaskQueueFactory {
public:
explicit TaskQueueFactoryWrapper(TaskQueueFactory* inner_factory)
: inner_factory_(inner_factory) {}
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> CreateTaskQueue(
absl::string_view name,
Priority priority) const override {
return inner_factory_->CreateTaskQueue(name, priority);
}
private:
TaskQueueFactory* const inner_factory_;
};
class TimeControllerBasedCallFactory : public CallFactoryInterface {
public:
explicit TimeControllerBasedCallFactory(TimeController* time_controller)
@ -192,7 +177,7 @@ PeerScenarioClient::PeerScenarioClient(
pcf_deps.call_factory =
std::make_unique<TimeControllerBasedCallFactory>(net->time_controller());
pcf_deps.task_queue_factory =
std::make_unique<TaskQueueFactoryWrapper>(task_queue_factory_);
net->time_controller()->CreateTaskQueueFactory();
pcf_deps.event_log_factory =
std::make_unique<RtcEventLogFactory>(task_queue_factory_);