| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2016 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 } | 114 } |
| 115 | 115 |
| 116 void MarkMemberTested( | 116 void MarkMemberTested( |
| 117 const RTCStatsMemberInterface& member, bool test_successful) { | 117 const RTCStatsMemberInterface& member, bool test_successful) { |
| 118 untested_members_.erase(&member); | 118 untested_members_.erase(&member); |
| 119 all_tests_successful_ &= test_successful; | 119 all_tests_successful_ &= test_successful; |
| 120 } | 120 } |
| 121 | 121 |
| 122 void TestMemberIsDefined(const RTCStatsMemberInterface& member) { | 122 void TestMemberIsDefined(const RTCStatsMemberInterface& member) { |
| 123 EXPECT_TRUE(member.is_defined()) << | 123 EXPECT_TRUE(member.is_defined()) << |
| 124 stats_->type() << "." << member.name() << "[" << stats_->id() << | 124 stats_->type() << "." << member.name() << "[" << stats_->id() << |
| 125 "] was undefined."; | 125 "] was undefined."; |
| 126 MarkMemberTested(member, member.is_defined()); | 126 MarkMemberTested(member, member.is_defined()); |
| 127 } | 127 } |
| 128 | 128 |
| 129 void TestMemberIsUndefined(const RTCStatsMemberInterface& member) { | 129 void TestMemberIsUndefined(const RTCStatsMemberInterface& member) { |
| 130 EXPECT_FALSE(member.is_defined()) << | 130 EXPECT_FALSE(member.is_defined()) << |
| 131 stats_->type() << "." << member.name() << "[" << stats_->id() << | 131 stats_->type() << "." << member.name() << "[" << stats_->id() << |
| 132 "] was defined (" << member.ValueToString() << ")."; | 132 "] was defined (" << member.ValueToString() << ")."; |
| 133 MarkMemberTested(member, !member.is_defined()); | 133 MarkMemberTested(member, !member.is_defined()); |
| 134 } | 134 } |
| 135 | 135 |
| 136 template<typename T> |
| 137 void TestMemberIsPositive(const RTCStatsMemberInterface& member) { |
| 138 EXPECT_TRUE(member.is_defined()) << |
| 139 stats_->type() << "." << member.name() << "[" << stats_->id() << |
| 140 "] was undefined."; |
| 141 if (!member.is_defined()) { |
| 142 MarkMemberTested(member, false); |
| 143 return; |
| 144 } |
| 145 bool is_positive = *member.cast_to<RTCStatsMember<T>>() > T(0); |
| 146 EXPECT_TRUE(is_positive) << |
| 147 stats_->type() << "." << member.name() << "[" << stats_->id() << |
| 148 "] was not positive (" << member.ValueToString() << ")."; |
| 149 MarkMemberTested(member, is_positive); |
| 150 } |
| 151 |
| 152 template<typename T> |
| 153 void TestMemberIsNonNegative(const RTCStatsMemberInterface& member) { |
| 154 EXPECT_TRUE(member.is_defined()) << |
| 155 stats_->type() << "." << member.name() << "[" << stats_->id() << |
| 156 "] was undefined."; |
| 157 if (!member.is_defined()) { |
| 158 MarkMemberTested(member, false); |
| 159 return; |
| 160 } |
| 161 bool is_non_negative = *member.cast_to<RTCStatsMember<T>>() >= T(0); |
| 162 EXPECT_TRUE(is_non_negative) << |
| 163 stats_->type() << "." << member.name() << "[" << stats_->id() << |
| 164 "] was not non-negative (" << member.ValueToString() << ")."; |
| 165 MarkMemberTested(member, is_non_negative); |
| 166 } |
| 167 |
| 136 void TestMemberIsIDReference( | 168 void TestMemberIsIDReference( |
| 137 const RTCStatsMemberInterface& member, | 169 const RTCStatsMemberInterface& member, |
| 138 const char* expected_type) { | 170 const char* expected_type) { |
| 139 TestMemberIsIDReference(member, expected_type, false); | 171 TestMemberIsIDReference(member, expected_type, false); |
| 140 } | 172 } |
| 141 | 173 |
| 142 void TestMemberIsOptionalIDReference( | 174 void TestMemberIsOptionalIDReference( |
| 143 const RTCStatsMemberInterface& member, | 175 const RTCStatsMemberInterface& member, |
| 144 const char* expected_type) { | 176 const char* expected_type) { |
| 145 TestMemberIsIDReference(member, expected_type, true); | 177 TestMemberIsIDReference(member, expected_type, true); |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 verifier.TestMemberIsOptionalIDReference( | 322 verifier.TestMemberIsOptionalIDReference( |
| 291 certificate.issuer_certificate_id, RTCCertificateStats::kType); | 323 certificate.issuer_certificate_id, RTCCertificateStats::kType); |
| 292 return verifier.ExpectAllMembersSuccessfullyTested(); | 324 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 293 } | 325 } |
| 294 | 326 |
| 295 bool VerifyRTCCodecStats( | 327 bool VerifyRTCCodecStats( |
| 296 const RTCCodecStats& codec) { | 328 const RTCCodecStats& codec) { |
| 297 RTCStatsVerifier verifier(report_, &codec); | 329 RTCStatsVerifier verifier(report_, &codec); |
| 298 verifier.TestMemberIsDefined(codec.payload_type); | 330 verifier.TestMemberIsDefined(codec.payload_type); |
| 299 verifier.TestMemberIsDefined(codec.codec); | 331 verifier.TestMemberIsDefined(codec.codec); |
| 300 verifier.TestMemberIsDefined(codec.clock_rate); | 332 verifier.TestMemberIsPositive<uint32_t>(codec.clock_rate); |
| 301 verifier.TestMemberIsUndefined(codec.channels); | 333 verifier.TestMemberIsUndefined(codec.channels); |
| 302 verifier.TestMemberIsUndefined(codec.parameters); | 334 verifier.TestMemberIsUndefined(codec.parameters); |
| 303 verifier.TestMemberIsUndefined(codec.implementation); | 335 verifier.TestMemberIsUndefined(codec.implementation); |
| 304 return verifier.ExpectAllMembersSuccessfullyTested(); | 336 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 305 } | 337 } |
| 306 | 338 |
| 307 bool VerifyRTCDataChannelStats( | 339 bool VerifyRTCDataChannelStats( |
| 308 const RTCDataChannelStats& data_channel) { | 340 const RTCDataChannelStats& data_channel) { |
| 309 RTCStatsVerifier verifier(report_, &data_channel); | 341 RTCStatsVerifier verifier(report_, &data_channel); |
| 310 verifier.TestMemberIsDefined(data_channel.label); | 342 verifier.TestMemberIsDefined(data_channel.label); |
| 311 verifier.TestMemberIsDefined(data_channel.protocol); | 343 verifier.TestMemberIsDefined(data_channel.protocol); |
| 312 verifier.TestMemberIsDefined(data_channel.datachannelid); | 344 verifier.TestMemberIsDefined(data_channel.datachannelid); |
| 313 verifier.TestMemberIsDefined(data_channel.state); | 345 verifier.TestMemberIsDefined(data_channel.state); |
| 314 verifier.TestMemberIsDefined(data_channel.messages_sent); | 346 verifier.TestMemberIsNonNegative<uint32_t>(data_channel.messages_sent); |
| 315 verifier.TestMemberIsDefined(data_channel.bytes_sent); | 347 verifier.TestMemberIsNonNegative<uint64_t>(data_channel.bytes_sent); |
| 316 verifier.TestMemberIsDefined(data_channel.messages_received); | 348 verifier.TestMemberIsNonNegative<uint32_t>(data_channel.messages_received); |
| 317 verifier.TestMemberIsDefined(data_channel.bytes_received); | 349 verifier.TestMemberIsNonNegative<uint64_t>(data_channel.bytes_received); |
| 318 return verifier.ExpectAllMembersSuccessfullyTested(); | 350 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 319 } | 351 } |
| 320 | 352 |
| 321 bool VerifyRTCIceCandidatePairStats( | 353 bool VerifyRTCIceCandidatePairStats( |
| 322 const RTCIceCandidatePairStats& candidate_pair) { | 354 const RTCIceCandidatePairStats& candidate_pair) { |
| 323 RTCStatsVerifier verifier(report_, &candidate_pair); | 355 RTCStatsVerifier verifier(report_, &candidate_pair); |
| 324 verifier.TestMemberIsIDReference( | 356 verifier.TestMemberIsIDReference( |
| 325 candidate_pair.transport_id, RTCTransportStats::kType); | 357 candidate_pair.transport_id, RTCTransportStats::kType); |
| 326 verifier.TestMemberIsIDReference( | 358 verifier.TestMemberIsIDReference( |
| 327 candidate_pair.local_candidate_id, RTCLocalIceCandidateStats::kType); | 359 candidate_pair.local_candidate_id, RTCLocalIceCandidateStats::kType); |
| 328 verifier.TestMemberIsIDReference( | 360 verifier.TestMemberIsIDReference( |
| 329 candidate_pair.remote_candidate_id, RTCRemoteIceCandidateStats::kType); | 361 candidate_pair.remote_candidate_id, RTCRemoteIceCandidateStats::kType); |
| 330 verifier.TestMemberIsUndefined(candidate_pair.state); | 362 verifier.TestMemberIsUndefined(candidate_pair.state); |
| 331 verifier.TestMemberIsUndefined(candidate_pair.priority); | 363 verifier.TestMemberIsUndefined(candidate_pair.priority); |
| 332 verifier.TestMemberIsUndefined(candidate_pair.nominated); | 364 verifier.TestMemberIsUndefined(candidate_pair.nominated); |
| 333 verifier.TestMemberIsDefined(candidate_pair.writable); | 365 verifier.TestMemberIsDefined(candidate_pair.writable); |
| 334 verifier.TestMemberIsUndefined(candidate_pair.readable); | 366 verifier.TestMemberIsUndefined(candidate_pair.readable); |
| 335 verifier.TestMemberIsDefined(candidate_pair.bytes_sent); | 367 verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.bytes_sent); |
| 336 verifier.TestMemberIsDefined(candidate_pair.bytes_received); | 368 verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.bytes_received); |
| 337 verifier.TestMemberIsUndefined(candidate_pair.total_round_trip_time); | 369 verifier.TestMemberIsUndefined(candidate_pair.total_round_trip_time); |
| 338 verifier.TestMemberIsDefined(candidate_pair.current_round_trip_time); | 370 verifier.TestMemberIsNonNegative<double>( |
| 371 candidate_pair.current_round_trip_time); |
| 339 verifier.TestMemberIsUndefined(candidate_pair.available_outgoing_bitrate); | 372 verifier.TestMemberIsUndefined(candidate_pair.available_outgoing_bitrate); |
| 340 verifier.TestMemberIsUndefined(candidate_pair.available_incoming_bitrate); | 373 verifier.TestMemberIsUndefined(candidate_pair.available_incoming_bitrate); |
| 341 verifier.TestMemberIsDefined(candidate_pair.requests_received); | 374 verifier.TestMemberIsNonNegative<uint64_t>( |
| 342 verifier.TestMemberIsDefined(candidate_pair.requests_sent); | 375 candidate_pair.requests_received); |
| 343 verifier.TestMemberIsDefined(candidate_pair.responses_received); | 376 verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.requests_sent); |
| 344 verifier.TestMemberIsDefined(candidate_pair.responses_sent); | 377 verifier.TestMemberIsNonNegative<uint64_t>( |
| 378 candidate_pair.responses_received); |
| 379 verifier.TestMemberIsNonNegative<uint64_t>(candidate_pair.responses_sent); |
| 345 verifier.TestMemberIsUndefined(candidate_pair.retransmissions_received); | 380 verifier.TestMemberIsUndefined(candidate_pair.retransmissions_received); |
| 346 verifier.TestMemberIsUndefined(candidate_pair.retransmissions_sent); | 381 verifier.TestMemberIsUndefined(candidate_pair.retransmissions_sent); |
| 347 verifier.TestMemberIsUndefined(candidate_pair.consent_requests_received); | 382 verifier.TestMemberIsUndefined(candidate_pair.consent_requests_received); |
| 348 verifier.TestMemberIsDefined(candidate_pair.consent_requests_sent); | 383 verifier.TestMemberIsNonNegative<uint64_t>( |
| 384 candidate_pair.consent_requests_sent); |
| 349 verifier.TestMemberIsUndefined(candidate_pair.consent_responses_received); | 385 verifier.TestMemberIsUndefined(candidate_pair.consent_responses_received); |
| 350 verifier.TestMemberIsUndefined(candidate_pair.consent_responses_sent); | 386 verifier.TestMemberIsUndefined(candidate_pair.consent_responses_sent); |
| 351 return verifier.ExpectAllMembersSuccessfullyTested(); | 387 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 352 } | 388 } |
| 353 | 389 |
| 354 bool VerifyRTCIceCandidateStats( | 390 bool VerifyRTCIceCandidateStats( |
| 355 const RTCIceCandidateStats& candidate) { | 391 const RTCIceCandidateStats& candidate) { |
| 356 RTCStatsVerifier verifier(report_, &candidate); | 392 RTCStatsVerifier verifier(report_, &candidate); |
| 357 verifier.TestMemberIsDefined(candidate.is_remote); | 393 verifier.TestMemberIsDefined(candidate.is_remote); |
| 358 verifier.TestMemberIsDefined(candidate.ip); | 394 verifier.TestMemberIsDefined(candidate.ip); |
| 359 verifier.TestMemberIsDefined(candidate.port); | 395 verifier.TestMemberIsNonNegative<int32_t>(candidate.port); |
| 360 verifier.TestMemberIsDefined(candidate.protocol); | 396 verifier.TestMemberIsDefined(candidate.protocol); |
| 361 verifier.TestMemberIsDefined(candidate.candidate_type); | 397 verifier.TestMemberIsDefined(candidate.candidate_type); |
| 362 verifier.TestMemberIsDefined(candidate.priority); | 398 verifier.TestMemberIsNonNegative<int32_t>(candidate.priority); |
| 363 verifier.TestMemberIsUndefined(candidate.url); | 399 verifier.TestMemberIsUndefined(candidate.url); |
| 364 return verifier.ExpectAllMembersSuccessfullyTested(); | 400 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 365 } | 401 } |
| 366 | 402 |
| 367 bool VerifyRTCLocalIceCandidateStats( | 403 bool VerifyRTCLocalIceCandidateStats( |
| 368 const RTCLocalIceCandidateStats& local_candidate) { | 404 const RTCLocalIceCandidateStats& local_candidate) { |
| 369 return VerifyRTCIceCandidateStats(local_candidate); | 405 return VerifyRTCIceCandidateStats(local_candidate); |
| 370 } | 406 } |
| 371 | 407 |
| 372 bool VerifyRTCRemoteIceCandidateStats( | 408 bool VerifyRTCRemoteIceCandidateStats( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 387 const RTCMediaStreamTrackStats& media_stream_track) { | 423 const RTCMediaStreamTrackStats& media_stream_track) { |
| 388 RTCStatsVerifier verifier(report_, &media_stream_track); | 424 RTCStatsVerifier verifier(report_, &media_stream_track); |
| 389 verifier.TestMemberIsDefined(media_stream_track.track_identifier); | 425 verifier.TestMemberIsDefined(media_stream_track.track_identifier); |
| 390 verifier.TestMemberIsDefined(media_stream_track.remote_source); | 426 verifier.TestMemberIsDefined(media_stream_track.remote_source); |
| 391 verifier.TestMemberIsDefined(media_stream_track.ended); | 427 verifier.TestMemberIsDefined(media_stream_track.ended); |
| 392 verifier.TestMemberIsDefined(media_stream_track.detached); | 428 verifier.TestMemberIsDefined(media_stream_track.detached); |
| 393 verifier.TestMemberIsUndefined(media_stream_track.ssrc_ids); | 429 verifier.TestMemberIsUndefined(media_stream_track.ssrc_ids); |
| 394 // Video or audio media stream track? | 430 // Video or audio media stream track? |
| 395 if (media_stream_track.frame_width.is_defined()) { | 431 if (media_stream_track.frame_width.is_defined()) { |
| 396 // Video-only members | 432 // Video-only members |
| 397 verifier.TestMemberIsDefined(media_stream_track.frame_width); | 433 verifier.TestMemberIsNonNegative<uint32_t>( |
| 398 verifier.TestMemberIsDefined(media_stream_track.frame_height); | 434 media_stream_track.frame_width); |
| 435 verifier.TestMemberIsNonNegative<uint32_t>( |
| 436 media_stream_track.frame_height); |
| 399 verifier.TestMemberIsUndefined(media_stream_track.frames_per_second); | 437 verifier.TestMemberIsUndefined(media_stream_track.frames_per_second); |
| 400 verifier.TestMemberIsUndefined(media_stream_track.frames_sent); | 438 verifier.TestMemberIsUndefined(media_stream_track.frames_sent); |
| 401 verifier.TestMemberIsUndefined(media_stream_track.frames_received); | 439 verifier.TestMemberIsUndefined(media_stream_track.frames_received); |
| 402 verifier.TestMemberIsUndefined(media_stream_track.frames_decoded); | 440 verifier.TestMemberIsUndefined(media_stream_track.frames_decoded); |
| 403 verifier.TestMemberIsUndefined(media_stream_track.frames_dropped); | 441 verifier.TestMemberIsUndefined(media_stream_track.frames_dropped); |
| 404 verifier.TestMemberIsUndefined(media_stream_track.frames_corrupted); | 442 verifier.TestMemberIsUndefined(media_stream_track.frames_corrupted); |
| 405 verifier.TestMemberIsUndefined(media_stream_track.partial_frames_lost); | 443 verifier.TestMemberIsUndefined(media_stream_track.partial_frames_lost); |
| 406 verifier.TestMemberIsUndefined(media_stream_track.full_frames_lost); | 444 verifier.TestMemberIsUndefined(media_stream_track.full_frames_lost); |
| 407 // Audio-only members should be undefined | 445 // Audio-only members should be undefined |
| 408 verifier.TestMemberIsUndefined(media_stream_track.audio_level); | 446 verifier.TestMemberIsUndefined(media_stream_track.audio_level); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 430 verifier.MarkMemberTested(media_stream_track.echo_return_loss, true); | 468 verifier.MarkMemberTested(media_stream_track.echo_return_loss, true); |
| 431 verifier.MarkMemberTested( | 469 verifier.MarkMemberTested( |
| 432 media_stream_track.echo_return_loss_enhancement, true); | 470 media_stream_track.echo_return_loss_enhancement, true); |
| 433 } | 471 } |
| 434 return verifier.ExpectAllMembersSuccessfullyTested(); | 472 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 435 } | 473 } |
| 436 | 474 |
| 437 bool VerifyRTCPeerConnectionStats( | 475 bool VerifyRTCPeerConnectionStats( |
| 438 const RTCPeerConnectionStats& peer_connection) { | 476 const RTCPeerConnectionStats& peer_connection) { |
| 439 RTCStatsVerifier verifier(report_, &peer_connection); | 477 RTCStatsVerifier verifier(report_, &peer_connection); |
| 440 verifier.TestMemberIsDefined(peer_connection.data_channels_opened); | 478 verifier.TestMemberIsNonNegative<uint32_t>( |
| 441 verifier.TestMemberIsDefined(peer_connection.data_channels_closed); | 479 peer_connection.data_channels_opened); |
| 480 verifier.TestMemberIsNonNegative<uint32_t>( |
| 481 peer_connection.data_channels_closed); |
| 442 return verifier.ExpectAllMembersSuccessfullyTested(); | 482 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 443 } | 483 } |
| 444 | 484 |
| 445 void VerifyRTCRTPStreamStats( | 485 void VerifyRTCRTPStreamStats( |
| 446 const RTCRTPStreamStats& stream, RTCStatsVerifier* verifier) { | 486 const RTCRTPStreamStats& stream, RTCStatsVerifier* verifier) { |
| 447 verifier->TestMemberIsDefined(stream.ssrc); | 487 verifier->TestMemberIsDefined(stream.ssrc); |
| 448 verifier->TestMemberIsUndefined(stream.associate_stats_id); | 488 verifier->TestMemberIsUndefined(stream.associate_stats_id); |
| 449 verifier->TestMemberIsDefined(stream.is_remote); | 489 verifier->TestMemberIsDefined(stream.is_remote); |
| 450 verifier->TestMemberIsDefined(stream.media_type); | 490 verifier->TestMemberIsDefined(stream.media_type); |
| 451 verifier->TestMemberIsUndefined(stream.media_track_id); | 491 verifier->TestMemberIsUndefined(stream.media_track_id); |
| 452 verifier->TestMemberIsIDReference( | 492 verifier->TestMemberIsIDReference( |
| 453 stream.transport_id, RTCTransportStats::kType); | 493 stream.transport_id, RTCTransportStats::kType); |
| 454 verifier->TestMemberIsIDReference(stream.codec_id, RTCCodecStats::kType); | 494 verifier->TestMemberIsIDReference(stream.codec_id, RTCCodecStats::kType); |
| 455 if (stream.media_type.is_defined() && *stream.media_type == "video") { | 495 if (stream.media_type.is_defined() && *stream.media_type == "video") { |
| 456 verifier->TestMemberIsDefined(stream.fir_count); | 496 verifier->TestMemberIsNonNegative<uint32_t>(stream.fir_count); |
| 457 verifier->TestMemberIsDefined(stream.pli_count); | 497 verifier->TestMemberIsNonNegative<uint32_t>(stream.pli_count); |
| 458 verifier->TestMemberIsDefined(stream.nack_count); | 498 verifier->TestMemberIsNonNegative<uint32_t>(stream.nack_count); |
| 459 } else { | 499 } else { |
| 460 verifier->TestMemberIsUndefined(stream.fir_count); | 500 verifier->TestMemberIsUndefined(stream.fir_count); |
| 461 verifier->TestMemberIsUndefined(stream.pli_count); | 501 verifier->TestMemberIsUndefined(stream.pli_count); |
| 462 verifier->TestMemberIsUndefined(stream.nack_count); | 502 verifier->TestMemberIsUndefined(stream.nack_count); |
| 463 } | 503 } |
| 464 verifier->TestMemberIsUndefined(stream.sli_count); | 504 verifier->TestMemberIsUndefined(stream.sli_count); |
| 465 } | 505 } |
| 466 | 506 |
| 467 bool VerifyRTCInboundRTPStreamStats( | 507 bool VerifyRTCInboundRTPStreamStats( |
| 468 const RTCInboundRTPStreamStats& inbound_stream) { | 508 const RTCInboundRTPStreamStats& inbound_stream) { |
| 469 RTCStatsVerifier verifier(report_, &inbound_stream); | 509 RTCStatsVerifier verifier(report_, &inbound_stream); |
| 470 VerifyRTCRTPStreamStats(inbound_stream, &verifier); | 510 VerifyRTCRTPStreamStats(inbound_stream, &verifier); |
| 471 verifier.TestMemberIsDefined(inbound_stream.packets_received); | 511 verifier.TestMemberIsNonNegative<uint32_t>(inbound_stream.packets_received); |
| 472 verifier.TestMemberIsDefined(inbound_stream.bytes_received); | 512 verifier.TestMemberIsNonNegative<uint64_t>(inbound_stream.bytes_received); |
| 473 verifier.TestMemberIsDefined(inbound_stream.packets_lost); | 513 verifier.TestMemberIsNonNegative<uint32_t>(inbound_stream.packets_lost); |
| 474 if (inbound_stream.media_type.is_defined() && | 514 if (inbound_stream.media_type.is_defined() && |
| 475 *inbound_stream.media_type == "video") { | 515 *inbound_stream.media_type == "video") { |
| 476 verifier.TestMemberIsUndefined(inbound_stream.jitter); | 516 verifier.TestMemberIsUndefined(inbound_stream.jitter); |
| 477 } else { | 517 } else { |
| 478 verifier.TestMemberIsDefined(inbound_stream.jitter); | 518 verifier.TestMemberIsNonNegative<double>(inbound_stream.jitter); |
| 479 } | 519 } |
| 480 verifier.TestMemberIsDefined(inbound_stream.fraction_lost); | 520 verifier.TestMemberIsNonNegative<double>(inbound_stream.fraction_lost); |
| 481 verifier.TestMemberIsUndefined(inbound_stream.packets_discarded); | 521 verifier.TestMemberIsUndefined(inbound_stream.packets_discarded); |
| 482 verifier.TestMemberIsUndefined(inbound_stream.packets_repaired); | 522 verifier.TestMemberIsUndefined(inbound_stream.packets_repaired); |
| 483 verifier.TestMemberIsUndefined(inbound_stream.burst_packets_lost); | 523 verifier.TestMemberIsUndefined(inbound_stream.burst_packets_lost); |
| 484 verifier.TestMemberIsUndefined(inbound_stream.burst_packets_discarded); | 524 verifier.TestMemberIsUndefined(inbound_stream.burst_packets_discarded); |
| 485 verifier.TestMemberIsUndefined(inbound_stream.burst_loss_count); | 525 verifier.TestMemberIsUndefined(inbound_stream.burst_loss_count); |
| 486 verifier.TestMemberIsUndefined(inbound_stream.burst_discard_count); | 526 verifier.TestMemberIsUndefined(inbound_stream.burst_discard_count); |
| 487 verifier.TestMemberIsUndefined(inbound_stream.burst_loss_rate); | 527 verifier.TestMemberIsUndefined(inbound_stream.burst_loss_rate); |
| 488 verifier.TestMemberIsUndefined(inbound_stream.burst_discard_rate); | 528 verifier.TestMemberIsUndefined(inbound_stream.burst_discard_rate); |
| 489 verifier.TestMemberIsUndefined(inbound_stream.gap_loss_rate); | 529 verifier.TestMemberIsUndefined(inbound_stream.gap_loss_rate); |
| 490 verifier.TestMemberIsUndefined(inbound_stream.gap_discard_rate); | 530 verifier.TestMemberIsUndefined(inbound_stream.gap_discard_rate); |
| 491 return verifier.ExpectAllMembersSuccessfullyTested(); | 531 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 492 } | 532 } |
| 493 | 533 |
| 494 bool VerifyRTCOutboundRTPStreamStats( | 534 bool VerifyRTCOutboundRTPStreamStats( |
| 495 const RTCOutboundRTPStreamStats& outbound_stream) { | 535 const RTCOutboundRTPStreamStats& outbound_stream) { |
| 496 RTCStatsVerifier verifier(report_, &outbound_stream); | 536 RTCStatsVerifier verifier(report_, &outbound_stream); |
| 497 VerifyRTCRTPStreamStats(outbound_stream, &verifier); | 537 VerifyRTCRTPStreamStats(outbound_stream, &verifier); |
| 498 verifier.TestMemberIsDefined(outbound_stream.packets_sent); | 538 verifier.TestMemberIsNonNegative<uint32_t>(outbound_stream.packets_sent); |
| 499 verifier.TestMemberIsDefined(outbound_stream.bytes_sent); | 539 verifier.TestMemberIsNonNegative<uint64_t>(outbound_stream.bytes_sent); |
| 500 verifier.TestMemberIsUndefined(outbound_stream.target_bitrate); | 540 verifier.TestMemberIsUndefined(outbound_stream.target_bitrate); |
| 501 // TODO(hbos): Defined in video but not audio case. Why? crbug.com/669877 | 541 // TODO(hbos): Defined in video but not audio case. Why? crbug.com/669877 |
| 502 verifier.MarkMemberTested(outbound_stream.round_trip_time, true); | 542 verifier.MarkMemberTested(outbound_stream.round_trip_time, true); |
| 503 return verifier.ExpectAllMembersSuccessfullyTested(); | 543 return verifier.ExpectAllMembersSuccessfullyTested(); |
| 504 } | 544 } |
| 505 | 545 |
| 506 bool VerifyRTCTransportStats( | 546 bool VerifyRTCTransportStats( |
| 507 const RTCTransportStats& transport) { | 547 const RTCTransportStats& transport) { |
| 508 RTCStatsVerifier verifier(report_, &transport); | 548 RTCStatsVerifier verifier(report_, &transport); |
| 509 verifier.TestMemberIsDefined(transport.bytes_sent); | 549 verifier.TestMemberIsNonNegative<uint64_t>(transport.bytes_sent); |
| 510 verifier.TestMemberIsDefined(transport.bytes_received); | 550 verifier.TestMemberIsNonNegative<uint64_t>(transport.bytes_received); |
| 511 verifier.TestMemberIsOptionalIDReference( | 551 verifier.TestMemberIsOptionalIDReference( |
| 512 transport.rtcp_transport_stats_id, RTCTransportStats::kType); | 552 transport.rtcp_transport_stats_id, RTCTransportStats::kType); |
| 513 verifier.TestMemberIsDefined(transport.active_connection); | 553 verifier.TestMemberIsDefined(transport.active_connection); |
| 514 verifier.TestMemberIsIDReference( | 554 verifier.TestMemberIsIDReference( |
| 515 transport.selected_candidate_pair_id, RTCIceCandidatePairStats::kType); | 555 transport.selected_candidate_pair_id, RTCIceCandidatePairStats::kType); |
| 516 verifier.TestMemberIsIDReference( | 556 verifier.TestMemberIsIDReference( |
| 517 transport.local_certificate_id, RTCCertificateStats::kType); | 557 transport.local_certificate_id, RTCCertificateStats::kType); |
| 518 verifier.TestMemberIsIDReference( | 558 verifier.TestMemberIsIDReference( |
| 519 transport.remote_certificate_id, RTCCertificateStats::kType); | 559 transport.remote_certificate_id, RTCCertificateStats::kType); |
| 520 return verifier.ExpectAllMembersSuccessfullyTested(); | 560 return verifier.ExpectAllMembersSuccessfullyTested(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 549 caller_ = nullptr; | 589 caller_ = nullptr; |
| 550 // Any pending stats requests should have completed in the act of destroying | 590 // Any pending stats requests should have completed in the act of destroying |
| 551 // the peer connection. | 591 // the peer connection. |
| 552 EXPECT_TRUE(stats_obtainer->report()); | 592 EXPECT_TRUE(stats_obtainer->report()); |
| 553 } | 593 } |
| 554 #endif // HAVE_SCTP | 594 #endif // HAVE_SCTP |
| 555 | 595 |
| 556 } // namespace | 596 } // namespace |
| 557 | 597 |
| 558 } // namespace webrtc | 598 } // namespace webrtc |
| OLD | NEW |