• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2019 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 
11 #include "api/test/create_time_controller.h"
12 
13 #include <memory>
14 
15 #include "call/call.h"
16 #include "test/time_controller/external_time_controller.h"
17 #include "test/time_controller/simulated_time_controller.h"
18 
19 namespace webrtc {
20 
CreateTimeController(ControlledAlarmClock * alarm)21 std::unique_ptr<TimeController> CreateTimeController(
22     ControlledAlarmClock* alarm) {
23   return std::make_unique<ExternalTimeController>(alarm);
24 }
25 
CreateSimulatedTimeController()26 std::unique_ptr<TimeController> CreateSimulatedTimeController() {
27   return std::make_unique<GlobalSimulatedTimeController>(
28       Timestamp::Seconds(10000));
29 }
30 
CreateTimeControllerBasedCallFactory(TimeController * time_controller)31 std::unique_ptr<CallFactoryInterface> CreateTimeControllerBasedCallFactory(
32     TimeController* time_controller) {
33   class TimeControllerBasedCallFactory : public CallFactoryInterface {
34    public:
35     explicit TimeControllerBasedCallFactory(TimeController* time_controller)
36         : time_controller_(time_controller) {}
37     Call* CreateCall(const Call::Config& config) override {
38       if (!module_thread_) {
39         module_thread_ = SharedModuleThread::Create(
40             time_controller_->CreateProcessThread("CallModules"),
41             [this]() { module_thread_ = nullptr; });
42       }
43       return Call::Create(config, time_controller_->GetClock(), module_thread_,
44                           time_controller_->CreateProcessThread("Pacer"));
45     }
46 
47    private:
48     TimeController* time_controller_;
49     rtc::scoped_refptr<SharedModuleThread> module_thread_;
50   };
51   return std::make_unique<TimeControllerBasedCallFactory>(time_controller);
52 }
53 
54 }  // namespace webrtc
55