Changeset 217583 in webkit
- Timestamp:
- May 30, 2017 4:32:00 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r217576 r217583 1 2017-05-30 Youenn Fablet <youenn@apple.com> 2 3 Add support for Certificate and IceCandidatePair stats 4 https://bugs.webkit.org/show_bug.cgi?id=172734 5 6 Reviewed by Geoff Garen. 7 8 * webrtc/video-stats.html: 9 1 10 2017-05-30 Chris Dumez <cdumez@apple.com> 2 11 -
trunk/LayoutTests/webrtc/video-stats.html
r217519 r217583 10 10 <script src ="routines.js"></script> 11 11 <script> 12 function getStatsType(connection) 13 { 14 return connection.getStats().then((report) => { 15 var reportTypes = []; 16 report.forEach((statItem) => { 17 if (reportTypes.indexOf(statItem.type) === -1) 18 reportTypes.push(statItem.type); 19 }); 20 return reportTypes.sort(); 21 }); 22 } 12 23 13 24 function checkStatsReportIterator(report) … … 115 126 }).then(() => { 116 127 return checkOutboundFramesNumberIncreased(firstConnection, statsFirstConnection, 0); 128 }).then(() => { 129 return getStatsType(firstConnection); 130 }).then((types) => { 131 assert_array_equals(types, ["candidate-pair", "certificate", "outbound-rtp"]); 132 }).then(() => { 133 return getStatsType(secondConnection); 134 }).then((types) => { 135 assert_array_equals(types, ["candidate-pair", "certificate", "inbound-rtp", "track"]); 117 136 }); 118 137 }, "Basic video stats"); -
trunk/Source/WebCore/ChangeLog
r217582 r217583 1 2017-05-30 Youenn Fablet <youenn@apple.com> 2 3 Add support for Certificate and IceCandidatePair stats 4 https://bugs.webkit.org/show_bug.cgi?id=172734 5 6 Reviewed by Geoff Garen. 7 8 Covered by updated test. 9 10 Adding support for these two stats in the IDL and in the libwebrtc binding code. 11 12 * Modules/mediastream/RTCStatsReport.h: 13 (WebCore::RTCStatsReport::IceCandidatePairStats::IceCandidatePairStats): 14 (WebCore::RTCStatsReport::CertificateStats::CertificateStats): 15 * Modules/mediastream/RTCStatsReport.idl: 16 * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: 17 (WebCore::iceCandidatePairState): 18 (WebCore::fillRTCIceCandidatePairStats): 19 (WebCore::fillRTCCertificateStats): 20 (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered): 21 1 22 2017-05-30 Jiewen Tan <jiewen_tan@apple.com> 2 23 -
trunk/Source/WebCore/Modules/mediastream/RTCStatsReport.h
r217519 r217583 152 152 }; 153 153 154 enum class IceCandidatePairState { 155 Frozen, 156 Waiting, 157 Inprogress, 158 Failed, 159 Succeeded, 160 Cancelled 161 }; 162 163 struct IceCandidatePairStats : Stats { 164 IceCandidatePairStats() { type = RTCStatsReport::Type::CandidatePair; } 165 166 String transportId; 167 String localCandidateId; 168 String remoteCandidateId; 169 IceCandidatePairState state; 170 unsigned long long priority { 0 }; 171 bool nominated { false }; 172 bool writable { false }; 173 bool readable { false }; 174 unsigned long long bytesSent { 0 }; 175 unsigned long long bytesReceived { 0 }; 176 double totalRoundTripTime { 0 }; 177 double currentRoundTripTime { 0 }; 178 double availableOutgoingBitrate { 0 }; 179 double availableIncomingBitrate { 0 }; 180 unsigned long long requestsReceived { 0 }; 181 unsigned long long requestsSent { 0 }; 182 unsigned long long responsesReceived { 0 }; 183 unsigned long long responsesSent { 0 }; 184 unsigned long long retransmissionsReceived { 0 }; 185 unsigned long long retransmissionsSent { 0 }; 186 unsigned long long consentRequestsReceived { 0 }; 187 unsigned long long consentRequestsSent { 0 }; 188 unsigned long long consentResponsesReceived { 0 }; 189 unsigned long long consentResponsesSent { 0 }; 190 }; 191 192 struct CertificateStats : Stats { 193 CertificateStats() { type = RTCStatsReport::Type::Certificate; } 194 195 String fingerprint; 196 String fingerprintAlgorithm; 197 String base64Certificate; 198 String issuerCertificateId; 199 }; 200 154 201 private: 155 202 RTCStatsReport() = default; -
trunk/Source/WebCore/Modules/mediastream/RTCStatsReport.idl
r217519 r217583 134 134 }; 135 135 136 enum RTCStatsIceCandidatePairState { 137 "frozen", 138 "waiting", 139 "inprogress", 140 "failed", 141 "succeeded", 142 "cancelled" 143 }; 144 145 [ JSGenerateToJSObject ] 146 dictionary RTCIceCandidatePairStats : RTCStats { 147 DOMString transportId; 148 DOMString localCandidateId; 149 DOMString remoteCandidateId; 150 RTCStatsIceCandidatePairState state; 151 unsigned long long priority; 152 boolean nominated; 153 boolean writable; 154 boolean readable; 155 unsigned long long bytesSent; 156 unsigned long long bytesReceived; 157 double totalRoundTripTime; 158 double currentRoundTripTime; 159 double availableOutgoingBitrate; 160 double availableIncomingBitrate; 161 unsigned long long requestsReceived; 162 unsigned long long requestsSent; 163 unsigned long long responsesReceived; 164 unsigned long long responsesSent; 165 // FIXME: Expose other fields once libwebrtc support them. 166 }; 167 168 [ JSGenerateToJSObject ] 169 dictionary RTCCertificateStats : RTCStats { 170 DOMString fingerprint; 171 DOMString fingerprintAlgorithm; 172 DOMString base64Certificate; 173 DOMString issuerCertificateId; 174 }; 175 136 176 // FIXME 169662: missing RTCCodecStats 137 177 // FIXME 169662: missing RTCPeerConnectionStats … … 139 179 // FIXME 169662: missing RTCTransportStats 140 180 // FIXME 169662: missing RTCIceCandidateStats 141 // FIXME 169662: missing RTCIceCandidatePairStats142 181 // FIXME 169662: missing RTCStatsIceCandidatePairState 143 // FIXME 169662: missing RTCCertificateStats -
trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp
r217519 r217583 387 387 } 388 388 389 static inline RTCStatsReport::IceCandidatePairState iceCandidatePairState(const std::string& state) 390 { 391 if (state == "frozen") 392 return RTCStatsReport::IceCandidatePairState::Frozen; 393 if (state == "waiting") 394 return RTCStatsReport::IceCandidatePairState::Waiting; 395 if (state == "in-progress") 396 return RTCStatsReport::IceCandidatePairState::Inprogress; 397 if (state == "failed") 398 return RTCStatsReport::IceCandidatePairState::Failed; 399 if (state == "succeeded") 400 return RTCStatsReport::IceCandidatePairState::Succeeded; 401 if (state == "cancelled") 402 return RTCStatsReport::IceCandidatePairState::Cancelled; 403 ASSERT_NOT_REACHED(); 404 return RTCStatsReport::IceCandidatePairState::Frozen; 405 } 406 407 static inline void fillRTCIceCandidatePairStats(RTCStatsReport::IceCandidatePairStats& stats, const webrtc::RTCIceCandidatePairStats& rtcStats) 408 { 409 fillRTCStats(stats, rtcStats); 410 411 if (rtcStats.transport_id.is_defined()) 412 stats.transportId = fromStdString(*rtcStats.transport_id); 413 if (rtcStats.local_candidate_id.is_defined()) 414 stats.localCandidateId = fromStdString(*rtcStats.local_candidate_id); 415 if (rtcStats.remote_candidate_id.is_defined()) 416 stats.remoteCandidateId = fromStdString(*rtcStats.remote_candidate_id); 417 if (rtcStats.state.is_defined()) 418 stats.state = iceCandidatePairState(*rtcStats.state); 419 420 if (rtcStats.priority.is_defined()) 421 stats.priority = *rtcStats.priority; 422 if (rtcStats.nominated.is_defined()) 423 stats.nominated = *rtcStats.nominated; 424 if (rtcStats.writable.is_defined()) 425 stats.writable = *rtcStats.writable; 426 if (rtcStats.readable.is_defined()) 427 stats.readable = *rtcStats.readable; 428 429 if (rtcStats.bytes_sent.is_defined()) 430 stats.bytesSent = *rtcStats.bytes_sent; 431 if (rtcStats.bytes_received.is_defined()) 432 stats.bytesReceived = *rtcStats.bytes_received; 433 if (rtcStats.total_round_trip_time.is_defined()) 434 stats.totalRoundTripTime = *rtcStats.total_round_trip_time; 435 if (rtcStats.current_round_trip_time.is_defined()) 436 stats.currentRoundTripTime = *rtcStats.current_round_trip_time; 437 if (rtcStats.available_outgoing_bitrate.is_defined()) 438 stats.availableOutgoingBitrate = *rtcStats.available_outgoing_bitrate; 439 if (rtcStats.available_incoming_bitrate.is_defined()) 440 stats.availableIncomingBitrate = *rtcStats.available_incoming_bitrate; 441 442 if (rtcStats.requests_received.is_defined()) 443 stats.requestsReceived = *rtcStats.requests_received; 444 if (rtcStats.requests_sent.is_defined()) 445 stats.requestsSent = *rtcStats.requests_sent; 446 if (rtcStats.responses_received.is_defined()) 447 stats.responsesReceived = *rtcStats.responses_received; 448 if (rtcStats.responses_sent.is_defined()) 449 stats.responsesSent = *rtcStats.responses_sent; 450 451 if (rtcStats.requests_received.is_defined()) 452 stats.retransmissionsReceived = *rtcStats.requests_received; 453 if (rtcStats.requests_sent.is_defined()) 454 stats.retransmissionsSent = *rtcStats.requests_sent; 455 if (rtcStats.responses_received.is_defined()) 456 stats.consentRequestsReceived = *rtcStats.responses_received; 457 if (rtcStats.responses_sent.is_defined()) 458 stats.consentRequestsSent = *rtcStats.responses_sent; 459 if (rtcStats.responses_received.is_defined()) 460 stats.consentResponsesReceived = *rtcStats.responses_received; 461 if (rtcStats.responses_sent.is_defined()) 462 stats.consentResponsesSent = *rtcStats.responses_sent; 463 } 464 465 static inline void fillRTCCertificateStats(RTCStatsReport::CertificateStats& stats, const webrtc::RTCCertificateStats& rtcStats) 466 { 467 fillRTCStats(stats, rtcStats); 468 469 if (rtcStats.fingerprint.is_defined()) 470 stats.fingerprint = fromStdString(*rtcStats.fingerprint); 471 if (rtcStats.fingerprint_algorithm.is_defined()) 472 stats.fingerprintAlgorithm = fromStdString(*rtcStats.fingerprint_algorithm); 473 if (rtcStats.base64_certificate.is_defined()) 474 stats.base64Certificate = fromStdString(*rtcStats.base64_certificate); 475 if (rtcStats.issuer_certificate_id.is_defined()) 476 stats.issuerCertificateId = fromStdString(*rtcStats.issuer_certificate_id); 477 } 478 389 479 void LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered(const rtc::scoped_refptr<const webrtc::RTCStatsReport>& rtcReport) 390 480 { … … 414 504 fillRTCDataChannelStats(stats, static_cast<const webrtc::RTCDataChannelStats&>(rtcStats)); 415 505 report->addStats<IDLDictionary<RTCStatsReport::DataChannelStats>>(WTFMove(stats)); 506 } else if (rtcStats.type() == webrtc::RTCIceCandidatePairStats::kType) { 507 RTCStatsReport::IceCandidatePairStats stats; 508 fillRTCIceCandidatePairStats(stats, static_cast<const webrtc::RTCIceCandidatePairStats&>(rtcStats)); 509 report->addStats<IDLDictionary<RTCStatsReport::IceCandidatePairStats>>(WTFMove(stats)); 510 } else if (rtcStats.type() == webrtc::RTCCertificateStats::kType) { 511 RTCStatsReport::CertificateStats stats; 512 fillRTCCertificateStats(stats, static_cast<const webrtc::RTCCertificateStats&>(rtcStats)); 513 report->addStats<IDLDictionary<RTCStatsReport::CertificateStats>>(WTFMove(stats)); 416 514 } 417 515 }
Note: See TracChangeset
for help on using the changeset viewer.