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

Unified Diff: webrtc/call/rtc_event_log_unittest.cc

Issue 1303713002: Keep config events in RtcEventLog even if they are old. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase again Created 5 years, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/call/rtc_event_log.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/call/rtc_event_log_unittest.cc
diff --git a/webrtc/call/rtc_event_log_unittest.cc b/webrtc/call/rtc_event_log_unittest.cc
index 536b9972276905becb81ec0cd353dc2b2b3be913..cae2a202e0e090835032b99a51ec1ff33d50936d 100644
--- a/webrtc/call/rtc_event_log_unittest.cc
+++ b/webrtc/call/rtc_event_log_unittest.cc
@@ -18,6 +18,7 @@
#include "webrtc/base/buffer.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/scoped_ptr.h"
+#include "webrtc/base/thread.h"
#include "webrtc/call.h"
#include "webrtc/call/rtc_event_log.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_sender.h"
@@ -392,14 +393,14 @@ void GenerateVideoSendConfig(uint32_t extensions_bitvector,
}
}
-// Test for the RtcEventLog class. Dumps some RTP packets to disk, then reads
-// them back to see if they match.
+// Test for the RtcEventLog class. Dumps some RTP packets and other events
+// to disk, then reads them back to see if they match.
void LogSessionAndReadBack(size_t rtp_count,
size_t rtcp_count,
size_t playout_count,
uint32_t extensions_bitvector,
uint32_t csrcs_count,
- unsigned random_seed) {
+ unsigned int random_seed) {
ASSERT_LE(rtcp_count, rtp_count);
ASSERT_LE(playout_count, rtp_count);
std::vector<rtc::Buffer> rtp_packets;
@@ -476,7 +477,9 @@ void LogSessionAndReadBack(size_t rtp_count,
ASSERT_TRUE(RtcEventLog::ParseRtcEventLog(temp_filename, &parsed_stream));
- // Verify the result.
+ // Verify that what we read back from the event log is the same as
+ // what we wrote down. For RTCP we log the full packets, but for
+ // RTP we should only log the header.
const int event_count =
config_count + playout_count + rtcp_count + rtp_count + 1;
EXPECT_EQ(event_count, parsed_stream.stream_size());
@@ -546,6 +549,99 @@ TEST(RtcEventLogTest, LogSessionAndReadBack) {
}
}
+// Tests that the event queue works correctly, i.e. drops old RTP, RTCP and
+// debug events, but keeps config events even if they are older than the limit.
+void DropOldEvents(uint32_t extensions_bitvector,
+ uint32_t csrcs_count,
+ unsigned int random_seed) {
+ rtc::Buffer old_rtp_packet;
+ rtc::Buffer recent_rtp_packet;
+ rtc::Buffer old_rtcp_packet;
+ rtc::Buffer recent_rtcp_packet;
+
+ VideoReceiveStream::Config receiver_config(nullptr);
+ VideoSendStream::Config sender_config(nullptr);
+
+ srand(random_seed);
+
+ // Create two RTP packets containing random data.
+ size_t packet_size = 1000 + rand() % 64;
the sun 2015/10/16 21:47:01 Avoid rand() in unit tests; it accesses global sta
+ old_rtp_packet.SetSize(packet_size);
+ GenerateRtpPacket(extensions_bitvector, csrcs_count, old_rtp_packet.data(),
+ packet_size);
+ packet_size = 1000 + rand() % 64;
+ recent_rtp_packet.SetSize(packet_size);
+ size_t recent_header_size = GenerateRtpPacket(
+ extensions_bitvector, csrcs_count, recent_rtp_packet.data(), packet_size);
+
+ // Create two RTCP packets containing random data.
+ packet_size = 1000 + rand() % 64;
+ old_rtcp_packet.SetSize(packet_size);
+ GenerateRtcpPacket(old_rtcp_packet.data(), packet_size);
+ packet_size = 1000 + rand() % 64;
+ recent_rtcp_packet.SetSize(packet_size);
+ GenerateRtcpPacket(recent_rtcp_packet.data(), packet_size);
+
+ // Create configurations for the video streams.
+ GenerateVideoReceiveConfig(extensions_bitvector, &receiver_config);
+ GenerateVideoSendConfig(extensions_bitvector, &sender_config);
+
+ // Find the name of the current test, in order to use it as a temporary
+ // filename.
+ auto test_info = ::testing::UnitTest::GetInstance()->current_test_info();
+ const std::string temp_filename =
+ test::OutputPath() + test_info->test_case_name() + test_info->name();
+
+ // The log file will be flushed to disk when the log_dumper goes out of scope.
+ {
+ rtc::scoped_ptr<RtcEventLog> log_dumper(RtcEventLog::Create());
+ // Reduce the time old events are stored to 50 ms.
+ log_dumper->SetBufferDuration(50000);
+ log_dumper->LogVideoReceiveStreamConfig(receiver_config);
+ log_dumper->LogVideoSendStreamConfig(sender_config);
+ log_dumper->LogRtpHeader(false, MediaType::AUDIO, old_rtp_packet.data(),
+ old_rtp_packet.size());
+ log_dumper->LogRtcpPacket(true, MediaType::AUDIO, old_rtcp_packet.data(),
+ old_rtcp_packet.size());
+ // Sleep 55 ms to let old events be removed from the queue.
+ rtc::Thread::SleepMs(55);
+ log_dumper->StartLogging(temp_filename, 10000000);
+ log_dumper->LogRtpHeader(true, MediaType::VIDEO, recent_rtp_packet.data(),
+ recent_rtp_packet.size());
+ log_dumper->LogRtcpPacket(false, MediaType::VIDEO,
+ recent_rtcp_packet.data(),
+ recent_rtcp_packet.size());
+ }
+
+ // Read the generated file from disk.
+ rtclog::EventStream parsed_stream;
+ ASSERT_TRUE(RtcEventLog::ParseRtcEventLog(temp_filename, &parsed_stream));
+
+ // Verify that what we read back from the event log is the same as
+ // what we wrote. Old RTP and RTCP events should have been discarded,
+ // but old configuration events should still be available.
+ EXPECT_EQ(5, parsed_stream.stream_size());
+ VerifyReceiveStreamConfig(parsed_stream.stream(0), receiver_config);
+ VerifySendStreamConfig(parsed_stream.stream(1), sender_config);
+ VerifyLogStartEvent(parsed_stream.stream(2));
+ VerifyRtpEvent(parsed_stream.stream(3), true, MediaType::VIDEO,
+ recent_rtp_packet.data(), recent_header_size,
+ recent_rtp_packet.size());
+ VerifyRtcpEvent(parsed_stream.stream(4), false, MediaType::VIDEO,
+ recent_rtcp_packet.data(), recent_rtcp_packet.size());
+
+ // Clean up temporary file - can be pretty slow.
+ remove(temp_filename.c_str());
+}
+
+TEST(RtcEventLogTest, DropOldEvents) {
+ // Enable all header extensions
+ uint32_t extensions = (1u << kNumExtensions) - 1;
+ uint32_t csrcs_count = 2;
+ DropOldEvents(extensions, csrcs_count, 141421356);
+ DropOldEvents(extensions, csrcs_count, 173205080);
+}
+
} // namespace webrtc
#endif // ENABLE_RTC_EVENT_LOG
« no previous file with comments | « webrtc/call/rtc_event_log.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698