Enable clang::find_bad_constructs for remote_bitrate_estimator.

This CL removes //build/config/clang:find_bad_constructs from the
suppressed_configs list, which means that clang:find_bad_constructs
is now enabled on these translation units.

Bug: webrtc:9251, webrtc:163
Change-Id: Id377fcd78166e53aad7c663c3ffec5e57fdb1274
Reviewed-on: https://webrtc-review.googlesource.com/89383
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24049}
This commit is contained in:
Mirko Bonadei
2018-07-18 15:37:01 +02:00
committed by Commit Bot
parent ee01a839d2
commit 64f813e71f
30 changed files with 311 additions and 145 deletions

View File

@ -11,6 +11,7 @@ import("../../webrtc.gni")
rtc_static_library("bitrate_controller") { rtc_static_library("bitrate_controller") {
visibility = [ "*" ] visibility = [ "*" ]
sources = [ sources = [
"bitrate_controller.cc",
"bitrate_controller_impl.cc", "bitrate_controller_impl.cc",
"bitrate_controller_impl.h", "bitrate_controller_impl.h",
"include/bitrate_controller.h", "include/bitrate_controller.h",

View File

@ -0,0 +1,23 @@
/*
* Copyright (c) 2018 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.
*
* Usage: this class will register multiple RtcpBitrateObserver's one at each
* RTCP module. It will aggregate the results and run one bandwidth estimation
* and push the result to the encoders via BitrateObserver(s).
*/
#include "modules/bitrate_controller/include/bitrate_controller.h"
namespace webrtc {
size_t BitrateObserver::pacer_queue_size_in_bytes() {
return 0;
}
} // namespace webrtc

View File

@ -45,7 +45,7 @@ class BitrateObserver {
int64_t target_set_time, int64_t target_set_time,
uint64_t congestion_window) {} uint64_t congestion_window) {}
virtual void OnBytesAcked(size_t bytes) {} virtual void OnBytesAcked(size_t bytes) {}
virtual size_t pacer_queue_size_in_bytes() { return 0; } virtual size_t pacer_queue_size_in_bytes();
virtual ~BitrateObserver() {} virtual ~BitrateObserver() {}
}; };
@ -67,7 +67,7 @@ class BitrateController : public Module, public RtcpBandwidthObserver {
static BitrateController* CreateBitrateController(const Clock* clock, static BitrateController* CreateBitrateController(const Clock* clock,
RtcEventLog* event_log); RtcEventLog* event_log);
virtual ~BitrateController() {} ~BitrateController() override {}
// Deprecated, use raw pointer to BitrateController instance instead. // Deprecated, use raw pointer to BitrateController instance instead.
// Creates RtcpBandwidthObserver caller responsible to delete. // Creates RtcpBandwidthObserver caller responsible to delete.

View File

@ -38,11 +38,6 @@ rtc_static_library("remote_bitrate_estimator") {
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ] defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ]
} }
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
deps = [ deps = [
"../..:webrtc_common", "../..:webrtc_common",
"../../:typedefs", "../../:typedefs",
@ -71,10 +66,6 @@ if (!build_with_chromium) {
"../../test:rtp_test_utils", "../../test:rtp_test_utils",
"../rtp_rtcp", "../rtp_rtcp",
] ]
if (is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
} }
} }
@ -101,6 +92,7 @@ if (rtc_include_tests) {
"test/estimators/congestion_window.h", "test/estimators/congestion_window.h",
"test/estimators/max_bandwidth_filter.cc", "test/estimators/max_bandwidth_filter.cc",
"test/estimators/max_bandwidth_filter.h", "test/estimators/max_bandwidth_filter.h",
"test/estimators/min_rtt_filter.cc",
"test/estimators/min_rtt_filter.h", "test/estimators/min_rtt_filter.h",
"test/estimators/nada.cc", "test/estimators/nada.cc",
"test/estimators/nada.h", "test/estimators/nada.h",
@ -112,6 +104,7 @@ if (rtc_include_tests) {
"test/estimators/tcp.h", "test/estimators/tcp.h",
"test/metric_recorder.cc", "test/metric_recorder.cc",
"test/metric_recorder.h", "test/metric_recorder.h",
"test/packet.cc",
"test/packet.h", "test/packet.h",
"test/packet_receiver.cc", "test/packet_receiver.cc",
"test/packet_receiver.h", "test/packet_receiver.h",
@ -125,11 +118,6 @@ if (rtc_include_tests) {
defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ] defines = [ "BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0" ]
} }
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
deps = [ deps = [
":remote_bitrate_estimator", ":remote_bitrate_estimator",
"..:module_api", "..:module_api",

View File

@ -58,6 +58,9 @@ uint32_t ConvertMsTo24Bits(int64_t time_ms) {
return time_24_bits; return time_24_bits;
} }
RemoteBitrateEstimatorAbsSendTime::~RemoteBitrateEstimatorAbsSendTime() =
default;
bool RemoteBitrateEstimatorAbsSendTime::IsWithinClusterBounds( bool RemoteBitrateEstimatorAbsSendTime::IsWithinClusterBounds(
int send_delta_ms, int send_delta_ms,
const Cluster& cluster_aggregate) { const Cluster& cluster_aggregate) {

View File

@ -69,7 +69,7 @@ class RemoteBitrateEstimatorAbsSendTime : public RemoteBitrateEstimator {
public: public:
RemoteBitrateEstimatorAbsSendTime(RemoteBitrateObserver* observer, RemoteBitrateEstimatorAbsSendTime(RemoteBitrateObserver* observer,
const Clock* clock); const Clock* clock);
virtual ~RemoteBitrateEstimatorAbsSendTime() {} ~RemoteBitrateEstimatorAbsSendTime() override;
void IncomingPacket(int64_t arrival_time_ms, void IncomingPacket(int64_t arrival_time_ms,
size_t payload_size, size_t payload_size,

View File

@ -27,7 +27,7 @@ class RemoteBitrateEstimatorSingleStream : public RemoteBitrateEstimator {
public: public:
RemoteBitrateEstimatorSingleStream(RemoteBitrateObserver* observer, RemoteBitrateEstimatorSingleStream(RemoteBitrateObserver* observer,
const Clock* clock); const Clock* clock);
virtual ~RemoteBitrateEstimatorSingleStream(); ~RemoteBitrateEstimatorSingleStream() override;
void IncomingPacket(int64_t arrival_time_ms, void IncomingPacket(int64_t arrival_time_ms,
size_t payload_size, size_t payload_size,

View File

@ -34,7 +34,7 @@ class RemoteEstimatorProxy : public RemoteBitrateEstimator {
public: public:
RemoteEstimatorProxy(const Clock* clock, RemoteEstimatorProxy(const Clock* clock,
TransportFeedbackSenderInterface* feedback_sender); TransportFeedbackSenderInterface* feedback_sender);
virtual ~RemoteEstimatorProxy(); ~RemoteEstimatorProxy() override;
void IncomingPacket(int64_t arrival_time_ms, void IncomingPacket(int64_t arrival_time_ms,
size_t payload_size, size_t payload_size,

View File

@ -56,10 +56,14 @@ void BweReceiver::ReceivePacket(int64_t arrival_time_ms,
static_cast<uint32_t>(media_packet.payload_size())); static_cast<uint32_t>(media_packet.payload_size()));
} }
FeedbackPacket* BweReceiver::GetFeedback(int64_t now_ms) {
return nullptr;
}
class NullBweSender : public BweSender { class NullBweSender : public BweSender {
public: public:
NullBweSender() {} NullBweSender() {}
virtual ~NullBweSender() {} ~NullBweSender() override {}
int GetFeedbackIntervalMs() const override { return 1000; } int GetFeedbackIntervalMs() const override { return 1000; }
void GiveFeedback(const FeedbackPacket& feedback) override {} void GiveFeedback(const FeedbackPacket& feedback) override {}
@ -215,6 +219,8 @@ float BweReceiver::RecentPacketLossRatio() {
return static_cast<float>(gap - number_packets_received) / gap; return static_cast<float>(gap - number_packets_received) / gap;
} }
LinkedSet::LinkedSet(int capacity) : capacity_(capacity) {}
LinkedSet::~LinkedSet() { LinkedSet::~LinkedSet() {
while (!empty()) while (!empty())
RemoveTail(); RemoveTail();

View File

@ -71,7 +71,7 @@ typedef std::list<PacketIdentifierNode*>::iterator PacketNodeIt;
// Allows efficient insertion, deletion and search. // Allows efficient insertion, deletion and search.
class LinkedSet { class LinkedSet {
public: public:
explicit LinkedSet(int capacity) : capacity_(capacity) {} explicit LinkedSet(int capacity);
~LinkedSet(); ~LinkedSet();
// If the arriving packet (identified by its sequence number) is already // If the arriving packet (identified by its sequence number) is already
@ -116,7 +116,7 @@ class BweSender : public Module {
public: public:
BweSender() {} BweSender() {}
explicit BweSender(int bitrate_kbps) : bitrate_kbps_(bitrate_kbps) {} explicit BweSender(int bitrate_kbps) : bitrate_kbps_(bitrate_kbps) {}
virtual ~BweSender() {} ~BweSender() override {}
virtual int GetFeedbackIntervalMs() const = 0; virtual int GetFeedbackIntervalMs() const = 0;
virtual void GiveFeedback(const FeedbackPacket& feedback) = 0; virtual void GiveFeedback(const FeedbackPacket& feedback) = 0;
@ -138,7 +138,7 @@ class BweReceiver {
virtual void ReceivePacket(int64_t arrival_time_ms, virtual void ReceivePacket(int64_t arrival_time_ms,
const MediaPacket& media_packet); const MediaPacket& media_packet);
virtual FeedbackPacket* GetFeedback(int64_t now_ms) { return NULL; } virtual FeedbackPacket* GetFeedback(int64_t now_ms);
size_t GetSetCapacity() { return received_packets_.capacity(); } size_t GetSetCapacity() { return received_packets_.capacity(); }
double BitrateWindowS() const { return rate_counter_.BitrateWindowS(); } double BitrateWindowS() const { return rate_counter_.BitrateWindowS(); }

View File

@ -36,6 +36,9 @@ namespace bwe {
PacketProcessorRunner::PacketProcessorRunner(PacketProcessor* processor) PacketProcessorRunner::PacketProcessorRunner(PacketProcessor* processor)
: processor_(processor) {} : processor_(processor) {}
PacketProcessorRunner::PacketProcessorRunner(
const PacketProcessorRunner& runner) = default;
PacketProcessorRunner::~PacketProcessorRunner() { PacketProcessorRunner::~PacketProcessorRunner() {
for (Packet* packet : queue_) for (Packet* packet : queue_)
delete packet; delete packet;
@ -121,6 +124,9 @@ void BweTest::SetUp() {
BWE_TEST_LOGGING_GLOBAL_ENABLE(false); BWE_TEST_LOGGING_GLOBAL_ENABLE(false);
} }
Link::Link() = default;
Link::~Link() = default;
void Link::AddPacketProcessor(PacketProcessor* processor, void Link::AddPacketProcessor(PacketProcessor* processor,
ProcessorType processor_type) { ProcessorType processor_type) {
assert(processor); assert(processor);

View File

@ -33,6 +33,7 @@ class PacketSender;
class PacketProcessorRunner { class PacketProcessorRunner {
public: public:
explicit PacketProcessorRunner(PacketProcessor* processor); explicit PacketProcessorRunner(PacketProcessor* processor);
PacketProcessorRunner(const PacketProcessorRunner&);
~PacketProcessorRunner(); ~PacketProcessorRunner();
bool RunsProcessor(const PacketProcessor* processor) const; bool RunsProcessor(const PacketProcessor* processor) const;
@ -48,11 +49,12 @@ class PacketProcessorRunner {
class Link : public PacketProcessorListener { class Link : public PacketProcessorListener {
public: public:
virtual ~Link() {} Link();
~Link() override;
virtual void AddPacketProcessor(PacketProcessor* processor, void AddPacketProcessor(PacketProcessor* processor,
ProcessorType type); ProcessorType type) override;
virtual void RemovePacketProcessor(PacketProcessor* processor); void RemovePacketProcessor(PacketProcessor* processor) override;
void Run(int64_t run_for_ms, int64_t now_ms, Packets* packets); void Run(int64_t run_for_ms, int64_t now_ms, Packets* packets);

View File

@ -61,9 +61,9 @@ class BaseLineFileVerify : public BaseLineFileInterface {
} }
} }
} }
virtual ~BaseLineFileVerify() {} ~BaseLineFileVerify() override {}
virtual void Estimate(int64_t time_ms, uint32_t estimate_bps) { void Estimate(int64_t time_ms, uint32_t estimate_bps) override {
if (reader_.get()) { if (reader_.get()) {
uint32_t read_ms = 0; uint32_t read_ms = 0;
uint32_t read_bps = 0; uint32_t read_bps = 0;
@ -77,7 +77,7 @@ class BaseLineFileVerify : public BaseLineFileInterface {
} }
} }
virtual bool VerifyOrWrite() { bool VerifyOrWrite() override {
if (reader_.get()) { if (reader_.get()) {
if (reader_->IsAtEnd()) { if (reader_->IsAtEnd()) {
return true; return true;
@ -104,15 +104,15 @@ class BaseLineFileUpdate : public BaseLineFileInterface {
output_content_.push_back(kMagicMarker); output_content_.push_back(kMagicMarker);
output_content_.push_back(kFileVersion1); output_content_.push_back(kFileVersion1);
} }
virtual ~BaseLineFileUpdate() {} ~BaseLineFileUpdate() override {}
virtual void Estimate(int64_t time_ms, uint32_t estimate_bps) { void Estimate(int64_t time_ms, uint32_t estimate_bps) override {
verifier_->Estimate(time_ms, estimate_bps); verifier_->Estimate(time_ms, estimate_bps);
output_content_.push_back(static_cast<uint32_t>(time_ms)); output_content_.push_back(static_cast<uint32_t>(time_ms));
output_content_.push_back(estimate_bps); output_content_.push_back(estimate_bps);
} }
virtual bool VerifyOrWrite() { bool VerifyOrWrite() override {
if (!verifier_->VerifyOrWrite()) { if (!verifier_->VerifyOrWrite()) {
std::string dir_path = webrtc::test::OutputPath() + kResourceSubDir; std::string dir_path = webrtc::test::OutputPath() + kResourceSubDir;
if (!webrtc::test::CreateDir(dir_path)) { if (!webrtc::test::CreateDir(dir_path)) {

View File

@ -21,6 +21,17 @@ namespace webrtc {
namespace testing { namespace testing {
namespace bwe { namespace bwe {
RateCounter::RateCounter(int64_t window_size_ms)
: window_size_us_(1000 * window_size_ms),
recently_received_packets_(0),
recently_received_bytes_(0),
last_accumulated_us_(0),
window_() {}
RateCounter::RateCounter() : RateCounter(1000) {}
RateCounter::~RateCounter() = default;
class DelayCapHelper { class DelayCapHelper {
public: public:
// Max delay = 0 stands for +infinite. // Max delay = 0 stands for +infinite.
@ -93,31 +104,6 @@ double RateCounter::BitrateWindowS() const {
return static_cast<double>(window_size_us_) / (1000 * 1000); return static_cast<double>(window_size_us_) / (1000 * 1000);
} }
Packet::Packet()
: flow_id_(0),
creation_time_us_(-1),
send_time_us_(-1),
sender_timestamp_us_(-1),
payload_size_(0) {}
Packet::Packet(int flow_id, int64_t send_time_us, size_t payload_size)
: flow_id_(flow_id),
creation_time_us_(send_time_us),
send_time_us_(send_time_us),
sender_timestamp_us_(send_time_us),
payload_size_(payload_size) {}
Packet::~Packet() {}
bool Packet::operator<(const Packet& rhs) const {
return send_time_us_ < rhs.send_time_us_;
}
void Packet::set_send_time_us(int64_t send_time_us) {
assert(send_time_us >= 0);
send_time_us_ = send_time_us;
}
MediaPacket::MediaPacket() { MediaPacket::MediaPacket() {
memset(&header_, 0, sizeof(header_)); memset(&header_, 0, sizeof(header_));
} }
@ -685,6 +671,10 @@ VideoSource::VideoSource(int flow_id,
prototype_header_.sequenceNumber = 0xf000u; prototype_header_.sequenceNumber = 0xf000u;
} }
int VideoSource::flow_id() const {
return flow_id_;
}
uint32_t VideoSource::NextFrameSize() { uint32_t VideoSource::NextFrameSize() {
return frame_size_bytes_; return frame_size_bytes_;
} }

View File

@ -47,14 +47,9 @@ class DelayCapHelper;
class RateCounter { class RateCounter {
public: public:
explicit RateCounter(int64_t window_size_ms) explicit RateCounter(int64_t window_size_ms);
: window_size_us_(1000 * window_size_ms), RateCounter();
recently_received_packets_(0), ~RateCounter();
recently_received_bytes_(0),
last_accumulated_us_(0),
window_() {}
RateCounter() : RateCounter(1000) {}
void UpdateRates(int64_t send_time_us, uint32_t payload_size); void UpdateRates(int64_t send_time_us, uint32_t payload_size);
@ -236,12 +231,12 @@ class RateCounterFilter : public PacketProcessor {
const char* name, const char* name,
int64_t start_plotting_time_ms, int64_t start_plotting_time_ms,
const std::string& algorithm_name); const std::string& algorithm_name);
virtual ~RateCounterFilter(); ~RateCounterFilter() override;
void LogStats(); void LogStats();
Stats<double> GetBitrateStats() const; Stats<double> GetBitrateStats() const;
virtual void Plot(int64_t timestamp_ms); void Plot(int64_t timestamp_ms) override;
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
private: private:
Stats<double> packets_per_second_stats_; Stats<double> packets_per_second_stats_;
@ -259,10 +254,10 @@ class LossFilter : public PacketProcessor {
public: public:
LossFilter(PacketProcessorListener* listener, int flow_id); LossFilter(PacketProcessorListener* listener, int flow_id);
LossFilter(PacketProcessorListener* listener, const FlowIds& flow_ids); LossFilter(PacketProcessorListener* listener, const FlowIds& flow_ids);
virtual ~LossFilter() {} ~LossFilter() override {}
void SetLoss(float loss_percent); void SetLoss(float loss_percent);
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
private: private:
Random random_; Random random_;
@ -275,10 +270,10 @@ class DelayFilter : public PacketProcessor {
public: public:
DelayFilter(PacketProcessorListener* listener, int flow_id); DelayFilter(PacketProcessorListener* listener, int flow_id);
DelayFilter(PacketProcessorListener* listener, const FlowIds& flow_ids); DelayFilter(PacketProcessorListener* listener, const FlowIds& flow_ids);
virtual ~DelayFilter() {} ~DelayFilter() override {}
void SetOneWayDelayMs(int64_t one_way_delay_ms); void SetOneWayDelayMs(int64_t one_way_delay_ms);
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
private: private:
int64_t one_way_delay_us_; int64_t one_way_delay_us_;
@ -291,10 +286,10 @@ class JitterFilter : public PacketProcessor {
public: public:
JitterFilter(PacketProcessorListener* listener, int flow_id); JitterFilter(PacketProcessorListener* listener, int flow_id);
JitterFilter(PacketProcessorListener* listener, const FlowIds& flow_ids); JitterFilter(PacketProcessorListener* listener, const FlowIds& flow_ids);
virtual ~JitterFilter() {} ~JitterFilter() override {}
void SetMaxJitter(int64_t stddev_jitter_ms); void SetMaxJitter(int64_t stddev_jitter_ms);
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
void set_reorderdering(bool reordering) { reordering_ = reordering; } void set_reorderdering(bool reordering) { reordering_ = reordering; }
int64_t MeanUs(); int64_t MeanUs();
@ -312,10 +307,10 @@ class ReorderFilter : public PacketProcessor {
public: public:
ReorderFilter(PacketProcessorListener* listener, int flow_id); ReorderFilter(PacketProcessorListener* listener, int flow_id);
ReorderFilter(PacketProcessorListener* listener, const FlowIds& flow_ids); ReorderFilter(PacketProcessorListener* listener, const FlowIds& flow_ids);
virtual ~ReorderFilter() {} ~ReorderFilter() override {}
void SetReorder(float reorder_percent); void SetReorder(float reorder_percent);
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
private: private:
Random random_; Random random_;
@ -329,14 +324,14 @@ class ChokeFilter : public PacketProcessor {
public: public:
ChokeFilter(PacketProcessorListener* listener, int flow_id); ChokeFilter(PacketProcessorListener* listener, int flow_id);
ChokeFilter(PacketProcessorListener* listener, const FlowIds& flow_ids); ChokeFilter(PacketProcessorListener* listener, const FlowIds& flow_ids);
virtual ~ChokeFilter(); ~ChokeFilter() override;
void set_capacity_kbps(uint32_t kbps); void set_capacity_kbps(uint32_t kbps);
void set_max_delay_ms(int64_t max_queueing_delay_ms); void set_max_delay_ms(int64_t max_queueing_delay_ms);
uint32_t capacity_kbps(); uint32_t capacity_kbps();
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
Stats<double> GetDelayStats() const; Stats<double> GetDelayStats() const;
@ -356,14 +351,14 @@ class TraceBasedDeliveryFilter : public PacketProcessor {
TraceBasedDeliveryFilter(PacketProcessorListener* listener, TraceBasedDeliveryFilter(PacketProcessorListener* listener,
int flow_id, int flow_id,
const char* name); const char* name);
virtual ~TraceBasedDeliveryFilter(); ~TraceBasedDeliveryFilter() override;
// The file should contain nanosecond timestamps corresponding to the time // The file should contain nanosecond timestamps corresponding to the time
// when the network can accept another packet. The timestamps should be // when the network can accept another packet. The timestamps should be
// separated by new lines, e.g., "100000000\n125000000\n321000000\n..." // separated by new lines, e.g., "100000000\n125000000\n321000000\n..."
bool Init(const std::string& filename); bool Init(const std::string& filename);
virtual void Plot(int64_t timestamp_ms); void Plot(int64_t timestamp_ms) override;
virtual void RunFor(int64_t time_ms, Packets* in_out); void RunFor(int64_t time_ms, Packets* in_out) override;
void set_max_delay_ms(int64_t max_delay_ms); void set_max_delay_ms(int64_t max_delay_ms);
Stats<double> GetDelayStats() const; Stats<double> GetDelayStats() const;
@ -397,7 +392,7 @@ class VideoSource {
virtual void RunFor(int64_t time_ms, Packets* in_out); virtual void RunFor(int64_t time_ms, Packets* in_out);
virtual int flow_id() const { return flow_id_; } int flow_id() const;
virtual void SetBitrateBps(int bitrate_bps) {} virtual void SetBitrateBps(int bitrate_bps) {}
uint32_t bits_per_second() const { return bits_per_second_; } uint32_t bits_per_second() const { return bits_per_second_; }
uint32_t max_payload_size_bytes() const { return kMaxPayloadSizeBytes; } uint32_t max_payload_size_bytes() const { return kMaxPayloadSizeBytes; }
@ -432,7 +427,7 @@ class AdaptiveVideoSource : public VideoSource {
uint32_t kbps, uint32_t kbps,
uint32_t ssrc, uint32_t ssrc,
int64_t first_frame_offset_ms); int64_t first_frame_offset_ms);
virtual ~AdaptiveVideoSource() {} ~AdaptiveVideoSource() override {}
void SetBitrateBps(int bitrate_bps) override; void SetBitrateBps(int bitrate_bps) override;
@ -448,7 +443,7 @@ class PeriodicKeyFrameSource : public AdaptiveVideoSource {
uint32_t ssrc, uint32_t ssrc,
int64_t first_frame_offset_ms, int64_t first_frame_offset_ms,
int key_frame_interval); int key_frame_interval);
virtual ~PeriodicKeyFrameSource() {} ~PeriodicKeyFrameSource() override {}
protected: protected:
uint32_t NextFrameSize() override; uint32_t NextFrameSize() override;

View File

@ -123,6 +123,34 @@ BbrBweSender::BbrBweSender(BitrateObserver* observer, Clock* clock)
BbrBweSender::~BbrBweSender() {} BbrBweSender::~BbrBweSender() {}
BbrBweSender::PacketStats::PacketStats() = default;
BbrBweSender::PacketStats::PacketStats(
uint16_t sequence_number_,
int64_t last_sent_packet_send_time_ms_,
int64_t send_time_ms_,
int64_t ack_time_ms_,
int64_t last_acked_packet_ack_time_ms_,
size_t payload_size_bytes_,
size_t data_sent_bytes_,
size_t data_sent_before_last_sent_packet_bytes_,
size_t data_acked_bytes_,
size_t data_acked_before_last_acked_packet_bytes_)
: sequence_number(sequence_number_),
last_sent_packet_send_time_ms(last_sent_packet_send_time_ms_),
send_time_ms(send_time_ms_),
ack_time_ms(ack_time_ms_),
last_acked_packet_ack_time_ms(last_acked_packet_ack_time_ms_),
payload_size_bytes(payload_size_bytes_),
data_sent_bytes(data_sent_bytes_),
data_sent_before_last_sent_packet_bytes(
data_sent_before_last_sent_packet_bytes_),
data_acked_bytes(data_acked_bytes_),
data_acked_before_last_acked_packet_bytes(
data_acked_before_last_acked_packet_bytes_) {}
BbrBweSender::PacketStats::PacketStats(const PacketStats&) = default;
int BbrBweSender::GetFeedbackIntervalMs() const { int BbrBweSender::GetFeedbackIntervalMs() const {
return kFeedbackIntervalsMs; return kFeedbackIntervalsMs;
} }

View File

@ -31,7 +31,7 @@ class CongestionWindow;
class BbrBweSender : public BweSender { class BbrBweSender : public BweSender {
public: public:
explicit BbrBweSender(BitrateObserver* observer, Clock* clock); explicit BbrBweSender(BitrateObserver* observer, Clock* clock);
virtual ~BbrBweSender(); ~BbrBweSender() override;
enum Mode { enum Mode {
// Startup phase. // Startup phase.
STARTUP, STARTUP,
@ -48,7 +48,7 @@ class BbrBweSender : public BweSender {
}; };
struct PacketStats { struct PacketStats {
PacketStats() {} PacketStats();
PacketStats(uint16_t sequence_number_, PacketStats(uint16_t sequence_number_,
int64_t last_sent_packet_send_time_ms_, int64_t last_sent_packet_send_time_ms_,
int64_t send_time_ms_, int64_t send_time_ms_,
@ -58,19 +58,9 @@ class BbrBweSender : public BweSender {
size_t data_sent_bytes_, size_t data_sent_bytes_,
size_t data_sent_before_last_sent_packet_bytes_, size_t data_sent_before_last_sent_packet_bytes_,
size_t data_acked_bytes_, size_t data_acked_bytes_,
size_t data_acked_before_last_acked_packet_bytes_) size_t data_acked_before_last_acked_packet_bytes_);
: sequence_number(sequence_number_), PacketStats(const PacketStats&);
last_sent_packet_send_time_ms(last_sent_packet_send_time_ms_),
send_time_ms(send_time_ms_),
ack_time_ms(ack_time_ms_),
last_acked_packet_ack_time_ms(last_acked_packet_ack_time_ms_),
payload_size_bytes(payload_size_bytes_),
data_sent_bytes(data_sent_bytes_),
data_sent_before_last_sent_packet_bytes(
data_sent_before_last_sent_packet_bytes_),
data_acked_bytes(data_acked_bytes_),
data_acked_before_last_acked_packet_bytes(
data_acked_before_last_acked_packet_bytes_) {}
// Sequence number of this packet. // Sequence number of this packet.
uint16_t sequence_number; uint16_t sequence_number;
// Send time of the last sent packet at ack time of this packet. // Send time of the last sent packet at ack time of this packet.
@ -226,7 +216,7 @@ class BbrBweSender : public BweSender {
class BbrBweReceiver : public BweReceiver { class BbrBweReceiver : public BweReceiver {
public: public:
explicit BbrBweReceiver(int flow_id); explicit BbrBweReceiver(int flow_id);
virtual ~BbrBweReceiver(); ~BbrBweReceiver() override;
void ReceivePacket(int64_t arrival_time_ms, void ReceivePacket(int64_t arrival_time_ms,
const MediaPacket& media_packet) override; const MediaPacket& media_packet) override;
FeedbackPacket* GetFeedback(int64_t now_ms) override; FeedbackPacket* GetFeedback(int64_t now_ms) override;

View File

@ -0,0 +1,23 @@
/*
* Copyright (c) 2018 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.
*
*/
#include "modules/remote_bitrate_estimator/test/estimators/min_rtt_filter.h"
namespace webrtc {
namespace testing {
namespace bwe {
MinRttFilter::MinRttFilter() = default;
MinRttFilter::~MinRttFilter() = default;
} // namespace bwe
} // namespace testing
} // namespace webrtc

View File

@ -33,8 +33,8 @@ class MinRttFilter {
// This class implements a simple filter to ensure that PROBE_RTT is only // This class implements a simple filter to ensure that PROBE_RTT is only
// entered when RTTs start to increase, instead of fixed 10 second window as // entered when RTTs start to increase, instead of fixed 10 second window as
// in orginal BBR design doc, to avoid unnecessary freezes in stream. // in orginal BBR design doc, to avoid unnecessary freezes in stream.
MinRttFilter() {} MinRttFilter();
~MinRttFilter() {} ~MinRttFilter();
absl::optional<int64_t> min_rtt_ms() { return min_rtt_ms_; } absl::optional<int64_t> min_rtt_ms() { return min_rtt_ms_; }
void AddRttSample(int64_t rtt_ms, int64_t now_ms) { void AddRttSample(int64_t rtt_ms, int64_t now_ms) {

View File

@ -35,7 +35,7 @@ namespace bwe {
class NadaBweReceiver : public BweReceiver { class NadaBweReceiver : public BweReceiver {
public: public:
explicit NadaBweReceiver(int flow_id); explicit NadaBweReceiver(int flow_id);
virtual ~NadaBweReceiver(); ~NadaBweReceiver() override;
void ReceivePacket(int64_t arrival_time_ms, void ReceivePacket(int64_t arrival_time_ms,
const MediaPacket& media_packet) override; const MediaPacket& media_packet) override;
@ -67,7 +67,7 @@ class NadaBweSender : public BweSender {
NadaBweSender(int kbps, BitrateObserver* observer, Clock* clock); NadaBweSender(int kbps, BitrateObserver* observer, Clock* clock);
NadaBweSender(BitrateObserver* observer, Clock* clock); NadaBweSender(BitrateObserver* observer, Clock* clock);
virtual ~NadaBweSender(); ~NadaBweSender() override;
int GetFeedbackIntervalMs() const override; int GetFeedbackIntervalMs() const override;
// Updates the min_feedback_delay_ms_ and the min_round_trip_time_ms_. // Updates the min_feedback_delay_ms_ and the min_round_trip_time_ms_.

View File

@ -56,7 +56,7 @@ class RembReceiver : public BweReceiver, public RemoteBitrateObserver {
static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000; static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000;
RembReceiver(int flow_id, bool plot); RembReceiver(int flow_id, bool plot);
virtual ~RembReceiver(); ~RembReceiver() override;
void ReceivePacket(int64_t arrival_time_ms, void ReceivePacket(int64_t arrival_time_ms,
const MediaPacket& media_packet) override; const MediaPacket& media_packet) override;

View File

@ -58,7 +58,7 @@ class SendSideBweSender : public BweSender, public RemoteBitrateObserver {
class SendSideBweReceiver : public BweReceiver { class SendSideBweReceiver : public BweReceiver {
public: public:
explicit SendSideBweReceiver(int flow_id); explicit SendSideBweReceiver(int flow_id);
virtual ~SendSideBweReceiver(); ~SendSideBweReceiver() override;
void ReceivePacket(int64_t arrival_time_ms, void ReceivePacket(int64_t arrival_time_ms,
const MediaPacket& media_packet) override; const MediaPacket& media_packet) override;

View File

@ -21,7 +21,7 @@ namespace bwe {
class TcpBweReceiver : public BweReceiver { class TcpBweReceiver : public BweReceiver {
public: public:
explicit TcpBweReceiver(int flow_id); explicit TcpBweReceiver(int flow_id);
virtual ~TcpBweReceiver(); ~TcpBweReceiver() override;
void ReceivePacket(int64_t arrival_time_ms, void ReceivePacket(int64_t arrival_time_ms,
const MediaPacket& media_packet) override; const MediaPacket& media_packet) override;

View File

@ -34,6 +34,8 @@ const double kP = 1.0; // Used for Norm Lp.
LinkShare::LinkShare(ChokeFilter* choke_filter) LinkShare::LinkShare(ChokeFilter* choke_filter)
: choke_filter_(choke_filter), running_flows_(choke_filter->flow_ids()) {} : choke_filter_(choke_filter), running_flows_(choke_filter->flow_ids()) {}
LinkShare::~LinkShare() = default;
void LinkShare::PauseFlow(int flow_id) { void LinkShare::PauseFlow(int flow_id) {
running_flows_.erase(flow_id); running_flows_.erase(flow_id);
} }
@ -78,6 +80,8 @@ MetricRecorder::MetricRecorder(const std::string algorithm_name,
packet_sender->set_metric_recorder(this); packet_sender->set_metric_recorder(this);
} }
MetricRecorder::~MetricRecorder() = default;
void MetricRecorder::SetPlotInformation( void MetricRecorder::SetPlotInformation(
const std::vector<std::string>& prefixes, const std::vector<std::string>& prefixes,
bool plot_delay, bool plot_delay,

View File

@ -28,6 +28,7 @@ class PacketSender;
class LinkShare { class LinkShare {
public: public:
explicit LinkShare(ChokeFilter* choke_filter); explicit LinkShare(ChokeFilter* choke_filter);
~LinkShare();
void PauseFlow(int flow_id); // Increases available capacity per flow. void PauseFlow(int flow_id); // Increases available capacity per flow.
void ResumeFlow(int flow_id); // Decreases available capacity per flow. void ResumeFlow(int flow_id); // Decreases available capacity per flow.
@ -67,6 +68,7 @@ class MetricRecorder {
int flow_id, int flow_id,
PacketSender* packet_sender, PacketSender* packet_sender,
LinkShare* link_share); LinkShare* link_share);
~MetricRecorder();
void SetPlotInformation(const std::vector<std::string>& prefixes, void SetPlotInformation(const std::vector<std::string>& prefixes,
bool plot_delay, bool plot_delay,

View File

@ -0,0 +1,97 @@
/*
* Copyright (c) 2018 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.
*/
#include "modules/remote_bitrate_estimator/test/packet.h"
namespace webrtc {
namespace testing {
namespace bwe {
Packet::Packet()
: flow_id_(0),
creation_time_us_(-1),
send_time_us_(-1),
sender_timestamp_us_(-1),
payload_size_(0) {}
Packet::Packet(int flow_id, int64_t send_time_us, size_t payload_size)
: flow_id_(flow_id),
creation_time_us_(send_time_us),
send_time_us_(send_time_us),
sender_timestamp_us_(send_time_us),
payload_size_(payload_size) {}
Packet::~Packet() {}
bool Packet::operator<(const Packet& rhs) const {
return send_time_us_ < rhs.send_time_us_;
}
void Packet::set_send_time_us(int64_t send_time_us) {
assert(send_time_us >= 0);
send_time_us_ = send_time_us;
}
int Packet::flow_id() const {
return flow_id_;
}
int64_t Packet::send_time_us() const {
return send_time_us_;
}
int64_t Packet::sender_timestamp_us() const {
return sender_timestamp_us_;
}
size_t Packet::payload_size() const {
return payload_size_;
}
void Packet::set_sender_timestamp_us(int64_t sender_timestamp_us) {
sender_timestamp_us_ = sender_timestamp_us;
}
int64_t Packet::creation_time_ms() const {
return (creation_time_us_ + 500) / 1000;
}
int64_t Packet::sender_timestamp_ms() const {
return (sender_timestamp_us_ + 500) / 1000;
}
int64_t Packet::send_time_ms() const {
return (send_time_us_ + 500) / 1000;
}
Packet::Type MediaPacket::GetPacketType() const {
return kMedia;
}
Packet::Type FeedbackPacket::GetPacketType() const {
return kFeedback;
}
BbrBweFeedback::~BbrBweFeedback() = default;
SendSideBweFeedback::~SendSideBweFeedback() = default;
TcpFeedback::TcpFeedback(int flow_id,
int64_t send_time_us,
int64_t latest_send_time_ms,
const std::vector<uint16_t>& acked_packets)
: FeedbackPacket(flow_id, send_time_us, latest_send_time_ms),
acked_packets_(acked_packets) {}
TcpFeedback::~TcpFeedback() = default;
} // namespace bwe
} // namespace testing
} // namespace webrtc

View File

@ -34,22 +34,16 @@ class Packet {
virtual bool operator<(const Packet& rhs) const; virtual bool operator<(const Packet& rhs) const;
virtual int flow_id() const { return flow_id_; } virtual int flow_id() const;
virtual void set_send_time_us(int64_t send_time_us); virtual void set_send_time_us(int64_t send_time_us);
virtual int64_t send_time_us() const { return send_time_us_; } virtual int64_t send_time_us() const;
virtual int64_t sender_timestamp_us() const { return sender_timestamp_us_; } virtual int64_t sender_timestamp_us() const;
virtual size_t payload_size() const { return payload_size_; } virtual size_t payload_size() const;
virtual Packet::Type GetPacketType() const = 0; virtual Packet::Type GetPacketType() const = 0;
virtual void set_sender_timestamp_us(int64_t sender_timestamp_us) { virtual void set_sender_timestamp_us(int64_t sender_timestamp_us);
sender_timestamp_us_ = sender_timestamp_us; virtual int64_t creation_time_ms() const;
} virtual int64_t sender_timestamp_ms() const;
virtual int64_t creation_time_ms() const { virtual int64_t send_time_ms() const;
return (creation_time_us_ + 500) / 1000;
}
virtual int64_t sender_timestamp_ms() const {
return (sender_timestamp_us_ + 500) / 1000;
}
virtual int64_t send_time_ms() const { return (send_time_us_ + 500) / 1000; }
protected: protected:
int flow_id_; int flow_id_;
@ -72,7 +66,7 @@ class MediaPacket : public Packet {
const RTPHeader& header); const RTPHeader& header);
MediaPacket(int64_t send_time_us, uint16_t sequence_number); MediaPacket(int64_t send_time_us, uint16_t sequence_number);
virtual ~MediaPacket() {} ~MediaPacket() override {}
int64_t GetAbsSendTimeInMs() const { int64_t GetAbsSendTimeInMs() const {
int64_t timestamp = header_.extension.absoluteSendTime int64_t timestamp = header_.extension.absoluteSendTime
@ -81,7 +75,7 @@ class MediaPacket : public Packet {
} }
void SetAbsSendTimeMs(int64_t abs_send_time_ms); void SetAbsSendTimeMs(int64_t abs_send_time_ms);
const RTPHeader& header() const { return header_; } const RTPHeader& header() const { return header_; }
virtual Packet::Type GetPacketType() const { return kMedia; } Packet::Type GetPacketType() const override;
uint16_t sequence_number() const { return header_.sequenceNumber; } uint16_t sequence_number() const { return header_.sequenceNumber; }
private: private:
@ -100,9 +94,9 @@ class FeedbackPacket : public Packet {
int64_t latest_send_time_ms) int64_t latest_send_time_ms)
: Packet(flow_id, this_send_time_us, 0), : Packet(flow_id, this_send_time_us, 0),
latest_send_time_ms_(latest_send_time_ms) {} latest_send_time_ms_(latest_send_time_ms) {}
virtual ~FeedbackPacket() {} ~FeedbackPacket() override {}
virtual Packet::Type GetPacketType() const { return kFeedback; } Packet::Type GetPacketType() const override;
int64_t latest_send_time_ms() const { return latest_send_time_ms_; } int64_t latest_send_time_ms() const { return latest_send_time_ms_; }
private: private:
@ -115,7 +109,7 @@ class BbrBweFeedback : public FeedbackPacket {
int64_t send_time_us, int64_t send_time_us,
int64_t latest_send_time_ms, int64_t latest_send_time_ms,
const std::vector<uint16_t>& packet_feedback_vector); const std::vector<uint16_t>& packet_feedback_vector);
virtual ~BbrBweFeedback() {} ~BbrBweFeedback() override;
const std::vector<uint16_t>& packet_feedback_vector() const { const std::vector<uint16_t>& packet_feedback_vector() const {
return packet_feedback_vector_; return packet_feedback_vector_;
@ -132,7 +126,7 @@ class RembFeedback : public FeedbackPacket {
int64_t latest_send_time_ms, int64_t latest_send_time_ms,
uint32_t estimated_bps, uint32_t estimated_bps,
RTCPReportBlock report_block); RTCPReportBlock report_block);
virtual ~RembFeedback() {} ~RembFeedback() override {}
uint32_t estimated_bps() const { return estimated_bps_; } uint32_t estimated_bps() const { return estimated_bps_; }
RTCPReportBlock report_block() const { return report_block_; } RTCPReportBlock report_block() const { return report_block_; }
@ -150,7 +144,7 @@ class SendSideBweFeedback : public FeedbackPacket {
int64_t send_time_us, int64_t send_time_us,
int64_t latest_send_time_ms, int64_t latest_send_time_ms,
const std::vector<PacketFeedback>& packet_feedback_vector); const std::vector<PacketFeedback>& packet_feedback_vector);
virtual ~SendSideBweFeedback() {} ~SendSideBweFeedback() override;
const std::vector<PacketFeedback>& packet_feedback_vector() const { const std::vector<PacketFeedback>& packet_feedback_vector() const {
return packet_feedback_vector_; return packet_feedback_vector_;
@ -176,7 +170,7 @@ class NadaFeedback : public FeedbackPacket {
congestion_signal_(congestion_signal), congestion_signal_(congestion_signal),
derivative_(derivative), derivative_(derivative),
receiving_rate_(receiving_rate) {} receiving_rate_(receiving_rate) {}
virtual ~NadaFeedback() {} ~NadaFeedback() override {}
int64_t exp_smoothed_delay_ms() const { return exp_smoothed_delay_ms_; } int64_t exp_smoothed_delay_ms() const { return exp_smoothed_delay_ms_; }
int64_t est_queuing_delay_signal_ms() const { int64_t est_queuing_delay_signal_ms() const {
@ -199,10 +193,8 @@ class TcpFeedback : public FeedbackPacket {
TcpFeedback(int flow_id, TcpFeedback(int flow_id,
int64_t send_time_us, int64_t send_time_us,
int64_t latest_send_time_ms, int64_t latest_send_time_ms,
const std::vector<uint16_t>& acked_packets) const std::vector<uint16_t>& acked_packets);
: FeedbackPacket(flow_id, send_time_us, latest_send_time_ms), ~TcpFeedback() override;
acked_packets_(acked_packets) {}
virtual ~TcpFeedback() {}
const std::vector<uint16_t>& acked_packets() const { return acked_packets_; } const std::vector<uint16_t>& acked_packets() const { return acked_packets_; }

View File

@ -36,7 +36,7 @@ class PacketReceiver : public PacketProcessor {
bool plot_delay, bool plot_delay,
bool plot_bwe, bool plot_bwe,
MetricRecorder* metric_recorder); MetricRecorder* metric_recorder);
~PacketReceiver(); ~PacketReceiver() override;
// Implements PacketProcessor. // Implements PacketProcessor.
void RunFor(int64_t time_ms, Packets* in_out) override; void RunFor(int64_t time_ms, Packets* in_out) override;

View File

@ -28,6 +28,10 @@ namespace {
const float kPaceMultiplier = 2.5f; const float kPaceMultiplier = 2.5f;
} }
uint32_t PacketSender::TargetBitrateKbps() {
return 0;
}
void PacketSender::Pause() { void PacketSender::Pause() {
running_ = false; running_ = false;
if (metric_recorder_ != nullptr) { if (metric_recorder_ != nullptr) {
@ -104,6 +108,10 @@ void VideoSender::RunFor(int64_t time_ms, Packets* in_out) {
ProcessFeedbackAndGeneratePackets(time_ms, &feedbacks, in_out); ProcessFeedbackAndGeneratePackets(time_ms, &feedbacks, in_out);
} }
VideoSource* VideoSender::source() const {
return source_;
}
void VideoSender::ProcessFeedbackAndGeneratePackets( void VideoSender::ProcessFeedbackAndGeneratePackets(
int64_t time_ms, int64_t time_ms,
std::list<FeedbackPacket*>* feedbacks, std::list<FeedbackPacket*>* feedbacks,
@ -327,6 +335,10 @@ void PacedVideoSender::OnNetworkChanged(uint32_t bitrate_for_encoder_bps,
bitrate_for_pacer_bps, in_probe_rtt, congestion_window); bitrate_for_pacer_bps, in_probe_rtt, congestion_window);
} }
size_t PacedVideoSender::pacer_queue_size_in_bytes() {
return pacer_queue_size_in_bytes_;
}
void PacedVideoSender::OnBytesAcked(size_t bytes) { void PacedVideoSender::OnBytesAcked(size_t bytes) {
pacer_->OnBytesAcked(bytes); pacer_->OnBytesAcked(bytes);
} }
@ -358,6 +370,8 @@ TcpSender::TcpSender(PacketProcessorListener* listener,
num_recent_sent_packets_(0), num_recent_sent_packets_(0),
bitrate_kbps_(0) {} bitrate_kbps_(0) {}
TcpSender::~TcpSender() = default;
void TcpSender::RunFor(int64_t time_ms, Packets* in_out) { void TcpSender::RunFor(int64_t time_ms, Packets* in_out) {
if (clock_.TimeInMilliseconds() + time_ms < offset_ms_) { if (clock_.TimeInMilliseconds() + time_ms < offset_ms_) {
clock_.AdvanceTimeMilliseconds(time_ms); clock_.AdvanceTimeMilliseconds(time_ms);
@ -398,6 +412,10 @@ void TcpSender::RunFor(int64_t time_ms, Packets* in_out) {
SendPackets(in_out); SendPackets(in_out);
} }
int TcpSender::GetFeedbackIntervalMs() const {
return 10;
}
void TcpSender::SendPackets(Packets* in_out) { void TcpSender::SendPackets(Packets* in_out) {
int cwnd = ceil(cwnd_); int cwnd = ceil(cwnd_);
int packets_to_send = std::max(cwnd - static_cast<int>(in_flight_.size()), 0); int packets_to_send = std::max(cwnd - static_cast<int>(in_flight_.size()), 0);

View File

@ -38,7 +38,7 @@ class PacketSender : public PacketProcessor {
// We assume that both start at time 0. // We assume that both start at time 0.
clock_(0), clock_(0),
metric_recorder_(nullptr) {} metric_recorder_(nullptr) {}
virtual ~PacketSender() {} ~PacketSender() override {}
// Call GiveFeedback() with the returned interval in milliseconds, provided // Call GiveFeedback() with the returned interval in milliseconds, provided
// there is a new estimate available. // there is a new estimate available.
// Note that changing the feedback interval affects the timing of when the // Note that changing the feedback interval affects the timing of when the
@ -47,7 +47,7 @@ class PacketSender : public PacketProcessor {
virtual int GetFeedbackIntervalMs() const = 0; virtual int GetFeedbackIntervalMs() const = 0;
void SetSenderTimestamps(Packets* in_out); void SetSenderTimestamps(Packets* in_out);
virtual uint32_t TargetBitrateKbps() { return 0; } virtual uint32_t TargetBitrateKbps();
virtual void Pause(); virtual void Pause();
virtual void Resume(int64_t paused_time_ms); virtual void Resume(int64_t paused_time_ms);
@ -68,12 +68,12 @@ class VideoSender : public PacketSender, public BitrateObserver {
VideoSender(PacketProcessorListener* listener, VideoSender(PacketProcessorListener* listener,
VideoSource* source, VideoSource* source,
BandwidthEstimatorType estimator); BandwidthEstimatorType estimator);
virtual ~VideoSender(); ~VideoSender() override;
int GetFeedbackIntervalMs() const override; int GetFeedbackIntervalMs() const override;
void RunFor(int64_t time_ms, Packets* in_out) override; void RunFor(int64_t time_ms, Packets* in_out) override;
virtual VideoSource* source() const { return source_; } virtual VideoSource* source() const;
uint32_t TargetBitrateKbps() override; uint32_t TargetBitrateKbps() override;
@ -104,7 +104,7 @@ class PacedVideoSender : public VideoSender, public PacedSender::PacketSender {
PacedVideoSender(PacketProcessorListener* listener, PacedVideoSender(PacketProcessorListener* listener,
VideoSource* source, VideoSource* source,
BandwidthEstimatorType estimator); BandwidthEstimatorType estimator);
virtual ~PacedVideoSender(); ~PacedVideoSender() override;
void RunFor(int64_t time_ms, Packets* in_out) override; void RunFor(int64_t time_ms, Packets* in_out) override;
@ -127,9 +127,7 @@ class PacedVideoSender : public VideoSender, public PacedSender::PacketSender {
bool in_probe_rtt, bool in_probe_rtt,
int64_t rtt, int64_t rtt,
uint64_t congestion_window) override; uint64_t congestion_window) override;
size_t pacer_queue_size_in_bytes() override { size_t pacer_queue_size_in_bytes() override;
return pacer_queue_size_in_bytes_;
}
void OnBytesAcked(size_t bytes) override; void OnBytesAcked(size_t bytes) override;
private: private:
@ -152,10 +150,10 @@ class TcpSender : public PacketSender {
int flow_id, int flow_id,
int64_t offset_ms, int64_t offset_ms,
int send_limit_bytes); int send_limit_bytes);
virtual ~TcpSender() {} ~TcpSender() override;
void RunFor(int64_t time_ms, Packets* in_out) override; void RunFor(int64_t time_ms, Packets* in_out) override;
int GetFeedbackIntervalMs() const override { return 10; } int GetFeedbackIntervalMs() const override;
uint32_t TargetBitrateKbps() override; uint32_t TargetBitrateKbps() override;