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 |