webrtc/audio/test/audio_stats_test.cc
Per Kjellander 89870ffa95 Reland "Change CallTests to use new PacketReceiver::DeliverRtp and PacketReceiver::DeliverRtcp"
This reverts commit 3e61f881cd.

Reason for revert: Issue fixed in https://webrtc-review.googlesource.com/c/src/+/291104

Original change's description:
> Revert "Change CallTests to use new PacketReceiver::DeliverRtp and PacketReceiver::DeliverRtcp"
>
> This reverts commit 3b96f2c770.
>
> Reason for revert: Seems to cause test failures and perf regressions in tests: webrtc:14833, and  CallPerfTest.Min_Bitrate_VideoAndAudio 
>
>
> Original change's description:
> > Change CallTests to use new PacketReceiver::DeliverRtp and PacketReceiver::DeliverRtcp
> >
> > PacketReceiver::DeliverRtp requires delivered packets to have extensions already mapped.
> > Therefore DirectTransport is provided with the extension mapping.
> >
> > CallTests and tests derived from CallTest create transports in different ways, this cl change CallTest to create tests in only one way to simplify how extensions are provided to the transport but at the same time still allows different network behaviour.
> >
> >
> > Change-Id: Ie8b3ad947c170be61e62c02dadf4adedbb3841f1
> > Bug: webrtc:7135, webrtc:14795
> > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290980
> > Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org>
> > Commit-Queue: Per Kjellander <perkj@webrtc.org>
> > Reviewed-by: Erik Språng <sprang@webrtc.org>
> > Cr-Commit-Position: refs/heads/main@{#39137}
>
> Bug: webrtc:7135, webrtc:14795, webrtc:14833
> Change-Id: Ib6180a47cf7611ed2bc648acc3b9e5cfeec4d9cf
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291220
> Owners-Override: Björn Terelius <terelius@webrtc.org>
> Auto-Submit: Per Kjellander <perkj@webrtc.org>
> Reviewed-by: Björn Terelius <terelius@webrtc.org>
> Commit-Queue: Björn Terelius <terelius@webrtc.org>
> Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
> Cr-Commit-Position: refs/heads/main@{#39146}

Bug: webrtc:7135, webrtc:14795, webrtc:14833
Change-Id: I3fb0210d7a33c600ead5719ce2acb8cc68ec20bd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/291222
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Owners-Override: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39157}
2023-01-20 06:32:29 +00:00

115 lines
4.2 KiB
C++

/*
* Copyright (c) 2017 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 "audio/test/audio_end_to_end_test.h"
#include "rtc_base/numerics/safe_compare.h"
#include "system_wrappers/include/sleep.h"
#include "test/gtest.h"
namespace webrtc {
namespace test {
namespace {
bool IsNear(int reference, int v) {
// Margin is 10%.
const int error = reference / 10 + 1;
return std::abs(reference - v) <= error;
}
class NoLossTest : public AudioEndToEndTest {
public:
const int kTestDurationMs = 8000;
const int kBytesSent = 69351;
const int32_t kPacketsSent = 400;
const int64_t kRttMs = 100;
NoLossTest() = default;
BuiltInNetworkBehaviorConfig GetSendTransportConfig() const override {
BuiltInNetworkBehaviorConfig pipe_config;
pipe_config.queue_delay_ms = kRttMs / 2;
return pipe_config;
}
void PerformTest() override {
SleepMs(kTestDurationMs);
send_audio_device()->StopRecording();
AudioEndToEndTest::PerformTest();
}
void OnStreamsStopped() override {
AudioSendStream::Stats send_stats = send_stream()->GetStats();
EXPECT_PRED2(IsNear, kBytesSent, send_stats.payload_bytes_sent);
EXPECT_PRED2(IsNear, kPacketsSent, send_stats.packets_sent);
EXPECT_EQ(0, send_stats.packets_lost);
EXPECT_EQ(0.0f, send_stats.fraction_lost);
EXPECT_EQ("opus", send_stats.codec_name);
// send_stats.jitter_ms
EXPECT_PRED2(IsNear, kRttMs, send_stats.rtt_ms);
// Send level is 0 because it is cleared in TransmitMixer::StopSend().
EXPECT_EQ(0, send_stats.audio_level);
// send_stats.total_input_energy
// send_stats.total_input_duration
EXPECT_FALSE(send_stats.apm_statistics.delay_median_ms);
EXPECT_FALSE(send_stats.apm_statistics.delay_standard_deviation_ms);
EXPECT_FALSE(send_stats.apm_statistics.echo_return_loss);
EXPECT_FALSE(send_stats.apm_statistics.echo_return_loss_enhancement);
EXPECT_FALSE(send_stats.apm_statistics.residual_echo_likelihood);
EXPECT_FALSE(send_stats.apm_statistics.residual_echo_likelihood_recent_max);
AudioReceiveStreamInterface::Stats recv_stats =
receive_stream()->GetStats(/*get_and_clear_legacy_stats=*/true);
EXPECT_PRED2(IsNear, kBytesSent, recv_stats.payload_bytes_rcvd);
EXPECT_PRED2(IsNear, kPacketsSent, recv_stats.packets_rcvd);
EXPECT_EQ(0, recv_stats.packets_lost);
EXPECT_EQ("opus", send_stats.codec_name);
// recv_stats.jitter_ms
// recv_stats.jitter_buffer_ms
EXPECT_EQ(20u, recv_stats.jitter_buffer_preferred_ms);
// recv_stats.delay_estimate_ms
// Receive level is 0 because it is cleared in Channel::StopPlayout().
EXPECT_EQ(0, recv_stats.audio_level);
// recv_stats.total_output_energy
// recv_stats.total_samples_received
// recv_stats.total_output_duration
// recv_stats.concealed_samples
// recv_stats.expand_rate
// recv_stats.speech_expand_rate
EXPECT_EQ(0.0, recv_stats.secondary_decoded_rate);
EXPECT_EQ(0.0, recv_stats.secondary_discarded_rate);
EXPECT_EQ(0.0, recv_stats.accelerate_rate);
EXPECT_EQ(0.0, recv_stats.preemptive_expand_rate);
EXPECT_EQ(0, recv_stats.decoding_calls_to_silence_generator);
// recv_stats.decoding_calls_to_neteq
// recv_stats.decoding_normal
// recv_stats.decoding_plc
EXPECT_EQ(0, recv_stats.decoding_cng);
// recv_stats.decoding_plc_cng
// recv_stats.decoding_muted_output
// Capture start time is -1 because we do not have an associated send stream
// on the receiver side.
EXPECT_EQ(-1, recv_stats.capture_start_ntp_time_ms);
// Match these stats between caller and receiver.
EXPECT_EQ(send_stats.local_ssrc, recv_stats.remote_ssrc);
EXPECT_EQ(*send_stats.codec_payload_type, *recv_stats.codec_payload_type);
}
};
} // namespace
using AudioStatsTest = CallTest;
TEST_F(AudioStatsTest, DISABLED_NoLoss) {
NoLossTest test;
RunBaseTest(&test);
}
} // namespace test
} // namespace webrtc