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

Side by Side Diff: webrtc/pc/peerconnection_integrationtest.cc

Issue 3008373002: Only return stats for the most recent unsignaled audio stream. (Closed)
Patch Set: Only return stats for the most recent unsignaled stream. Created 3 years, 3 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 1948 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 rtc::scoped_refptr<const webrtc::RTCStatsReport> report = 1959 rtc::scoped_refptr<const webrtc::RTCStatsReport> report =
1960 callee()->NewGetStats(); 1960 callee()->NewGetStats();
1961 ASSERT_NE(nullptr, report); 1961 ASSERT_NE(nullptr, report);
1962 1962
1963 auto media_stats = report->GetStatsOfType<webrtc::RTCMediaStreamTrackStats>(); 1963 auto media_stats = report->GetStatsOfType<webrtc::RTCMediaStreamTrackStats>();
1964 auto audio_index = FindFirstMediaStatsIndexByKind("audio", media_stats); 1964 auto audio_index = FindFirstMediaStatsIndexByKind("audio", media_stats);
1965 ASSERT_GE(audio_index, 0); 1965 ASSERT_GE(audio_index, 0);
1966 EXPECT_TRUE(media_stats[audio_index]->audio_level.is_defined()); 1966 EXPECT_TRUE(media_stats[audio_index]->audio_level.is_defined());
1967 } 1967 }
1968 1968
1969 // Helper for test below.
1970 void ModifySsrcs(cricket::SessionDescription* desc) {
1971 for (ContentInfo& content : desc->contents()) {
1972 MediaContentDescription* media_desc =
1973 static_cast<MediaContentDescription*>(content.description);
1974 for (cricket::StreamParams& stream : media_desc->mutable_streams()) {
1975 for (uint32_t& ssrc : stream.ssrcs) {
1976 ssrc = rtc::CreateRandomId();
1977 }
1978 }
1979 }
1980 }
1981
1982 // Test that the "RTCMediaSteamTrackStats" object is updated correctly when
1983 // SSRCs are unsignaled, and the SSRC of the received (audio) stream changes.
1984 // This should result in two "RTCInboundRTPStreamStats", but only one
1985 // "RTCMediaStreamTrackStats", whose counters go up continuously rather than
1986 // being reset to 0 once the SSRC change occurs.
1987 //
1988 // Regression test for this bug:
1989 // https://bugs.chromium.org/p/webrtc/issues/detail?id=8158
1990 //
1991 // The bug causes the track stats to only represent one of the two streams:
1992 // whichever one has the higher SSRC. So with this bug, there was a 50% chance
1993 // that the track stat counters would reset to 0 when the new stream is
1994 // received, and a 50% chance that they'll stop updating (while
1995 // "concealed_samples" continues increasing, due to silence being generated for
1996 // the inactive stream).
1997 TEST_F(PeerConnectionIntegrationTest,
1998 TrackStatsUpdatedCorrectlyWhenUnsignaledSsrcChanges) {
1999 ASSERT_TRUE(CreatePeerConnectionWrappers());
2000 ConnectFakeSignaling();
2001 caller()->AddAudioOnlyMediaStream();
2002 // Remove SSRCs and MSIDs from the received offer SDP, simulating an endpoint
2003 // that doesn't signal SSRCs (from the callee's perspective).
2004 callee()->SetReceivedSdpMunger(RemoveSsrcsAndMsids);
2005 caller()->CreateAndSetAndSignalOffer();
2006 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
2007 // Wait for 20 audio frames (200ms of audio) to be received by the callee.
2008 ExpectNewFramesReceivedWithWait(0, 0, 20, 0, kMaxWaitForFramesMs);
2009
2010 // Some audio frames were received, so we should have nonzero "samples
2011 // received" for the track.
2012 rtc::scoped_refptr<const webrtc::RTCStatsReport> report =
2013 callee()->NewGetStats();
2014 ASSERT_NE(nullptr, report);
2015 auto track_stats = report->GetStatsOfType<webrtc::RTCMediaStreamTrackStats>();
2016 ASSERT_EQ(1U, track_stats.size());
2017 ASSERT_TRUE(track_stats[0]->total_samples_received.is_defined());
2018 ASSERT_GT(*track_stats[0]->total_samples_received, 0U);
2019 // uint64_t prev_samples_received = *track_stats[0]->total_samples_received;
the sun 2017/09/18 18:59:35 remove commented-out line
Taylor Brandstetter 2017/09/20 00:19:46 Won't compile if I do (unused variable warning). I
2020
2021 // Create a new offer and munge it to cause the caller to use a new SSRC.
2022 caller()->SetGeneratedSdpMunger(ModifySsrcs);
2023 caller()->CreateAndSetAndSignalOffer();
2024 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
2025 // Wait for 10 more audio frames (100ms of audio) to be received, from the new
2026 // SSRC.
2027 ExpectNewFramesReceivedWithWait(0, 0, 10, 0, kMaxWaitForFramesMs);
2028
2029 report = callee()->NewGetStats();
2030 ASSERT_NE(nullptr, report);
2031 track_stats = report->GetStatsOfType<webrtc::RTCMediaStreamTrackStats>();
2032 ASSERT_EQ(1U, track_stats.size());
2033 ASSERT_TRUE(track_stats[0]->total_samples_received.is_defined());
2034 // The "total samples received" stat should only be greater than it was
2035 // before.
2036 // TODO(deadbeef): Uncomment this assertion once the bug is completely fixed.
2037 // Right now, the new SSRC will cause the counters to reset to 0.
2038 // EXPECT_GT(*track_stats[0]->total_samples_received, prev_samples_received);
2039
2040 // Additionally, the percentage of concealed samples (samples generated to
2041 // conceal packet loss) should be less than 10%. If it's greater, that's a
2042 // good sign that we're seeing stats from the old stream that's no longer
2043 // receiving packets, and is generating concealed samples of silence.
2044 constexpr double kAcceptableConcealedSamplesPercentage = 0.1;
2045 ASSERT_TRUE(track_stats[0]->concealed_samples.is_defined());
2046 EXPECT_LT(*track_stats[0]->concealed_samples,
2047 *track_stats[0]->total_samples_received *
2048 kAcceptableConcealedSamplesPercentage);
2049
2050 // Also ensure that we have two "RTCInboundRTPStreamStats" as expected, as a
2051 // sanity check that the SSRC really changed.
2052 // TODO(deadbeef): This isn't working right now, because we're not returning
2053 // *any* stats for the inactive stream. Uncomment when the bug is completely
2054 // fixed.
2055 // auto inbound_stream_stats =
2056 // report->GetStatsOfType<webrtc::RTCInboundRTPStreamStats>();
2057 // ASSERT_EQ(2U, inbound_stream_stats.size());
2058 }
2059
1969 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0. 2060 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0.
1970 TEST_F(PeerConnectionIntegrationTest, EndToEndCallWithDtls10) { 2061 TEST_F(PeerConnectionIntegrationTest, EndToEndCallWithDtls10) {
1971 PeerConnectionFactory::Options dtls_10_options; 2062 PeerConnectionFactory::Options dtls_10_options;
1972 dtls_10_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10; 2063 dtls_10_options.ssl_max_version = rtc::SSL_PROTOCOL_DTLS_10;
1973 ASSERT_TRUE(CreatePeerConnectionWrappersWithOptions(dtls_10_options, 2064 ASSERT_TRUE(CreatePeerConnectionWrappersWithOptions(dtls_10_options,
1974 dtls_10_options)); 2065 dtls_10_options));
1975 ConnectFakeSignaling(); 2066 ConnectFakeSignaling();
1976 // Do normal offer/answer and wait for some frames to be received in each 2067 // Do normal offer/answer and wait for some frames to be received in each
1977 // direction. 2068 // direction.
1978 caller()->AddAudioVideoMediaStream(); 2069 caller()->AddAudioVideoMediaStream();
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after
2971 caller()->CreateAndSetAndSignalOffer(); 3062 caller()->CreateAndSetAndSignalOffer();
2972 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); 3063 ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
2973 // Wait for additional audio frames to be received by the callee. 3064 // Wait for additional audio frames to be received by the callee.
2974 ExpectNewFramesReceivedWithWait(0, 0, kDefaultExpectedAudioFrameCount, 0, 3065 ExpectNewFramesReceivedWithWait(0, 0, kDefaultExpectedAudioFrameCount, 0,
2975 kMaxWaitForFramesMs); 3066 kMaxWaitForFramesMs);
2976 } 3067 }
2977 3068
2978 } // namespace 3069 } // namespace
2979 3070
2980 #endif // if !defined(THREAD_SANITIZER) 3071 #endif // if !defined(THREAD_SANITIZER)
OLDNEW
« webrtc/media/engine/webrtcvoiceengine.cc ('K') | « webrtc/media/engine/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698