Add collection of usage signatures on PeerConnections

This generates a number that represent a set of bits that
indicates how a PeerConnection has been used over time.

Bug: chromium:718508
Change-Id: I6df177684c50bc825bc41ea97996574292084d41
Reviewed-on: https://webrtc-review.googlesource.com/79823
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23471}
This commit is contained in:
Harald Alvestrand
2018-05-31 14:00:34 +02:00
committed by Commit Bot
parent 879f5a34a5
commit 8ebba7420c
4 changed files with 96 additions and 2 deletions

View File

@ -173,6 +173,14 @@ int FindFirstMediaStatsIndexByKind(
return -1;
}
int MakeUsageFingerprint(std::set<PeerConnection::UsageEvent> events) {
int signature = 0;
for (const auto it : events) {
signature |= static_cast<int>(it);
}
return signature;
}
class SignalingMessageReceiver {
public:
virtual void ReceiveSdpMessage(SdpType type, const std::string& msg) = 0;
@ -4467,6 +4475,38 @@ TEST_P(PeerConnectionIntegrationInteropTest,
ASSERT_TRUE(ExpectNewFrames(media_expectations));
}
// Test getting the usage fingerprint for a simple test case.
TEST_P(PeerConnectionIntegrationTest, UsageFingerprintHistogram) {
ASSERT_TRUE(CreatePeerConnectionWrappers());
ConnectFakeSignaling();
// Register UMA observer before signaling begins.
rtc::scoped_refptr<webrtc::FakeMetricsObserver> caller_observer =
new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
caller()->pc()->RegisterUMAObserver(caller_observer);
rtc::scoped_refptr<webrtc::FakeMetricsObserver> callee_observer =
new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
callee()->pc()->RegisterUMAObserver(callee_observer);
caller()->AddAudioTrack();
caller()->AddVideoTrack();
caller()->CreateAndSetAndSignalOffer();
ASSERT_TRUE_WAIT(DtlsConnected(), kDefaultTimeout);
caller()->pc()->Close();
callee()->pc()->Close();
int expected_fingerprint = MakeUsageFingerprint(
{PeerConnection::UsageEvent::AUDIO_ADDED,
PeerConnection::UsageEvent::VIDEO_ADDED,
PeerConnection::UsageEvent::SET_LOCAL_DESCRIPTION_CALLED,
PeerConnection::UsageEvent::SET_REMOTE_DESCRIPTION_CALLED,
PeerConnection::UsageEvent::CANDIDATE_COLLECTED,
PeerConnection::UsageEvent::REMOTE_CANDIDATE_ADDED,
PeerConnection::UsageEvent::ICE_STATE_CONNECTED,
PeerConnection::UsageEvent::CLOSE_CALLED});
EXPECT_TRUE(caller_observer->ExpectOnlySingleEnumCount(
webrtc::kEnumCounterUsagePattern, expected_fingerprint));
EXPECT_TRUE(callee_observer->ExpectOnlySingleEnumCount(
webrtc::kEnumCounterUsagePattern, expected_fingerprint));
}
INSTANTIATE_TEST_CASE_P(
PeerConnectionIntegrationTest,
PeerConnectionIntegrationInteropTest,