Chromium Code Reviews

Side by Side Diff: webrtc/tools/network_tester/packet_sender.cc

Issue 2779233002: Add first part of the network_tester functionality. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
(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
OLDNEW

Powered by Google App Engine