Use fake clock for replay fuzzing
This speed up fuzzing because no more SleepMs in real time. Bug: chromium:959836, chromium:1009073 Change-Id: Ib00a2ff8d6ca2e0bfc706ee7469e0a9c7fb10758 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156362 Commit-Queue: Benjamin Wright <benwright@webrtc.org> Reviewed-by: Benjamin Wright <benwright@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29439}
This commit is contained in:
parent
d0704ce5c6
commit
d62ac3f0b8
@ -25,6 +25,7 @@ rtc_source_set("rtp_replayer") {
|
||||
"../../../media:rtc_internal_video_codecs",
|
||||
"../../../rtc_base:checks",
|
||||
"../../../rtc_base:rtc_base_approved",
|
||||
"../../../rtc_base:rtc_base_tests_utils",
|
||||
"../../../rtc_base:rtc_json",
|
||||
"../../../system_wrappers",
|
||||
"../../../test:call_config_utils",
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
#include "api/task_queue/default_task_queue_factory.h"
|
||||
#include "rtc_base/strings/json.h"
|
||||
#include "system_wrappers/include/clock.h"
|
||||
#include "system_wrappers/include/sleep.h"
|
||||
#include "test/call_config_utils.h"
|
||||
#include "test/encoder_settings.h"
|
||||
#include "test/fake_decoder.h"
|
||||
@ -43,6 +42,13 @@ void RtpReplayer::Replay(
|
||||
std::vector<VideoReceiveStream::Config> receive_stream_configs,
|
||||
const uint8_t* rtp_dump_data,
|
||||
size_t rtp_dump_size) {
|
||||
rtc::ScopedBaseFakeClock fake_clock;
|
||||
|
||||
// Work around: webrtc calls webrtc::Random(clock.TimeInMicroseconds())
|
||||
// everywhere and Random expects non-zero seed. Let's set the clock non-zero
|
||||
// to make them happy.
|
||||
fake_clock.SetTime(webrtc::Timestamp::ms(1));
|
||||
|
||||
// Attempt to create an RtpReader from the input file.
|
||||
auto rtp_reader = CreateRtpReader(rtp_dump_data, rtp_dump_size);
|
||||
if (rtp_reader == nullptr) {
|
||||
@ -64,7 +70,7 @@ void RtpReplayer::Replay(
|
||||
receive_stream->Start();
|
||||
}
|
||||
|
||||
ReplayPackets(call.get(), rtp_reader.get());
|
||||
ReplayPackets(&fake_clock, call.get(), rtp_reader.get());
|
||||
|
||||
for (const auto& receive_stream : stream_state->receive_streams) {
|
||||
call->DestroyVideoReceiveStream(receive_stream);
|
||||
@ -127,7 +133,9 @@ std::unique_ptr<test::RtpFileReader> RtpReplayer::CreateRtpReader(
|
||||
return rtp_reader;
|
||||
}
|
||||
|
||||
void RtpReplayer::ReplayPackets(Call* call, test::RtpFileReader* rtp_reader) {
|
||||
void RtpReplayer::ReplayPackets(rtc::FakeClock* clock,
|
||||
Call* call,
|
||||
test::RtpFileReader* rtp_reader) {
|
||||
int64_t replay_start_ms = -1;
|
||||
int num_packets = 0;
|
||||
std::map<uint32_t, int> unknown_packets;
|
||||
@ -145,8 +153,10 @@ void RtpReplayer::ReplayPackets(Call* call, test::RtpFileReader* rtp_reader) {
|
||||
|
||||
int64_t deliver_in_ms = replay_start_ms + packet.time_ms - now_ms;
|
||||
if (deliver_in_ms > 0) {
|
||||
// Set an upper limit on sleep to prevent timing out.
|
||||
SleepMs(std::min(deliver_in_ms, static_cast<int64_t>(100)));
|
||||
// StatsCounter::ReportMetricToAggregatedCounter is O(elapsed time).
|
||||
// Set an upper limit to prevent waste time.
|
||||
clock->AdvanceTime(webrtc::TimeDelta::ms(
|
||||
std::min(deliver_in_ms, static_cast<int64_t>(100))));
|
||||
}
|
||||
|
||||
++num_packets;
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "api/video_codecs/video_decoder.h"
|
||||
#include "call/call.h"
|
||||
#include "media/engine/internal_decoder_factory.h"
|
||||
#include "rtc_base/fake_clock.h"
|
||||
#include "rtc_base/time_utils.h"
|
||||
#include "test/null_transport.h"
|
||||
#include "test/rtp_file_reader.h"
|
||||
@ -78,7 +79,9 @@ class RtpReplayer final {
|
||||
size_t rtp_dump_size);
|
||||
|
||||
// Replays each packet to from the RtpDump.
|
||||
static void ReplayPackets(Call* call, test::RtpFileReader* rtp_reader);
|
||||
static void ReplayPackets(rtc::FakeClock* clock,
|
||||
Call* call,
|
||||
test::RtpFileReader* rtp_reader);
|
||||
}; // class RtpReplayer
|
||||
|
||||
} // namespace test
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user