Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(648)

Unified Diff: webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc

Issue 1202253003: More Simulation Framework features (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Using rtc::scoped_ptr on nada_unittest.cc Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
index ccbc522b7e375d2e065fe337e6da0038ac237097..2500679343a52c37da87f6ec6ff4fc59e0e225fe 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
@@ -17,7 +17,6 @@
#include <math.h>
#include <algorithm>
#include <vector>
-#include <iostream>
#include "webrtc/base/common.h"
#include "webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h"
@@ -28,16 +27,14 @@ namespace webrtc {
namespace testing {
namespace bwe {
-const int NadaBweSender::kMinRefRateKbps = 150;
-const int NadaBweSender::kMaxRefRateKbps = 1500;
const int64_t NadaBweReceiver::kReceivingRateTimeWindowMs = 500;
NadaBweReceiver::NadaBweReceiver(int flow_id)
- : BweReceiver(flow_id),
+ : BweReceiver(flow_id, kReceivingRateTimeWindowMs),
clock_(0),
last_feedback_ms_(0),
recv_stats_(ReceiveStatistics::Create(&clock_)),
- baseline_delay_ms_(0),
+ baseline_delay_ms_(10000), // Initialized as an upper bound.
delay_signal_ms_(0),
last_congestion_signal_ms_(0),
last_delays_index_(0),
@@ -57,16 +54,19 @@ void NadaBweReceiver::ReceivePacket(int64_t arrival_time_ms,
clock_.AdvanceTimeMilliseconds(arrival_time_ms - clock_.TimeInMilliseconds());
recv_stats_->IncomingPacket(media_packet.header(),
media_packet.payload_size(), false);
- int64_t delay_ms = arrival_time_ms -
- media_packet.creation_time_us() / 1000; // Refered as x_n.
+ // Refered as x_n.
+ int64_t delay_ms = arrival_time_ms - media_packet.sender_timestamp_ms();
+
// The min should be updated within the first 10 minutes.
if (clock_.TimeInMilliseconds() < 10 * 60 * 1000) {
baseline_delay_ms_ = std::min(baseline_delay_ms_, delay_ms);
}
+
delay_signal_ms_ = delay_ms - baseline_delay_ms_; // Refered as d_n.
const int kMedian = ARRAY_SIZE(last_delays_ms_);
last_delays_ms_[(last_delays_index_++) % kMedian] = delay_signal_ms_;
int size = std::min(last_delays_index_, kMedian);
+
int64_t median_filtered_delay_ms_ = MedianFilter(last_delays_ms_, size);
exp_smoothed_delay_ms_ = ExponentialSmoothingFilter(
median_filtered_delay_ms_, exp_smoothed_delay_ms_, kAlpha);
@@ -84,9 +84,8 @@ void NadaBweReceiver::ReceivePacket(int64_t arrival_time_ms,
est_queuing_delay_signal_ms_ = 0;
}
- received_packets_.Insert(media_packet.sequence_number(),
- media_packet.send_time_ms(), arrival_time_ms,
- media_packet.payload_size());
+ // Log received packet information.
+ BweReceiver::ReceivePacket(arrival_time_ms, media_packet);
}
FeedbackPacket* NadaBweReceiver::GetFeedback(int64_t now_ms) {
@@ -110,67 +109,19 @@ FeedbackPacket* NadaBweReceiver::GetFeedback(int64_t now_ms) {
last_feedback_ms_ = now_ms;
last_congestion_signal_ms_ = congestion_signal_ms;
- PacketIdentifierNode* latest = *(received_packets_.begin());
- int64_t corrected_send_time_ms =
- latest->send_time_ms + now_ms - latest->arrival_time_ms;
+ int64_t corrected_send_time_ms = 0L;
+
+ if (!received_packets_.empty()) {
+ PacketIdentifierNode* latest = *(received_packets_.begin());
+ corrected_send_time_ms =
+ latest->send_time_ms + now_ms - latest->arrival_time_ms;
+ }
// Sends a tuple containing latest values of <d_hat_n, d_tilde_n, x_n, x'_n,
// R_r> and additional information.
- return new NadaFeedback(flow_id_, now_ms, exp_smoothed_delay_ms_,
+ return new NadaFeedback(flow_id_, now_ms * 1000, exp_smoothed_delay_ms_,
est_queuing_delay_signal_ms_, congestion_signal_ms,
- derivative, RecentReceivingRate(),
- corrected_send_time_ms);
-}
-
-// For a given time window, compute the receiving speed rate in kbps.
-// As described below, three cases are considered depending on the number of
-// packets received.
-size_t NadaBweReceiver::RecentReceivingRate() {
- // If the receiver didn't receive any packet, return 0.
- if (received_packets_.empty()) {
- return 0.0f;
- }
- size_t total_size = 0;
- int number_packets = 0;
-
- PacketNodeIt node_it = received_packets_.begin();
-
- int64_t last_time_ms = (*node_it)->arrival_time_ms;
- int64_t start_time_ms = last_time_ms;
- PacketNodeIt end = received_packets_.end();
-
- // Stops after including the first packet out of the timeWindow.
- // Ameliorates results when there are wide gaps between packets.
- // E.g. Large packets : p1(0ms), p2(3000ms).
- while (node_it != end) {
- total_size += (*node_it)->payload_size;
- last_time_ms = (*node_it)->arrival_time_ms;
- ++number_packets;
- if ((*node_it)->arrival_time_ms <
- start_time_ms - kReceivingRateTimeWindowMs) {
- break;
- }
- ++node_it;
- }
-
- int64_t corrected_time_ms;
- // If the receiver received a single packet, return its size*8/timeWindow.
- if (number_packets == 1) {
- corrected_time_ms = kReceivingRateTimeWindowMs;
- }
- // If the receiver received multiple packets, use as time interval the gap
- // between first and last packet falling in the timeWindow corrected by the
- // factor number_packets/(number_packets-1).
- // E.g: Let timeWindow = 500ms, payload_size = 500 bytes, number_packets = 2,
- // packets received at t1(0ms) and t2(499 or 501ms). This prevent the function
- // from returning ~2*8, sending instead a more likely ~1*8 kbps.
- else {
- corrected_time_ms = (number_packets * (start_time_ms - last_time_ms)) /
- (number_packets - 1);
- }
-
- // Converting from bytes/ms to kbits/s.
- return static_cast<size_t>(8 * total_size / corrected_time_ms);
+ derivative, RecentKbps(), corrected_send_time_ms);
}
int64_t NadaBweReceiver::MedianFilter(int64_t* last_delays_ms, int size) {
@@ -193,16 +144,16 @@ int64_t NadaBweReceiver::ExponentialSmoothingFilter(int64_t new_value,
// Implementation according to Cisco's proposal by default.
NadaBweSender::NadaBweSender(int kbps, BitrateObserver* observer, Clock* clock)
- : clock_(clock),
+ : BweSender(kbps), // Referred as "Reference Rate" = R_n.,
+ clock_(clock),
observer_(observer),
- bitrate_kbps_(kbps),
original_operating_mode_(true) {
}
NadaBweSender::NadaBweSender(BitrateObserver* observer, Clock* clock)
- : clock_(clock),
+ : BweSender(kMinBitrateKbps), // Referred as "Reference Rate" = R_n.
+ clock_(clock),
observer_(observer),
- bitrate_kbps_(kMinRefRateKbps),
original_operating_mode_(true) {
}
@@ -252,23 +203,23 @@ void NadaBweSender::GiveFeedback(const FeedbackPacket& feedback) {
if (fb.congestion_signal() == fb.est_queuing_delay_signal_ms() &&
fb.est_queuing_delay_signal_ms() < kQueuingDelayUpperBoundMs &&
fb.exp_smoothed_delay_ms() <
- kMinRefRateKbps / kProportionalityDelayBits &&
+ kMinBitrateKbps / kProportionalityDelayBits &&
fb.derivative() < kDerivativeUpperBound &&
- fb.receiving_rate() > kMinRefRateKbps) {
+ fb.receiving_rate() > kMinBitrateKbps) {
AcceleratedRampUp(fb);
} else if (fb.congestion_signal() > kMaxCongestionSignalMs ||
fb.exp_smoothed_delay_ms() > kMaxCongestionSignalMs) {
AcceleratedRampDown(fb);
} else {
double bitrate_reference =
- (2.0 * bitrate_kbps_) / (kMaxRefRateKbps + kMinRefRateKbps);
+ (2.0 * bitrate_kbps_) / (kMaxBitrateKbps + kMinBitrateKbps);
double smoothing_factor = pow(bitrate_reference, 0.75);
GradualRateUpdate(fb, delta_s, smoothing_factor);
}
}
- bitrate_kbps_ = std::min(bitrate_kbps_, kMaxRefRateKbps);
- bitrate_kbps_ = std::max(bitrate_kbps_, kMinRefRateKbps);
+ bitrate_kbps_ = std::min(bitrate_kbps_, kMaxBitrateKbps);
+ bitrate_kbps_ = std::max(bitrate_kbps_, kMinBitrateKbps);
observer_->OnNetworkChanged(1000 * bitrate_kbps_, 0, rtt_ms);
}
@@ -312,11 +263,11 @@ void NadaBweSender::GradualRateUpdate(const NadaFeedback& fb,
float x_hat = fb.congestion_signal() + kEta * kTauOMs * fb.derivative();
float kTheta =
- kPriorityWeight * (kMaxRefRateKbps - kMinRefRateKbps) * kReferenceDelayMs;
+ kPriorityWeight * (kMaxBitrateKbps - kMinBitrateKbps) * kReferenceDelayMs;
int original_increase =
static_cast<int>((kKappa * delta_s *
- (kTheta - (bitrate_kbps_ - kMinRefRateKbps) * x_hat)) /
+ (kTheta - (bitrate_kbps_ - kMinBitrateKbps) * x_hat)) /
(kTauOMs * kTauOMs) +
0.5f);

Powered by Google App Engine
This is Rietveld 408576698