| Index: webrtc/modules/remote_bitrate_estimator/test/packet_receiver.cc
|
| diff --git a/webrtc/modules/remote_bitrate_estimator/test/packet_receiver.cc b/webrtc/modules/remote_bitrate_estimator/test/packet_receiver.cc
|
| index c13f14437a5239be926acfeb7d6b7a772d35f239..acae76e797de8b60eebca78ee89b2dbbdfaa9835 100644
|
| --- a/webrtc/modules/remote_bitrate_estimator/test/packet_receiver.cc
|
| +++ b/webrtc/modules/remote_bitrate_estimator/test/packet_receiver.cc
|
| @@ -10,7 +10,6 @@
|
|
|
| #include "webrtc/modules/remote_bitrate_estimator/test/packet_receiver.h"
|
|
|
| -#include <math.h>
|
| #include <vector>
|
|
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -29,35 +28,52 @@ PacketReceiver::PacketReceiver(PacketProcessorListener* listener,
|
| int flow_id,
|
| BandwidthEstimatorType bwe_type,
|
| bool plot_delay,
|
| - bool plot_bwe)
|
| + bool plot_bwe,
|
| + MetricRecorder* metric_recorder)
|
| : PacketProcessor(listener, flow_id, kReceiver),
|
| - delay_log_prefix_(),
|
| - metric_log_prefix_(),
|
| - packet_loss_log_prefix_(),
|
| - last_delay_plot_ms_(0),
|
| - last_metric_plot_ms_(0),
|
| - last_packet_loss_plot_ms_(0),
|
| - plot_delay_(plot_delay),
|
| - // TODO(magalhaesc) Add separated plot_objective_function and
|
| - // plot_packet_loss parameters to the constructor.
|
| - plot_objective_function_(plot_delay),
|
| - plot_packet_loss_(plot_delay),
|
| bwe_receiver_(CreateBweReceiver(bwe_type, flow_id, plot_bwe)),
|
| - total_delay_ms_(0),
|
| - total_throughput_(0),
|
| - number_packets_(0) {
|
| - // Setup the prefix ststd::rings used when logging.
|
| - std::stringstream ss1;
|
| - ss1 << "Delay_" << flow_id << "#2";
|
| - delay_log_prefix_ = ss1.str();
|
| -
|
| - std::stringstream ss2;
|
| - ss2 << "Objective_function_" << flow_id << "#2";
|
| - metric_log_prefix_ = ss2.str();
|
| -
|
| - std::stringstream ss3;
|
| - ss3 << "Packet_Loss_" << flow_id << "#2";
|
| - packet_loss_log_prefix_ = ss3.str();
|
| + metric_recorder_(metric_recorder) {
|
| + if (metric_recorder_ != nullptr) {
|
| + // Setup the prefix ststd::rings used when logging.
|
| + std::vector<std::string> prefixes;
|
| +
|
| + std::stringstream ss1;
|
| + ss1 << "Throughput_kbps_" << flow_id << "#2";
|
| + prefixes.push_back(ss1.str()); // Throughput.
|
| +
|
| + std::stringstream ss2;
|
| + ss2 << "Delay_ms_" << flow_id << "#2";
|
| + prefixes.push_back(ss2.str()); // Delay.
|
| +
|
| + std::stringstream ss3;
|
| + ss3 << "Packet_Loss_" << flow_id << "#2";
|
| + prefixes.push_back(ss3.str()); // Loss.
|
| +
|
| + std::stringstream ss4;
|
| + ss4 << "Objective_function_" << flow_id << "#2";
|
| + prefixes.push_back(ss4.str()); // Objective.
|
| +
|
| + // Plot Total/PerFlow Available capacity together with throughputs.
|
| + std::stringstream ss5;
|
| + ss5 << "Throughput_kbps" << flow_id << "#1";
|
| + prefixes.push_back(ss5.str()); // Total Available.
|
| + prefixes.push_back(ss5.str()); // Available per flow.
|
| +
|
| + metric_recorder_->SetPlotInformation(prefixes);
|
| + }
|
| +}
|
| +
|
| +PacketReceiver::PacketReceiver(PacketProcessorListener* listener,
|
| + int flow_id,
|
| + BandwidthEstimatorType bwe_type,
|
| + bool plot_delay,
|
| + bool plot_bwe)
|
| + : PacketReceiver(listener,
|
| + flow_id,
|
| + bwe_type,
|
| + plot_delay,
|
| + plot_bwe,
|
| + nullptr) {
|
| }
|
|
|
| PacketReceiver::~PacketReceiver() {
|
| @@ -77,16 +93,16 @@ void PacketReceiver::RunFor(int64_t time_ms, Packets* in_out) {
|
| const MediaPacket* media_packet = static_cast<const MediaPacket*>(*it);
|
| // We're treating the send time (from previous filter) as the arrival
|
| // time once packet reaches the estimator.
|
| - int64_t arrival_time_ms = (media_packet->send_time_us() + 500) / 1000;
|
| - int64_t send_time_ms = (media_packet->creation_time_us() + 500) / 1000;
|
| + int64_t arrival_time_ms = media_packet->send_time_ms();
|
| + int64_t send_time_ms = media_packet->creation_time_ms();
|
| delay_stats_.Push(arrival_time_ms - send_time_ms);
|
| - PlotDelay(arrival_time_ms, send_time_ms);
|
| - PlotObjectiveFunction(arrival_time_ms);
|
| - PlotPacketLoss(arrival_time_ms);
|
|
|
| - total_delay_ms_ += arrival_time_ms - send_time_ms;
|
| - total_throughput_ += media_packet->payload_size();
|
| - ++number_packets_;
|
| + if (metric_recorder_ != nullptr) {
|
| + metric_recorder_->UpdateTime(arrival_time_ms);
|
| + UpdateMetrics(arrival_time_ms, send_time_ms,
|
| + media_packet->payload_size());
|
| + metric_recorder_->PlotAllDynamics();
|
| + }
|
|
|
| bwe_receiver_->ReceivePacket(arrival_time_ms, *media_packet);
|
| FeedbackPacket* fb = bwe_receiver_->GetFeedback(arrival_time_ms);
|
| @@ -102,46 +118,17 @@ void PacketReceiver::RunFor(int64_t time_ms, Packets* in_out) {
|
| in_out->merge(feedback, DereferencingComparator<Packet>);
|
| }
|
|
|
| -void PacketReceiver::PlotDelay(int64_t arrival_time_ms, int64_t send_time_ms) {
|
| - static const int kDelayPlotIntervalMs = 100;
|
| - if (!plot_delay_)
|
| - return;
|
| - if (arrival_time_ms - last_delay_plot_ms_ > kDelayPlotIntervalMs) {
|
| - BWE_TEST_LOGGING_PLOT(0, delay_log_prefix_, arrival_time_ms,
|
| - arrival_time_ms - send_time_ms);
|
| - last_delay_plot_ms_ = arrival_time_ms;
|
| - }
|
| -}
|
| -
|
| -double PacketReceiver::ObjectiveFunction() {
|
| - const double kDelta = 1.0; // Delay penalty factor.
|
| - double throughput_metric = log(static_cast<double>(total_throughput_));
|
| - double delay_penalty = kDelta * log(static_cast<double>(total_delay_ms_));
|
| - return throughput_metric - delay_penalty;
|
| +void PacketReceiver::UpdateMetrics(int64_t arrival_time_ms,
|
| + int64_t send_time_ms,
|
| + size_t payload_size) {
|
| + metric_recorder_->UpdateThroughput(bwe_receiver_->RecentKbps(), payload_size);
|
| + metric_recorder_->UpdateDelay(arrival_time_ms - send_time_ms);
|
| + metric_recorder_->UpdateLoss(bwe_receiver_->RecentPacketLossRatio());
|
| + metric_recorder_->UpdateObjective();
|
| }
|
|
|
| -void PacketReceiver::PlotObjectiveFunction(int64_t arrival_time_ms) {
|
| - static const int kMetricPlotIntervalMs = 1000;
|
| - if (!plot_objective_function_) {
|
| - return;
|
| - }
|
| - if (arrival_time_ms - last_metric_plot_ms_ > kMetricPlotIntervalMs) {
|
| - BWE_TEST_LOGGING_PLOT(1, metric_log_prefix_, arrival_time_ms,
|
| - ObjectiveFunction());
|
| - last_metric_plot_ms_ = arrival_time_ms;
|
| - }
|
| -}
|
| -
|
| -void PacketReceiver::PlotPacketLoss(int64_t arrival_time_ms) {
|
| - static const int kPacketLossPlotIntervalMs = 500;
|
| - if (!plot_packet_loss_) {
|
| - return;
|
| - }
|
| - if (arrival_time_ms - last_packet_loss_plot_ms_ > kPacketLossPlotIntervalMs) {
|
| - BWE_TEST_LOGGING_PLOT(2, packet_loss_log_prefix_, arrival_time_ms,
|
| - bwe_receiver_->RecentPacketLossRatio());
|
| - last_packet_loss_plot_ms_ = arrival_time_ms;
|
| - }
|
| +float PacketReceiver::GlobalPacketLoss() {
|
| + return bwe_receiver_->GlobalReceiverPacketLossRatio();
|
| }
|
|
|
| Stats<double> PacketReceiver::GetDelayStats() const {
|
|
|