RTCIceCandidatePairStats.[state/priority] added, ConnectionInfo updated.
State and priority added to ConnectionInfo. The Connection::State enum is replaced by IceCandidatePairState enum class. At P2PTransportChannel::GetStats, Connection::stats is called, producing ConnectionInfo for the connection that is then filled in with additional values from the Connection. This is refactored so that all values are set by Connection::stats. RTCStatsCollector is updated to surface the ConnectionInfo stats. BUG=webrtc:6755, chromium:633550, chromium:627816 Review-Url: https://codereview.webrtc.org/2597423003 Cr-Commit-Position: refs/heads/master@{#15870}
This commit is contained in:
@ -359,8 +359,8 @@ class RTCStatsReportVerifier {
|
||||
candidate_pair.local_candidate_id, RTCLocalIceCandidateStats::kType);
|
||||
verifier.TestMemberIsIDReference(
|
||||
candidate_pair.remote_candidate_id, RTCRemoteIceCandidateStats::kType);
|
||||
verifier.TestMemberIsUndefined(candidate_pair.state);
|
||||
verifier.TestMemberIsUndefined(candidate_pair.priority);
|
||||
verifier.TestMemberIsDefined(candidate_pair.state);
|
||||
verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.priority);
|
||||
verifier.TestMemberIsUndefined(candidate_pair.nominated);
|
||||
verifier.TestMemberIsDefined(candidate_pair.writable);
|
||||
verifier.TestMemberIsUndefined(candidate_pair.readable);
|
||||
|
||||
@ -114,6 +114,23 @@ const char* DataStateToRTCDataChannelState(
|
||||
}
|
||||
}
|
||||
|
||||
const char* IceCandidatePairStateToRTCStatsIceCandidatePairState(
|
||||
cricket::IceCandidatePairState state) {
|
||||
switch (state) {
|
||||
case cricket::IceCandidatePairState::WAITING:
|
||||
return RTCStatsIceCandidatePairState::kWaiting;
|
||||
case cricket::IceCandidatePairState::IN_PROGRESS:
|
||||
return RTCStatsIceCandidatePairState::kInProgress;
|
||||
case cricket::IceCandidatePairState::SUCCEEDED:
|
||||
return RTCStatsIceCandidatePairState::kSucceeded;
|
||||
case cricket::IceCandidatePairState::FAILED:
|
||||
return RTCStatsIceCandidatePairState::kFailed;
|
||||
default:
|
||||
RTC_NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
|
||||
uint64_t timestamp_us, bool inbound, bool audio,
|
||||
const RtpCodecParameters& codec_params) {
|
||||
@ -646,6 +663,9 @@ void RTCStatsCollector::ProduceIceCandidateAndPairStats_n(
|
||||
timestamp_us, info.local_candidate, true, report);
|
||||
candidate_pair_stats->remote_candidate_id = ProduceIceCandidateStats(
|
||||
timestamp_us, info.remote_candidate, false, report);
|
||||
candidate_pair_stats->state =
|
||||
IceCandidatePairStateToRTCStatsIceCandidatePairState(info.state);
|
||||
candidate_pair_stats->priority = info.priority;
|
||||
// TODO(hbos): This writable is different than the spec. It goes to
|
||||
// false after a certain amount of time without a response passes.
|
||||
// crbug.com/633550
|
||||
|
||||
@ -1066,6 +1066,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidatePairStats) {
|
||||
connection_info.sent_ping_requests_before_first_response = 2000;
|
||||
connection_info.recv_ping_responses = 4321;
|
||||
connection_info.sent_ping_responses = 1000;
|
||||
connection_info.state = cricket::IceCandidatePairState::IN_PROGRESS;
|
||||
connection_info.priority = 5555;
|
||||
|
||||
cricket::TransportChannelStats transport_channel_stats;
|
||||
transport_channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
|
||||
@ -1092,6 +1094,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidatePairStats) {
|
||||
expected_pair.local_candidate_id = "RTCIceCandidate_" + local_candidate->id();
|
||||
expected_pair.remote_candidate_id =
|
||||
"RTCIceCandidate_" + remote_candidate->id();
|
||||
expected_pair.state = RTCStatsIceCandidatePairState::kInProgress;
|
||||
expected_pair.priority = 5555;
|
||||
expected_pair.writable = true;
|
||||
expected_pair.bytes_sent = 42;
|
||||
expected_pair.bytes_received = 1234;
|
||||
|
||||
@ -32,7 +32,6 @@ struct RTCStatsIceCandidatePairState {
|
||||
static const char* kInProgress;
|
||||
static const char* kFailed;
|
||||
static const char* kSucceeded;
|
||||
static const char* kCancelled;
|
||||
};
|
||||
|
||||
// https://w3c.github.io/webrtc-pc/#rtcicecandidatetype-enum
|
||||
@ -120,9 +119,7 @@ class RTCIceCandidatePairStats final : public RTCStats {
|
||||
RTCStatsMember<std::string> remote_candidate_id;
|
||||
// TODO(hbos): Support enum types?
|
||||
// "RTCStatsMember<RTCStatsIceCandidatePairState>"?
|
||||
// TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550
|
||||
RTCStatsMember<std::string> state;
|
||||
// TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550
|
||||
RTCStatsMember<uint64_t> priority;
|
||||
// TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/633550
|
||||
RTCStatsMember<bool> nominated;
|
||||
|
||||
Reference in New Issue
Block a user