OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2017 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 "webrtc/tools/network_tester/packet_sender.h" | |
11 | |
12 #include <string> | |
13 #include <utility> | |
14 | |
15 #include "webrtc/base/timeutils.h" | |
16 #include "webrtc/tools/network_tester/config_reader.h" | |
17 #include "webrtc/tools/network_tester/test_controller.h" | |
18 | |
19 namespace webrtc { | |
20 | |
21 namespace { | |
22 | |
23 class SendPacketTask : public rtc::QueuedTask { | |
24 public: | |
25 explicit SendPacketTask(PacketSender* packet_sender) | |
26 : packet_sender_(packet_sender) {} | |
27 | |
28 private: | |
29 bool Run() override { | |
30 if (packet_sender_->IsSending()) { | |
31 packet_sender_->SendPacket(); | |
32 rtc::TaskQueue::Current()->PostDelayedTask( | |
33 std::unique_ptr<QueuedTask>(this), | |
34 packet_sender_->GetSendIntervalMs()); | |
35 return false; | |
36 } else { | |
37 return true; | |
38 } | |
39 } | |
40 PacketSender* packet_sender_; | |
41 }; | |
42 | |
43 class UpdateTestSettingTask : public rtc::QueuedTask { | |
44 public: | |
45 UpdateTestSettingTask(PacketSender* packet_sender, | |
46 std::unique_ptr<ConfigReader> config_reader) | |
47 : packet_sender_(packet_sender), | |
48 config_reader_(std::move(config_reader)) {} | |
49 | |
50 private: | |
51 bool Run() override { | |
52 auto config = config_reader_->GetNextConfig(); | |
53 if (config) { | |
54 packet_sender_->UpdateTestSetting((*config).packet_size, | |
55 (*config).packet_send_interval_ms); | |
56 rtc::TaskQueue::Current()->PostDelayedTask( | |
57 std::unique_ptr<QueuedTask>(this), (*config).execution_time_ms); | |
58 return false; | |
59 } else { | |
60 packet_sender_->StopSending(); | |
61 return true; | |
62 } | |
63 } | |
64 PacketSender* packet_sender_; | |
65 const std::unique_ptr<ConfigReader> config_reader_; | |
66 }; | |
67 } // namespace | |
68 | |
69 PacketSender::PacketSender(TestController* test_controller, | |
70 const std::string& config_file_path) | |
71 : worker_queue_("Packet Sender", rtc::TaskQueue::Priority::HIGH), | |
72 packet_size_(0), | |
73 send_interval_ms_(0), | |
74 sequence_number_(0), | |
75 sending_(false), | |
76 config_file_path_(config_file_path), | |
77 test_controller_(test_controller) {} | |
78 | |
79 PacketSender::~PacketSender() = default; | |
80 | |
81 void PacketSender::StartSending() { | |
82 sending_ = true; | |
83 worker_queue_.PostTask( | |
84 std::unique_ptr<rtc::QueuedTask>(new UpdateTestSettingTask( | |
85 this, | |
86 std::unique_ptr<ConfigReader>(new ConfigReader(config_file_path_))))); | |
87 worker_queue_.PostTask( | |
88 std::unique_ptr<rtc::QueuedTask>(new SendPacketTask(this))); | |
89 } | |
90 | |
91 void PacketSender::StopSending() { | |
92 sending_ = false; | |
93 test_controller_->OnTestDone(); | |
94 } | |
95 | |
96 bool PacketSender::IsSending() { | |
97 return sending_; | |
98 } | |
99 | |
100 void PacketSender::SendPacket() { | |
101 NetworkTesterPacket packet; | |
102 packet.set_type(NetworkTesterPacket::TEST_DATA); | |
103 packet.set_sequence_number(sequence_number_++); | |
104 packet.set_send_timestamp(rtc::TimeMicros()); | |
stefan-webrtc
2017/03/30 07:56:53
You could also grab this from the SignalSentPacket
michaelt
2017/03/30 08:29:26
Isn't the packet already sent on SignalSentPacket
stefan-webrtc
2017/03/30 09:20:31
It is signaled once the socket has sent the packet
michaelt
2017/03/30 09:31:03
In the current impl. I have to set the send time i
stefan-webrtc
2017/03/30 09:42:22
I see, probably good enough anyway since the app i
| |
105 test_controller_->SendData(packet, rtc::Optional<size_t>(packet_size_)); | |
106 } | |
107 | |
108 int64_t PacketSender::GetSendIntervalMs() { | |
109 return send_interval_ms_; | |
110 } | |
111 | |
112 void PacketSender::UpdateTestSetting(size_t packet_size, | |
113 int64_t send_interval_ms) { | |
114 send_interval_ms_ = send_interval_ms; | |
115 packet_size_ = packet_size; | |
116 } | |
117 | |
118 } // namespace webrtc | |
OLD | NEW |