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

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

Issue 1419523004: Skip logging RTCP messages of type SDES and APP. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rewrote generation of random RTCP packets using the SenderReport class. Created 5 years, 1 month 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 <stdio.h> 13 #include <stdio.h>
14 #include <string.h>
ivoc 2015/11/02 10:51:18 Is this used anywhere?
terelius 2015/11/05 18:01:18 You're right. It was used to access memcpy in a pr
14 #include <string> 15 #include <string>
15 #include <vector> 16 #include <vector>
16 17
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "webrtc/base/buffer.h" 19 #include "webrtc/base/buffer.h"
19 #include "webrtc/base/checks.h" 20 #include "webrtc/base/checks.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"
25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
24 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h" 26 #include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
25 #include "webrtc/system_wrappers/include/clock.h" 27 #include "webrtc/system_wrappers/include/clock.h"
26 #include "webrtc/test/test_suite.h" 28 #include "webrtc/test/test_suite.h"
27 #include "webrtc/test/testsupport/fileutils.h" 29 #include "webrtc/test/testsupport/fileutils.h"
28 #include "webrtc/test/testsupport/gtest_disable.h" 30 #include "webrtc/test/testsupport/gtest_disable.h"
29 31
30 // Files generated at build-time by the protobuf compiler. 32 // Files generated at build-time by the protobuf compiler.
31 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD 33 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD
32 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h" 34 #include "external/webrtc/webrtc/call/rtc_event_log.pb.h"
33 #else 35 #else
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 ASSERT_TRUE(receiver_config.has_local_ssrc()); 133 ASSERT_TRUE(receiver_config.has_local_ssrc());
132 EXPECT_EQ(config.rtp.local_ssrc, receiver_config.local_ssrc()); 134 EXPECT_EQ(config.rtp.local_ssrc, receiver_config.local_ssrc());
133 // Check RTCP settings. 135 // Check RTCP settings.
134 ASSERT_TRUE(receiver_config.has_rtcp_mode()); 136 ASSERT_TRUE(receiver_config.has_rtcp_mode());
135 if (config.rtp.rtcp_mode == RtcpMode::kCompound) 137 if (config.rtp.rtcp_mode == RtcpMode::kCompound)
136 EXPECT_EQ(rtclog::VideoReceiveConfig::RTCP_COMPOUND, 138 EXPECT_EQ(rtclog::VideoReceiveConfig::RTCP_COMPOUND,
137 receiver_config.rtcp_mode()); 139 receiver_config.rtcp_mode());
138 else 140 else
139 EXPECT_EQ(rtclog::VideoReceiveConfig::RTCP_REDUCEDSIZE, 141 EXPECT_EQ(rtclog::VideoReceiveConfig::RTCP_REDUCEDSIZE,
140 receiver_config.rtcp_mode()); 142 receiver_config.rtcp_mode());
141 ASSERT_TRUE(receiver_config.has_receiver_reference_time_report());
142 EXPECT_EQ(config.rtp.rtcp_xr.receiver_reference_time_report,
143 receiver_config.receiver_reference_time_report());
144 ASSERT_TRUE(receiver_config.has_remb()); 143 ASSERT_TRUE(receiver_config.has_remb());
145 EXPECT_EQ(config.rtp.remb, receiver_config.remb()); 144 EXPECT_EQ(config.rtp.remb, receiver_config.remb());
146 // Check RTX map. 145 // Check RTX map.
147 ASSERT_EQ(static_cast<int>(config.rtp.rtx.size()), 146 ASSERT_EQ(static_cast<int>(config.rtp.rtx.size()),
148 receiver_config.rtx_map_size()); 147 receiver_config.rtx_map_size());
149 for (const rtclog::RtxMap& rtx_map : receiver_config.rtx_map()) { 148 for (const rtclog::RtxMap& rtx_map : receiver_config.rtx_map()) {
150 ASSERT_TRUE(rtx_map.has_payload_type()); 149 ASSERT_TRUE(rtx_map.has_payload_type());
151 ASSERT_TRUE(rtx_map.has_config()); 150 ASSERT_TRUE(rtx_map.has_config());
152 EXPECT_EQ(1u, config.rtp.rtx.count(rtx_map.payload_type())); 151 EXPECT_EQ(1u, config.rtp.rtx.count(rtx_map.payload_type()));
153 const rtclog::RtxConfig& rtx_config = rtx_map.config(); 152 const rtclog::RtxConfig& rtx_config = rtx_map.config();
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 // Check RTX settings. 206 // Check RTX settings.
208 ASSERT_EQ(static_cast<int>(config.rtp.rtx.ssrcs.size()), 207 ASSERT_EQ(static_cast<int>(config.rtp.rtx.ssrcs.size()),
209 sender_config.rtx_ssrcs_size()); 208 sender_config.rtx_ssrcs_size());
210 for (int i = 0; i < sender_config.rtx_ssrcs_size(); i++) { 209 for (int i = 0; i < sender_config.rtx_ssrcs_size(); i++) {
211 EXPECT_EQ(config.rtp.rtx.ssrcs[i], sender_config.rtx_ssrcs(i)); 210 EXPECT_EQ(config.rtp.rtx.ssrcs[i], sender_config.rtx_ssrcs(i));
212 } 211 }
213 if (sender_config.rtx_ssrcs_size() > 0) { 212 if (sender_config.rtx_ssrcs_size() > 0) {
214 ASSERT_TRUE(sender_config.has_rtx_payload_type()); 213 ASSERT_TRUE(sender_config.has_rtx_payload_type());
215 EXPECT_EQ(config.rtp.rtx.payload_type, sender_config.rtx_payload_type()); 214 EXPECT_EQ(config.rtp.rtx.payload_type, sender_config.rtx_payload_type());
216 } 215 }
217 // Check CNAME.
218 ASSERT_TRUE(sender_config.has_c_name());
219 EXPECT_EQ(config.rtp.c_name, sender_config.c_name());
220 // Check encoder. 216 // Check encoder.
221 ASSERT_TRUE(sender_config.has_encoder()); 217 ASSERT_TRUE(sender_config.has_encoder());
222 ASSERT_TRUE(sender_config.encoder().has_name()); 218 ASSERT_TRUE(sender_config.encoder().has_name());
223 ASSERT_TRUE(sender_config.encoder().has_payload_type()); 219 ASSERT_TRUE(sender_config.encoder().has_payload_type());
224 EXPECT_EQ(config.encoder_settings.payload_name, 220 EXPECT_EQ(config.encoder_settings.payload_name,
225 sender_config.encoder().name()); 221 sender_config.encoder().name());
226 EXPECT_EQ(config.encoder_settings.payload_type, 222 EXPECT_EQ(config.encoder_settings.payload_type,
227 sender_config.encoder().payload_type()); 223 sender_config.encoder().payload_type());
228 } 224 }
229 225
230 void VerifyRtpEvent(const rtclog::Event& event, 226 void VerifyRtpEvent(const rtclog::Event& event,
231 bool incoming, 227 bool incoming,
232 MediaType media_type, 228 MediaType media_type,
233 uint8_t* header, 229 const uint8_t* header,
234 size_t header_size, 230 size_t header_size,
235 size_t total_size) { 231 size_t total_size) {
236 ASSERT_TRUE(IsValidBasicEvent(event)); 232 ASSERT_TRUE(IsValidBasicEvent(event));
237 ASSERT_EQ(rtclog::Event::RTP_EVENT, event.type()); 233 ASSERT_EQ(rtclog::Event::RTP_EVENT, event.type());
238 const rtclog::RtpPacket& rtp_packet = event.rtp_packet(); 234 const rtclog::RtpPacket& rtp_packet = event.rtp_packet();
239 ASSERT_TRUE(rtp_packet.has_incoming()); 235 ASSERT_TRUE(rtp_packet.has_incoming());
240 EXPECT_EQ(incoming, rtp_packet.incoming()); 236 EXPECT_EQ(incoming, rtp_packet.incoming());
241 ASSERT_TRUE(rtp_packet.has_type()); 237 ASSERT_TRUE(rtp_packet.has_type());
242 EXPECT_EQ(media_type, GetRuntimeMediaType(rtp_packet.type())); 238 EXPECT_EQ(media_type, GetRuntimeMediaType(rtp_packet.type()));
243 ASSERT_TRUE(rtp_packet.has_packet_length()); 239 ASSERT_TRUE(rtp_packet.has_packet_length());
244 EXPECT_EQ(total_size, rtp_packet.packet_length()); 240 EXPECT_EQ(total_size, rtp_packet.packet_length());
245 ASSERT_TRUE(rtp_packet.has_header()); 241 ASSERT_TRUE(rtp_packet.has_header());
246 ASSERT_EQ(header_size, rtp_packet.header().size()); 242 ASSERT_EQ(header_size, rtp_packet.header().size());
247 for (size_t i = 0; i < header_size; i++) { 243 for (size_t i = 0; i < header_size; i++) {
248 EXPECT_EQ(header[i], static_cast<uint8_t>(rtp_packet.header()[i])); 244 EXPECT_EQ(header[i], static_cast<uint8_t>(rtp_packet.header()[i]));
249 } 245 }
250 } 246 }
251 247
252 void VerifyRtcpEvent(const rtclog::Event& event, 248 void VerifyRtcpEvent(const rtclog::Event& event,
253 bool incoming, 249 bool incoming,
254 MediaType media_type, 250 MediaType media_type,
255 uint8_t* packet, 251 const uint8_t* packet,
256 size_t total_size) { 252 size_t total_size) {
257 ASSERT_TRUE(IsValidBasicEvent(event)); 253 ASSERT_TRUE(IsValidBasicEvent(event));
258 ASSERT_EQ(rtclog::Event::RTCP_EVENT, event.type()); 254 ASSERT_EQ(rtclog::Event::RTCP_EVENT, event.type());
259 const rtclog::RtcpPacket& rtcp_packet = event.rtcp_packet(); 255 const rtclog::RtcpPacket& rtcp_packet = event.rtcp_packet();
260 ASSERT_TRUE(rtcp_packet.has_incoming()); 256 ASSERT_TRUE(rtcp_packet.has_incoming());
261 EXPECT_EQ(incoming, rtcp_packet.incoming()); 257 EXPECT_EQ(incoming, rtcp_packet.incoming());
262 ASSERT_TRUE(rtcp_packet.has_type()); 258 ASSERT_TRUE(rtcp_packet.has_type());
263 EXPECT_EQ(media_type, GetRuntimeMediaType(rtcp_packet.type())); 259 EXPECT_EQ(media_type, GetRuntimeMediaType(rtcp_packet.type()));
264 ASSERT_TRUE(rtcp_packet.has_packet_data()); 260 ASSERT_TRUE(rtcp_packet.has_packet_data());
265 ASSERT_EQ(total_size, rtcp_packet.packet_data().size()); 261 ASSERT_EQ(total_size, rtcp_packet.packet_data().size());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 packet, payload_type, marker_bit, capture_timestamp, capture_time_ms, 326 packet, payload_type, marker_bit, capture_timestamp, capture_time_ms,
331 timestamp_provided, inc_sequence_number); 327 timestamp_provided, inc_sequence_number);
332 328
333 for (size_t i = header_size; i < packet_size; i++) { 329 for (size_t i = header_size; i < packet_size; i++) {
334 packet[i] = rand(); 330 packet[i] = rand();
335 } 331 }
336 332
337 return header_size; 333 return header_size;
338 } 334 }
339 335
340 void GenerateRtcpPacket(uint8_t* packet, size_t packet_size) { 336 rtc::scoped_ptr<rtcp::RawPacket> GenerateRtcpPacket() {
341 for (size_t i = 0; i < packet_size; i++) { 337 rtcp::ReportBlock report_block;
342 packet[i] = rand(); 338 report_block.To(rand()); // kRemoteSsrc
åsapersson 2015/11/02 09:31:12 // remote SSRC
terelius 2015/11/05 18:01:18 Done.
343 } 339 report_block.WithFractionLost(rand()%50);
åsapersson 2015/11/02 09:31:12 nit: add spaces before and after %
terelius 2015/11/05 18:01:18 Done.
340
341 rtcp::SenderReport sender_report;
342 sender_report.From(rand()); // kSenderSsrc
åsapersson 2015/11/02 09:31:12 // sender SSRC
terelius 2015/11/05 18:01:18 Done.
343 sender_report.WithNtpSec(rand());
344 sender_report.WithNtpFrac(rand());
345 sender_report.WithPacketCount(rand());
346 sender_report.WithReportBlock(report_block);
347
348 return sender_report.Build();
344 } 349 }
345 350
346 void GenerateVideoReceiveConfig(uint32_t extensions_bitvector, 351 void GenerateVideoReceiveConfig(uint32_t extensions_bitvector,
347 VideoReceiveStream::Config* config) { 352 VideoReceiveStream::Config* config) {
348 // Create a map from a payload type to an encoder name. 353 // Create a map from a payload type to an encoder name.
349 VideoReceiveStream::Decoder decoder; 354 VideoReceiveStream::Decoder decoder;
350 decoder.payload_type = rand(); 355 decoder.payload_type = rand();
351 decoder.payload_name = (rand() % 2 ? "VP8" : "H264"); 356 decoder.payload_name = (rand() % 2 ? "VP8" : "H264");
352 config->decoders.push_back(decoder); 357 config->decoders.push_back(decoder);
353 // Add SSRCs for the stream. 358 // Add SSRCs for the stream.
354 config->rtp.remote_ssrc = rand(); 359 config->rtp.remote_ssrc = rand();
355 config->rtp.local_ssrc = rand(); 360 config->rtp.local_ssrc = rand();
356 // Add extensions and settings for RTCP. 361 // Add extensions and settings for RTCP.
357 config->rtp.rtcp_mode = 362 config->rtp.rtcp_mode =
358 rand() % 2 ? RtcpMode::kCompound : RtcpMode::kReducedSize; 363 rand() % 2 ? RtcpMode::kCompound : RtcpMode::kReducedSize;
359 config->rtp.rtcp_xr.receiver_reference_time_report = (rand() % 2 == 1);
360 config->rtp.remb = (rand() % 2 == 1); 364 config->rtp.remb = (rand() % 2 == 1);
361 // Add a map from a payload type to a new ssrc and a new payload type for RTX. 365 // Add a map from a payload type to a new ssrc and a new payload type for RTX.
362 VideoReceiveStream::Config::Rtp::Rtx rtx_pair; 366 VideoReceiveStream::Config::Rtp::Rtx rtx_pair;
363 rtx_pair.ssrc = rand(); 367 rtx_pair.ssrc = rand();
364 rtx_pair.payload_type = rand(); 368 rtx_pair.payload_type = rand();
365 config->rtp.rtx.insert(std::make_pair(rand(), rtx_pair)); 369 config->rtp.rtx.insert(std::make_pair(rand(), rtx_pair));
366 // Add header extensions. 370 // Add header extensions.
367 for (unsigned i = 0; i < kNumExtensions; i++) { 371 for (unsigned i = 0; i < kNumExtensions; i++) {
368 if (extensions_bitvector & (1u << i)) { 372 if (extensions_bitvector & (1u << i)) {
369 config->rtp.extensions.push_back( 373 config->rtp.extensions.push_back(
370 RtpExtension(kExtensionNames[i], rand())); 374 RtpExtension(kExtensionNames[i], rand()));
371 } 375 }
372 } 376 }
373 } 377 }
374 378
375 void GenerateVideoSendConfig(uint32_t extensions_bitvector, 379 void GenerateVideoSendConfig(uint32_t extensions_bitvector,
376 VideoSendStream::Config* config) { 380 VideoSendStream::Config* config) {
377 // Create a map from a payload type to an encoder name. 381 // Create a map from a payload type to an encoder name.
378 config->encoder_settings.payload_type = rand(); 382 config->encoder_settings.payload_type = rand();
379 config->encoder_settings.payload_name = (rand() % 2 ? "VP8" : "H264"); 383 config->encoder_settings.payload_name = (rand() % 2 ? "VP8" : "H264");
380 // Add SSRCs for the stream. 384 // Add SSRCs for the stream.
381 config->rtp.ssrcs.push_back(rand()); 385 config->rtp.ssrcs.push_back(rand());
382 // Add a map from a payload type to new ssrcs and a new payload type for RTX. 386 // Add a map from a payload type to new ssrcs and a new payload type for RTX.
383 config->rtp.rtx.ssrcs.push_back(rand()); 387 config->rtp.rtx.ssrcs.push_back(rand());
384 config->rtp.rtx.payload_type = rand(); 388 config->rtp.rtx.payload_type = rand();
385 // Add a CNAME.
386 config->rtp.c_name = "some.user@some.host";
387 // Add header extensions. 389 // Add header extensions.
388 for (unsigned i = 0; i < kNumExtensions; i++) { 390 for (unsigned i = 0; i < kNumExtensions; i++) {
389 if (extensions_bitvector & (1u << i)) { 391 if (extensions_bitvector & (1u << i)) {
390 config->rtp.extensions.push_back( 392 config->rtp.extensions.push_back(
391 RtpExtension(kExtensionNames[i], rand())); 393 RtpExtension(kExtensionNames[i], rand()));
392 } 394 }
393 } 395 }
394 } 396 }
395 397
396 // Test for the RtcEventLog class. Dumps some RTP packets and other events 398 // Test for the RtcEventLog class. Dumps some RTP packets and other events
397 // to disk, then reads them back to see if they match. 399 // to disk, then reads them back to see if they match.
398 void LogSessionAndReadBack(size_t rtp_count, 400 void LogSessionAndReadBack(size_t rtp_count,
399 size_t rtcp_count, 401 size_t rtcp_count,
400 size_t playout_count, 402 size_t playout_count,
401 uint32_t extensions_bitvector, 403 uint32_t extensions_bitvector,
402 uint32_t csrcs_count, 404 uint32_t csrcs_count,
403 unsigned int random_seed) { 405 unsigned int random_seed) {
404 ASSERT_LE(rtcp_count, rtp_count); 406 ASSERT_LE(rtcp_count, rtp_count);
405 ASSERT_LE(playout_count, rtp_count); 407 ASSERT_LE(playout_count, rtp_count);
406 std::vector<rtc::Buffer> rtp_packets; 408 std::vector<rtc::Buffer> rtp_packets;
407 std::vector<rtc::Buffer> rtcp_packets; 409 std::vector<rtc::scoped_ptr<rtcp::RawPacket> > rtcp_packets;
408 std::vector<size_t> rtp_header_sizes; 410 std::vector<size_t> rtp_header_sizes;
409 std::vector<uint32_t> playout_ssrcs; 411 std::vector<uint32_t> playout_ssrcs;
410 412
411 VideoReceiveStream::Config receiver_config(nullptr); 413 VideoReceiveStream::Config receiver_config(nullptr);
412 VideoSendStream::Config sender_config(nullptr); 414 VideoSendStream::Config sender_config(nullptr);
413 415
414 srand(random_seed); 416 srand(random_seed);
415 417
416 // Create rtp_count RTP packets containing random data. 418 // Create rtp_count RTP packets containing random data.
417 for (size_t i = 0; i < rtp_count; i++) { 419 for (size_t i = 0; i < rtp_count; i++) {
418 size_t packet_size = 1000 + rand() % 64; 420 size_t packet_size = 1000 + rand() % 64;
419 rtp_packets.push_back(rtc::Buffer(packet_size)); 421 rtp_packets.push_back(rtc::Buffer(packet_size));
420 size_t header_size = GenerateRtpPacket(extensions_bitvector, csrcs_count, 422 size_t header_size = GenerateRtpPacket(extensions_bitvector, csrcs_count,
421 rtp_packets[i].data(), packet_size); 423 rtp_packets[i].data(), packet_size);
422 rtp_header_sizes.push_back(header_size); 424 rtp_header_sizes.push_back(header_size);
423 } 425 }
424 // Create rtcp_count RTCP packets containing random data. 426 // Create rtcp_count RTCP packets containing random data.
425 for (size_t i = 0; i < rtcp_count; i++) { 427 for (size_t i = 0; i < rtcp_count; i++) {
426 size_t packet_size = 1000 + rand() % 64; 428 rtcp_packets.push_back(GenerateRtcpPacket());
427 rtcp_packets.push_back(rtc::Buffer(packet_size));
428 GenerateRtcpPacket(rtcp_packets[i].data(), packet_size);
429 } 429 }
430 // Create playout_count random SSRCs to use when logging AudioPlayout events. 430 // Create playout_count random SSRCs to use when logging AudioPlayout events.
431 for (size_t i = 0; i < playout_count; i++) { 431 for (size_t i = 0; i < playout_count; i++) {
432 playout_ssrcs.push_back(static_cast<uint32_t>(rand())); 432 playout_ssrcs.push_back(static_cast<uint32_t>(rand()));
433 } 433 }
434 // Create configurations for the video streams. 434 // Create configurations for the video streams.
435 GenerateVideoReceiveConfig(extensions_bitvector, &receiver_config); 435 GenerateVideoReceiveConfig(extensions_bitvector, &receiver_config);
436 GenerateVideoSendConfig(extensions_bitvector, &sender_config); 436 GenerateVideoSendConfig(extensions_bitvector, &sender_config);
437 const int config_count = 2; 437 const int config_count = 2;
438 438
(...skipping 12 matching lines...) Expand all
451 size_t rtcp_index = 1, playout_index = 1; 451 size_t rtcp_index = 1, playout_index = 1;
452 for (size_t i = 1; i <= rtp_count; i++) { 452 for (size_t i = 1; i <= rtp_count; i++) {
453 log_dumper->LogRtpHeader( 453 log_dumper->LogRtpHeader(
454 (i % 2 == 0), // Every second packet is incoming. 454 (i % 2 == 0), // Every second packet is incoming.
455 (i % 3 == 0) ? MediaType::AUDIO : MediaType::VIDEO, 455 (i % 3 == 0) ? MediaType::AUDIO : MediaType::VIDEO,
456 rtp_packets[i - 1].data(), rtp_packets[i - 1].size()); 456 rtp_packets[i - 1].data(), rtp_packets[i - 1].size());
457 if (i * rtcp_count >= rtcp_index * rtp_count) { 457 if (i * rtcp_count >= rtcp_index * rtp_count) {
458 log_dumper->LogRtcpPacket( 458 log_dumper->LogRtcpPacket(
459 rtcp_index % 2 == 0, // Every second packet is incoming 459 rtcp_index % 2 == 0, // Every second packet is incoming
460 rtcp_index % 3 == 0 ? MediaType::AUDIO : MediaType::VIDEO, 460 rtcp_index % 3 == 0 ? MediaType::AUDIO : MediaType::VIDEO,
461 rtcp_packets[rtcp_index - 1].data(), 461 rtcp_packets[rtcp_index - 1]->Buffer(),
462 rtcp_packets[rtcp_index - 1].size()); 462 rtcp_packets[rtcp_index - 1]->Length());
463 rtcp_index++; 463 rtcp_index++;
464 } 464 }
465 if (i * playout_count >= playout_index * rtp_count) { 465 if (i * playout_count >= playout_index * rtp_count) {
466 log_dumper->LogAudioPlayout(playout_ssrcs[playout_index - 1]); 466 log_dumper->LogAudioPlayout(playout_ssrcs[playout_index - 1]);
467 playout_index++; 467 playout_index++;
468 } 468 }
469 if (i == rtp_count / 2) { 469 if (i == rtp_count / 2) {
470 log_dumper->StartLogging(temp_filename, 10000000); 470 log_dumper->StartLogging(temp_filename, 10000000);
471 } 471 }
472 } 472 }
(...skipping 17 matching lines...) Expand all
490 VerifyRtpEvent(parsed_stream.stream(event_index), 490 VerifyRtpEvent(parsed_stream.stream(event_index),
491 (i % 2 == 0), // Every second packet is incoming. 491 (i % 2 == 0), // Every second packet is incoming.
492 (i % 3 == 0) ? MediaType::AUDIO : MediaType::VIDEO, 492 (i % 3 == 0) ? MediaType::AUDIO : MediaType::VIDEO,
493 rtp_packets[i - 1].data(), rtp_header_sizes[i - 1], 493 rtp_packets[i - 1].data(), rtp_header_sizes[i - 1],
494 rtp_packets[i - 1].size()); 494 rtp_packets[i - 1].size());
495 event_index++; 495 event_index++;
496 if (i * rtcp_count >= rtcp_index * rtp_count) { 496 if (i * rtcp_count >= rtcp_index * rtp_count) {
497 VerifyRtcpEvent(parsed_stream.stream(event_index), 497 VerifyRtcpEvent(parsed_stream.stream(event_index),
498 rtcp_index % 2 == 0, // Every second packet is incoming. 498 rtcp_index % 2 == 0, // Every second packet is incoming.
499 rtcp_index % 3 == 0 ? MediaType::AUDIO : MediaType::VIDEO, 499 rtcp_index % 3 == 0 ? MediaType::AUDIO : MediaType::VIDEO,
500 rtcp_packets[rtcp_index - 1].data(), 500 rtcp_packets[rtcp_index - 1]->Buffer(),
501 rtcp_packets[rtcp_index - 1].size()); 501 rtcp_packets[rtcp_index - 1]->Length());
502 event_index++; 502 event_index++;
503 rtcp_index++; 503 rtcp_index++;
504 } 504 }
505 if (i * playout_count >= playout_index * rtp_count) { 505 if (i * playout_count >= playout_index * rtp_count) {
506 VerifyPlayoutEvent(parsed_stream.stream(event_index), 506 VerifyPlayoutEvent(parsed_stream.stream(event_index),
507 playout_ssrcs[playout_index - 1]); 507 playout_ssrcs[playout_index - 1]);
508 event_index++; 508 event_index++;
509 playout_index++; 509 playout_index++;
510 } 510 }
511 if (i == rtp_count / 2) { 511 if (i == rtp_count / 2) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 } 549 }
550 } 550 }
551 551
552 // Tests that the event queue works correctly, i.e. drops old RTP, RTCP and 552 // Tests that the event queue works correctly, i.e. drops old RTP, RTCP and
553 // debug events, but keeps config events even if they are older than the limit. 553 // debug events, but keeps config events even if they are older than the limit.
554 void DropOldEvents(uint32_t extensions_bitvector, 554 void DropOldEvents(uint32_t extensions_bitvector,
555 uint32_t csrcs_count, 555 uint32_t csrcs_count,
556 unsigned int random_seed) { 556 unsigned int random_seed) {
557 rtc::Buffer old_rtp_packet; 557 rtc::Buffer old_rtp_packet;
558 rtc::Buffer recent_rtp_packet; 558 rtc::Buffer recent_rtp_packet;
559 rtc::Buffer old_rtcp_packet; 559 rtc::scoped_ptr<rtcp::RawPacket> old_rtcp_packet;
560 rtc::Buffer recent_rtcp_packet; 560 rtc::scoped_ptr<rtcp::RawPacket> recent_rtcp_packet;
561 561
562 VideoReceiveStream::Config receiver_config(nullptr); 562 VideoReceiveStream::Config receiver_config(nullptr);
563 VideoSendStream::Config sender_config(nullptr); 563 VideoSendStream::Config sender_config(nullptr);
564 564
565 srand(random_seed); 565 srand(random_seed);
566 566
567 // Create two RTP packets containing random data. 567 // Create two RTP packets containing random data.
568 size_t packet_size = 1000 + rand() % 64; 568 size_t packet_size = 1000 + rand() % 64;
569 old_rtp_packet.SetSize(packet_size); 569 old_rtp_packet.SetSize(packet_size);
570 GenerateRtpPacket(extensions_bitvector, csrcs_count, old_rtp_packet.data(), 570 GenerateRtpPacket(extensions_bitvector, csrcs_count, old_rtp_packet.data(),
571 packet_size); 571 packet_size);
572 packet_size = 1000 + rand() % 64; 572 packet_size = 1000 + rand() % 64;
573 recent_rtp_packet.SetSize(packet_size); 573 recent_rtp_packet.SetSize(packet_size);
574 size_t recent_header_size = GenerateRtpPacket( 574 size_t recent_header_size = GenerateRtpPacket(
575 extensions_bitvector, csrcs_count, recent_rtp_packet.data(), packet_size); 575 extensions_bitvector, csrcs_count, recent_rtp_packet.data(), packet_size);
576 576
577 // Create two RTCP packets containing random data. 577 // Create two RTCP packets containing random data.
578 packet_size = 1000 + rand() % 64; 578 old_rtcp_packet = GenerateRtcpPacket();
579 old_rtcp_packet.SetSize(packet_size); 579 recent_rtcp_packet = GenerateRtcpPacket();
580 GenerateRtcpPacket(old_rtcp_packet.data(), packet_size);
581 packet_size = 1000 + rand() % 64;
582 recent_rtcp_packet.SetSize(packet_size);
583 GenerateRtcpPacket(recent_rtcp_packet.data(), packet_size);
584 580
585 // Create configurations for the video streams. 581 // Create configurations for the video streams.
586 GenerateVideoReceiveConfig(extensions_bitvector, &receiver_config); 582 GenerateVideoReceiveConfig(extensions_bitvector, &receiver_config);
587 GenerateVideoSendConfig(extensions_bitvector, &sender_config); 583 GenerateVideoSendConfig(extensions_bitvector, &sender_config);
588 584
589 // Find the name of the current test, in order to use it as a temporary 585 // Find the name of the current test, in order to use it as a temporary
590 // filename. 586 // filename.
591 auto test_info = ::testing::UnitTest::GetInstance()->current_test_info(); 587 auto test_info = ::testing::UnitTest::GetInstance()->current_test_info();
592 const std::string temp_filename = 588 const std::string temp_filename =
593 test::OutputPath() + test_info->test_case_name() + test_info->name(); 589 test::OutputPath() + test_info->test_case_name() + test_info->name();
594 590
595 // The log file will be flushed to disk when the log_dumper goes out of scope. 591 // The log file will be flushed to disk when the log_dumper goes out of scope.
596 { 592 {
597 rtc::scoped_ptr<RtcEventLog> log_dumper(RtcEventLog::Create()); 593 rtc::scoped_ptr<RtcEventLog> log_dumper(RtcEventLog::Create());
598 // Reduce the time old events are stored to 50 ms. 594 // Reduce the time old events are stored to 50 ms.
599 log_dumper->SetBufferDuration(50000); 595 log_dumper->SetBufferDuration(50000);
600 log_dumper->LogVideoReceiveStreamConfig(receiver_config); 596 log_dumper->LogVideoReceiveStreamConfig(receiver_config);
601 log_dumper->LogVideoSendStreamConfig(sender_config); 597 log_dumper->LogVideoSendStreamConfig(sender_config);
602 log_dumper->LogRtpHeader(false, MediaType::AUDIO, old_rtp_packet.data(), 598 log_dumper->LogRtpHeader(false, MediaType::AUDIO, old_rtp_packet.data(),
603 old_rtp_packet.size()); 599 old_rtp_packet.size());
604 log_dumper->LogRtcpPacket(true, MediaType::AUDIO, old_rtcp_packet.data(), 600 log_dumper->LogRtcpPacket(true, MediaType::AUDIO, old_rtcp_packet->Buffer(),
605 old_rtcp_packet.size()); 601 old_rtcp_packet->Length());
606 // Sleep 55 ms to let old events be removed from the queue. 602 // Sleep 55 ms to let old events be removed from the queue.
607 rtc::Thread::SleepMs(55); 603 rtc::Thread::SleepMs(55);
608 log_dumper->StartLogging(temp_filename, 10000000); 604 log_dumper->StartLogging(temp_filename, 10000000);
609 log_dumper->LogRtpHeader(true, MediaType::VIDEO, recent_rtp_packet.data(), 605 log_dumper->LogRtpHeader(true, MediaType::VIDEO, recent_rtp_packet.data(),
610 recent_rtp_packet.size()); 606 recent_rtp_packet.size());
611 log_dumper->LogRtcpPacket(false, MediaType::VIDEO, 607 log_dumper->LogRtcpPacket(false, MediaType::VIDEO,
612 recent_rtcp_packet.data(), 608 recent_rtcp_packet->Buffer(),
613 recent_rtcp_packet.size()); 609 recent_rtcp_packet->Length());
614 } 610 }
615 611
616 // Read the generated file from disk. 612 // Read the generated file from disk.
617 rtclog::EventStream parsed_stream; 613 rtclog::EventStream parsed_stream;
618 ASSERT_TRUE(RtcEventLog::ParseRtcEventLog(temp_filename, &parsed_stream)); 614 ASSERT_TRUE(RtcEventLog::ParseRtcEventLog(temp_filename, &parsed_stream));
619 615
620 // Verify that what we read back from the event log is the same as 616 // Verify that what we read back from the event log is the same as
621 // what we wrote. Old RTP and RTCP events should have been discarded, 617 // what we wrote. Old RTP and RTCP events should have been discarded,
622 // but old configuration events should still be available. 618 // but old configuration events should still be available.
623 EXPECT_EQ(5, parsed_stream.stream_size()); 619 EXPECT_EQ(5, parsed_stream.stream_size());
624 VerifyReceiveStreamConfig(parsed_stream.stream(0), receiver_config); 620 VerifyReceiveStreamConfig(parsed_stream.stream(0), receiver_config);
625 VerifySendStreamConfig(parsed_stream.stream(1), sender_config); 621 VerifySendStreamConfig(parsed_stream.stream(1), sender_config);
626 VerifyLogStartEvent(parsed_stream.stream(2)); 622 VerifyLogStartEvent(parsed_stream.stream(2));
627 VerifyRtpEvent(parsed_stream.stream(3), true, MediaType::VIDEO, 623 VerifyRtpEvent(parsed_stream.stream(3), true, MediaType::VIDEO,
628 recent_rtp_packet.data(), recent_header_size, 624 recent_rtp_packet.data(), recent_header_size,
629 recent_rtp_packet.size()); 625 recent_rtp_packet.size());
630 VerifyRtcpEvent(parsed_stream.stream(4), false, MediaType::VIDEO, 626 VerifyRtcpEvent(parsed_stream.stream(4), false, MediaType::VIDEO,
631 recent_rtcp_packet.data(), recent_rtcp_packet.size()); 627 recent_rtcp_packet->Buffer(), recent_rtcp_packet->Length());
632 628
633 // Clean up temporary file - can be pretty slow. 629 // Clean up temporary file - can be pretty slow.
634 remove(temp_filename.c_str()); 630 remove(temp_filename.c_str());
635 } 631 }
636 632
637 TEST(RtcEventLogTest, DropOldEvents) { 633 TEST(RtcEventLogTest, DropOldEvents) {
638 // Enable all header extensions 634 // Enable all header extensions
639 uint32_t extensions = (1u << kNumExtensions) - 1; 635 uint32_t extensions = (1u << kNumExtensions) - 1;
640 uint32_t csrcs_count = 2; 636 uint32_t csrcs_count = 2;
641 DropOldEvents(extensions, csrcs_count, 141421356); 637 DropOldEvents(extensions, csrcs_count, 141421356);
642 DropOldEvents(extensions, csrcs_count, 173205080); 638 DropOldEvents(extensions, csrcs_count, 173205080);
643 } 639 }
644 640
645 } // namespace webrtc 641 } // namespace webrtc
646 642
647 #endif // ENABLE_RTC_EVENT_LOG 643 #endif // ENABLE_RTC_EVENT_LOG
OLDNEW
« webrtc/call/rtc_event_log.cc ('K') | « webrtc/call/rtc_event_log.proto ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698