Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Side by Side Diff: webrtc/call/rtc_event_log_unittest.cc

Issue 1457023002: Rewrote the PRNG using an xorshift* algorithm and moved the files from test/ to base/. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 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
11 #ifdef ENABLE_RTC_EVENT_LOG 11 #ifdef ENABLE_RTC_EVENT_LOG
12 12
13 #include <string> 13 #include <string>
14 #include <utility> 14 #include <utility>
15 #include <vector> 15 #include <vector>
16 16
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "webrtc/base/buffer.h" 18 #include "webrtc/base/buffer.h"
19 #include "webrtc/base/checks.h" 19 #include "webrtc/base/checks.h"
20 #include "webrtc/base/random.h"
20 #include "webrtc/base/scoped_ptr.h" 21 #include "webrtc/base/scoped_ptr.h"
21 #include "webrtc/base/thread.h" 22 #include "webrtc/base/thread.h"
22 #include "webrtc/call.h" 23 #include "webrtc/call.h"
23 #include "webrtc/call/rtc_event_log.h" 24 #include "webrtc/call/rtc_event_log.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" 25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
25 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" 26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
26 #include "webrtc/system_wrappers/include/clock.h" 27 #include "webrtc/system_wrappers/include/clock.h"
27 #include "webrtc/test/random.h"
28 #include "webrtc/test/test_suite.h" 28 #include "webrtc/test/test_suite.h"
29 #include "webrtc/test/testsupport/fileutils.h" 29 #include "webrtc/test/testsupport/fileutils.h"
30 #include "webrtc/test/testsupport/gtest_disable.h" 30 #include "webrtc/test/testsupport/gtest_disable.h"
31 31
32 // Files generated at build-time by the protobuf compiler. 32 // Files generated at build-time by the protobuf compiler.
33 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD 33 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD
34 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h" 34 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h"
35 #else 35 #else
36 #include "webrtc/call/rtc_event_log.pb.h" 36 #include "webrtc/call/rtc_event_log.pb.h"
37 #endif 37 #endif
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 294
295 /* 295 /*
296 * Bit number i of extension_bitvector is set to indicate the 296 * Bit number i of extension_bitvector is set to indicate the
297 * presence of extension number i from kExtensionTypes / kExtensionNames. 297 * presence of extension number i from kExtensionTypes / kExtensionNames.
298 * The least significant bit extension_bitvector has number 0. 298 * The least significant bit extension_bitvector has number 0.
299 */ 299 */
300 size_t GenerateRtpPacket(uint32_t extensions_bitvector, 300 size_t GenerateRtpPacket(uint32_t extensions_bitvector,
301 uint32_t csrcs_count, 301 uint32_t csrcs_count,
302 uint8_t* packet, 302 uint8_t* packet,
303 size_t packet_size, 303 size_t packet_size,
304 test::Random* prng) { 304 Random* prng) {
305 RTC_CHECK_GE(packet_size, 16 + 4 * csrcs_count + 4 * kNumExtensions); 305 RTC_CHECK_GE(packet_size, 16 + 4 * csrcs_count + 4 * kNumExtensions);
306 Clock* clock = Clock::GetRealTimeClock(); 306 Clock* clock = Clock::GetRealTimeClock();
307 307
308 RTPSender rtp_sender(false, // bool audio 308 RTPSender rtp_sender(false, // bool audio
309 clock, // Clock* clock 309 clock, // Clock* clock
310 nullptr, // Transport* 310 nullptr, // Transport*
311 nullptr, // RtpAudioFeedback* 311 nullptr, // RtpAudioFeedback*
312 nullptr, // PacedSender* 312 nullptr, // PacedSender*
313 nullptr, // PacketRouter* 313 nullptr, // PacketRouter*
314 nullptr, // SendTimeObserver* 314 nullptr, // SendTimeObserver*
(...skipping 27 matching lines...) Expand all
342 packet, payload_type, marker_bit, capture_timestamp, capture_time_ms, 342 packet, payload_type, marker_bit, capture_timestamp, capture_time_ms,
343 timestamp_provided, inc_sequence_number); 343 timestamp_provided, inc_sequence_number);
344 344
345 for (size_t i = header_size; i < packet_size; i++) { 345 for (size_t i = header_size; i < packet_size; i++) {
346 packet[i] = prng->Rand<uint8_t>(); 346 packet[i] = prng->Rand<uint8_t>();
347 } 347 }
348 348
349 return header_size; 349 return header_size;
350 } 350 }
351 351
352 rtc::scoped_ptr<rtcp::RawPacket> GenerateRtcpPacket(test::Random* prng) { 352 rtc::scoped_ptr<rtcp::RawPacket> GenerateRtcpPacket(Random* prng) {
353 rtcp::ReportBlock report_block; 353 rtcp::ReportBlock report_block;
354 report_block.To(prng->Rand<uint32_t>()); // Remote SSRC. 354 report_block.To(prng->Rand<uint32_t>()); // Remote SSRC.
355 report_block.WithFractionLost(prng->Rand(50)); 355 report_block.WithFractionLost(prng->Rand(50));
356 356
357 rtcp::SenderReport sender_report; 357 rtcp::SenderReport sender_report;
358 sender_report.From(prng->Rand<uint32_t>()); // Sender SSRC. 358 sender_report.From(prng->Rand<uint32_t>()); // Sender SSRC.
359 sender_report.WithNtpSec(prng->Rand<uint32_t>()); 359 sender_report.WithNtpSec(prng->Rand<uint32_t>());
360 sender_report.WithNtpFrac(prng->Rand<uint32_t>()); 360 sender_report.WithNtpFrac(prng->Rand<uint32_t>());
361 sender_report.WithPacketCount(prng->Rand<uint32_t>()); 361 sender_report.WithPacketCount(prng->Rand<uint32_t>());
362 sender_report.WithReportBlock(report_block); 362 sender_report.WithReportBlock(report_block);
363 363
364 return sender_report.Build(); 364 return sender_report.Build();
365 } 365 }
366 366
367 void GenerateVideoReceiveConfig(uint32_t extensions_bitvector, 367 void GenerateVideoReceiveConfig(uint32_t extensions_bitvector,
368 VideoReceiveStream::Config* config, 368 VideoReceiveStream::Config* config,
369 test::Random* prng) { 369 Random* prng) {
370 // Create a map from a payload type to an encoder name. 370 // Create a map from a payload type to an encoder name.
371 VideoReceiveStream::Decoder decoder; 371 VideoReceiveStream::Decoder decoder;
372 decoder.payload_type = prng->Rand(0, 127); 372 decoder.payload_type = prng->Rand(0, 127);
373 decoder.payload_name = (prng->Rand<bool>() ? "VP8" : "H264"); 373 decoder.payload_name = (prng->Rand<bool>() ? "VP8" : "H264");
374 config->decoders.push_back(decoder); 374 config->decoders.push_back(decoder);
375 // Add SSRCs for the stream. 375 // Add SSRCs for the stream.
376 config->rtp.remote_ssrc = prng->Rand<uint32_t>(); 376 config->rtp.remote_ssrc = prng->Rand<uint32_t>();
377 config->rtp.local_ssrc = prng->Rand<uint32_t>(); 377 config->rtp.local_ssrc = prng->Rand<uint32_t>();
378 // Add extensions and settings for RTCP. 378 // Add extensions and settings for RTCP.
379 config->rtp.rtcp_mode = 379 config->rtp.rtcp_mode =
380 prng->Rand<bool>() ? RtcpMode::kCompound : RtcpMode::kReducedSize; 380 prng->Rand<bool>() ? RtcpMode::kCompound : RtcpMode::kReducedSize;
381 config->rtp.remb = prng->Rand<bool>(); 381 config->rtp.remb = prng->Rand<bool>();
382 // Add a map from a payload type to a new ssrc and a new payload type for RTX. 382 // Add a map from a payload type to a new ssrc and a new payload type for RTX.
383 VideoReceiveStream::Config::Rtp::Rtx rtx_pair; 383 VideoReceiveStream::Config::Rtp::Rtx rtx_pair;
384 rtx_pair.ssrc = prng->Rand<uint32_t>(); 384 rtx_pair.ssrc = prng->Rand<uint32_t>();
385 rtx_pair.payload_type = prng->Rand(0, 127); 385 rtx_pair.payload_type = prng->Rand(0, 127);
386 config->rtp.rtx.insert(std::make_pair(prng->Rand(0, 127), rtx_pair)); 386 config->rtp.rtx.insert(std::make_pair(prng->Rand(0, 127), rtx_pair));
387 // Add header extensions. 387 // Add header extensions.
388 for (unsigned i = 0; i < kNumExtensions; i++) { 388 for (unsigned i = 0; i < kNumExtensions; i++) {
389 if (extensions_bitvector & (1u << i)) { 389 if (extensions_bitvector & (1u << i)) {
390 config->rtp.extensions.push_back( 390 config->rtp.extensions.push_back(
391 RtpExtension(kExtensionNames[i], prng->Rand<int>())); 391 RtpExtension(kExtensionNames[i], prng->Rand<int>()));
392 } 392 }
393 } 393 }
394 } 394 }
395 395
396 void GenerateVideoSendConfig(uint32_t extensions_bitvector, 396 void GenerateVideoSendConfig(uint32_t extensions_bitvector,
397 VideoSendStream::Config* config, 397 VideoSendStream::Config* config,
398 test::Random* prng) { 398 Random* prng) {
399 // Create a map from a payload type to an encoder name. 399 // Create a map from a payload type to an encoder name.
400 config->encoder_settings.payload_type = prng->Rand(0, 127); 400 config->encoder_settings.payload_type = prng->Rand(0, 127);
401 config->encoder_settings.payload_name = (prng->Rand<bool>() ? "VP8" : "H264"); 401 config->encoder_settings.payload_name = (prng->Rand<bool>() ? "VP8" : "H264");
402 // Add SSRCs for the stream. 402 // Add SSRCs for the stream.
403 config->rtp.ssrcs.push_back(prng->Rand<uint32_t>()); 403 config->rtp.ssrcs.push_back(prng->Rand<uint32_t>());
404 // Add a map from a payload type to new ssrcs and a new payload type for RTX. 404 // Add a map from a payload type to new ssrcs and a new payload type for RTX.
405 config->rtp.rtx.ssrcs.push_back(prng->Rand<uint32_t>()); 405 config->rtp.rtx.ssrcs.push_back(prng->Rand<uint32_t>());
406 config->rtp.rtx.payload_type = prng->Rand(0, 127); 406 config->rtp.rtx.payload_type = prng->Rand(0, 127);
407 // Add header extensions. 407 // Add header extensions.
408 for (unsigned i = 0; i < kNumExtensions; i++) { 408 for (unsigned i = 0; i < kNumExtensions; i++) {
(...skipping 18 matching lines...) Expand all
427 ASSERT_LE(bwe_loss_count, rtp_count); 427 ASSERT_LE(bwe_loss_count, rtp_count);
428 std::vector<rtc::Buffer> rtp_packets; 428 std::vector<rtc::Buffer> rtp_packets;
429 std::vector<rtc::scoped_ptr<rtcp::RawPacket> > rtcp_packets; 429 std::vector<rtc::scoped_ptr<rtcp::RawPacket> > rtcp_packets;
430 std::vector<size_t> rtp_header_sizes; 430 std::vector<size_t> rtp_header_sizes;
431 std::vector<uint32_t> playout_ssrcs; 431 std::vector<uint32_t> playout_ssrcs;
432 std::vector<std::pair<int32_t, uint8_t> > bwe_loss_updates; 432 std::vector<std::pair<int32_t, uint8_t> > bwe_loss_updates;
433 433
434 VideoReceiveStream::Config receiver_config(nullptr); 434 VideoReceiveStream::Config receiver_config(nullptr);
435 VideoSendStream::Config sender_config(nullptr); 435 VideoSendStream::Config sender_config(nullptr);
436 436
437 test::Random prng(random_seed); 437 Random prng(random_seed);
438 438
439 // Create rtp_count RTP packets containing random data. 439 // Create rtp_count RTP packets containing random data.
440 for (size_t i = 0; i < rtp_count; i++) { 440 for (size_t i = 0; i < rtp_count; i++) {
441 size_t packet_size = prng.Rand(1000, 1100); 441 size_t packet_size = prng.Rand(1000, 1100);
442 rtp_packets.push_back(rtc::Buffer(packet_size)); 442 rtp_packets.push_back(rtc::Buffer(packet_size));
443 size_t header_size = 443 size_t header_size =
444 GenerateRtpPacket(extensions_bitvector, csrcs_count, 444 GenerateRtpPacket(extensions_bitvector, csrcs_count,
445 rtp_packets[i].data(), packet_size, &prng); 445 rtp_packets[i].data(), packet_size, &prng);
446 rtp_header_sizes.push_back(header_size); 446 rtp_header_sizes.push_back(header_size);
447 } 447 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 584
585 // Try all combinations of header extensions and up to 2 CSRCS. 585 // Try all combinations of header extensions and up to 2 CSRCS.
586 for (extensions = 0; extensions < (1u << kNumExtensions); extensions++) { 586 for (extensions = 0; extensions < (1u << kNumExtensions); extensions++) {
587 for (uint32_t csrcs_count = 0; csrcs_count < 3; csrcs_count++) { 587 for (uint32_t csrcs_count = 0; csrcs_count < 3; csrcs_count++) {
588 LogSessionAndReadBack(5 + extensions, // Number of RTP packets. 588 LogSessionAndReadBack(5 + extensions, // Number of RTP packets.
589 2 + csrcs_count, // Number of RTCP packets. 589 2 + csrcs_count, // Number of RTCP packets.
590 3 + csrcs_count, // Number of playout events. 590 3 + csrcs_count, // Number of playout events.
591 1 + csrcs_count, // Number of BWE loss events. 591 1 + csrcs_count, // Number of BWE loss events.
592 extensions, // Bit vector choosing extensions. 592 extensions, // Bit vector choosing extensions.
593 csrcs_count, // Number of contributing sources. 593 csrcs_count, // Number of contributing sources.
594 extensions + csrcs_count); // Random seed. 594 extensions * 3 + csrcs_count + 1); // Random seed.
595 } 595 }
596 } 596 }
597 } 597 }
598 598
599 // Tests that the event queue works correctly, i.e. drops old RTP, RTCP and 599 // Tests that the event queue works correctly, i.e. drops old RTP, RTCP and
600 // debug events, but keeps config events even if they are older than the limit. 600 // debug events, but keeps config events even if they are older than the limit.
601 void DropOldEvents(uint32_t extensions_bitvector, 601 void DropOldEvents(uint32_t extensions_bitvector,
602 uint32_t csrcs_count, 602 uint32_t csrcs_count,
603 unsigned int random_seed) { 603 unsigned int random_seed) {
604 rtc::Buffer old_rtp_packet; 604 rtc::Buffer old_rtp_packet;
605 rtc::Buffer recent_rtp_packet; 605 rtc::Buffer recent_rtp_packet;
606 rtc::scoped_ptr<rtcp::RawPacket> old_rtcp_packet; 606 rtc::scoped_ptr<rtcp::RawPacket> old_rtcp_packet;
607 rtc::scoped_ptr<rtcp::RawPacket> recent_rtcp_packet; 607 rtc::scoped_ptr<rtcp::RawPacket> recent_rtcp_packet;
608 608
609 VideoReceiveStream::Config receiver_config(nullptr); 609 VideoReceiveStream::Config receiver_config(nullptr);
610 VideoSendStream::Config sender_config(nullptr); 610 VideoSendStream::Config sender_config(nullptr);
611 611
612 test::Random prng(random_seed); 612 Random prng(random_seed);
613 613
614 // Create two RTP packets containing random data. 614 // Create two RTP packets containing random data.
615 size_t packet_size = prng.Rand(1000, 1100); 615 size_t packet_size = prng.Rand(1000, 1100);
616 old_rtp_packet.SetSize(packet_size); 616 old_rtp_packet.SetSize(packet_size);
617 GenerateRtpPacket(extensions_bitvector, csrcs_count, old_rtp_packet.data(), 617 GenerateRtpPacket(extensions_bitvector, csrcs_count, old_rtp_packet.data(),
618 packet_size, &prng); 618 packet_size, &prng);
619 packet_size = prng.Rand(1000, 1100); 619 packet_size = prng.Rand(1000, 1100);
620 recent_rtp_packet.SetSize(packet_size); 620 recent_rtp_packet.SetSize(packet_size);
621 size_t recent_header_size = 621 size_t recent_header_size =
622 GenerateRtpPacket(extensions_bitvector, csrcs_count, 622 GenerateRtpPacket(extensions_bitvector, csrcs_count,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 // Enable all header extensions 682 // Enable all header extensions
683 uint32_t extensions = (1u << kNumExtensions) - 1; 683 uint32_t extensions = (1u << kNumExtensions) - 1;
684 uint32_t csrcs_count = 2; 684 uint32_t csrcs_count = 2;
685 DropOldEvents(extensions, csrcs_count, 141421356); 685 DropOldEvents(extensions, csrcs_count, 141421356);
686 DropOldEvents(extensions, csrcs_count, 173205080); 686 DropOldEvents(extensions, csrcs_count, 173205080);
687 } 687 }
688 688
689 } // namespace webrtc 689 } // namespace webrtc
690 690
691 #endif // ENABLE_RTC_EVENT_LOG 691 #endif // ENABLE_RTC_EVENT_LOG
OLDNEW
« no previous file with comments | « webrtc/base/random_unittest.cc ('k') | webrtc/modules/audio_processing/audio_processing_impl_locking_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698