Skip to content

Commit e802cf0

Browse files
committed
minor refactor
1 parent 5e85289 commit e802cf0

File tree

5 files changed

+125
-24
lines changed

5 files changed

+125
-24
lines changed

src/internal_modules/roc_core/target_posix/roc_core/thread.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ bool Thread::enable_realtime() {
5151
memset(&param, 0, sizeof(param));
5252
param.sched_priority = sched_get_priority_max(SCHED_RR);
5353

54+
roc_log(LogDebug, "thread: set realtime priority");
5455
if (int err = pthread_setschedparam(pthread_self(), SCHED_RR, &param)) {
55-
roc_log(LogDebug,
56+
roc_log(LogError,
5657
"thread: can't set realtime priority: pthread_setschedparam(): %s",
5758
errno_to_str(err).c_str());
5859
return false;
5960
}
60-
roc_log(LogDebug, "thread: set realtime priority");
6161

6262
return true;
6363
}

src/internal_modules/roc_rtcp/reporter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,9 @@ class Reporter : public core::NonCopyable<> {
274274
: core::RefCounted<Stream, core::PoolAllocation>(pool)
275275
, source_id(source_id)
276276
, has_remote_recv_report(false)
277-
, remote_recv_rtt(arena, rtt_config, dumper)
277+
, remote_recv_rtt(rtt_config, arena, dumper)
278278
, has_remote_send_report(false)
279-
, remote_send_rtt(arena, rtt_config, dumper)
279+
, remote_send_rtt(rtt_config, arena, dumper)
280280
, local_recv_report(NULL)
281281
, last_update(report_time)
282282
, last_local_sr(0)

src/internal_modules/roc_rtcp/rtt_estimator.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,15 @@
1212
namespace roc {
1313
namespace rtcp {
1414

15-
RttEstimator::RttEstimator(core::IArena& arena,
16-
const RttConfig& config,
17-
dbgio::CsvDumper* dumper)
15+
RttEstimator::RttEstimator(const RttConfig &config, core::IArena &arena, dbgio::CsvDumper *dumper)
1816
: config_(config)
1917
, metrics_()
2018
, has_metrics_(false)
2119
, first_report_ts_(0)
2220
, last_report_ts_(0)
2321
, dumper_(dumper)
24-
, rtt_stats_(arena, 15, 0.5)
25-
, clock_offset_stats_(arena, 100, 0.5) {
22+
, rtt_stats_(arena, config.rtt_winlen, 0.5)
23+
, clock_offset_stats_(arena, config.clock_offset_winlen, 0.5) {
2624
}
2725

2826
bool RttEstimator::has_metrics() const {

src/internal_modules/roc_rtcp/rtt_estimator.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,18 @@ struct RttConfig {
2626
//! All metrics below are computed for a sliding window of this length.
2727
core::nanoseconds_t interval_duration;
2828

29+
//! How many measurements of RTT is used
30+
//! to find median value.
31+
size_t rtt_winlen;
32+
33+
//! How many measurements of RTT is used
34+
//! to find median value.
35+
size_t clock_offset_winlen;
36+
2937
RttConfig()
30-
: interval_duration(core::Second * 5) {
38+
: interval_duration(core::Second * 5)
39+
, rtt_winlen(15)
40+
, clock_offset_winlen(100) {
3141
}
3242
};
3343

@@ -53,7 +63,7 @@ struct RttMetrics {
5363
class RttEstimator {
5464
public:
5565
//! Initialize.
56-
RttEstimator(core::IArena& arena, const RttConfig& config, dbgio::CsvDumper* dumper);
66+
RttEstimator(const RttConfig &config, core::IArena &arena, dbgio::CsvDumper *dumper);
5767

5868
//! Check whether metrics are already available.
5969
bool has_metrics() const;

src/tests/roc_rtcp/test_communicator.cpp

Lines changed: 106 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -438,15 +438,15 @@ void expect_recv_report(const RecvReport& report,
438438
}
439439
}
440440

441-
packet::PacketPtr read_packet(packet::FifoQueue& source, core::nanoseconds_t ts = -1) {
441+
packet::PacketPtr read_packet(packet::FifoQueue& source, core::nanoseconds_t recv_ts = -1) {
442442
CHECK(source.size() != 0);
443443
packet::PacketPtr pp;
444444
LONGS_EQUAL(status::StatusOK, source.read(pp, packet::ModeFetch));
445445
CHECK(pp);
446446
CHECK(pp->rtcp());
447447
CHECK(pp->rtcp()->payload);
448-
if (ts >= 0) {
449-
pp->udp()->receive_timestamp = ts;
448+
if (recv_ts >= 0) {
449+
pp->udp()->receive_timestamp = recv_ts;
450450
}
451451
roc_log(LogTrace, "delivering rtcp packet");
452452
if (core::Logger::instance().get_level() >= LogTrace) {
@@ -3107,7 +3107,7 @@ TEST(communicator, report_to_address_sender) {
31073107
CHECK_EQUAL(1, send_comm.total_destinations());
31083108
CHECK_EQUAL(1, send_queue.size());
31093109

3110-
pp = read_packet(send_queue, send_time);
3110+
pp = read_packet(send_queue);
31113111
expect_has_dest_address(pp, send_dest_addr);
31123112
expect_has_orig_ssrc(pp, SendSsrc, true);
31133113
expect_has_dest_ssrc(pp, Recv1Ssrc, true);
@@ -3279,7 +3279,7 @@ TEST(communicator, report_back_sender) {
32793279
CHECK_EQUAL(1, send_comm.total_destinations());
32803280
CHECK_EQUAL(1, send_queue.size());
32813281

3282-
pp = read_packet(send_queue, send_time);
3282+
pp = read_packet(send_queue);
32833283
expect_has_dest_address(pp, recv1_addr);
32843284
expect_has_orig_ssrc(pp, SendSsrc, true);
32853285
expect_has_dest_ssrc(pp, Recv1Ssrc, true);
@@ -3320,13 +3320,13 @@ TEST(communicator, report_back_sender) {
33203320
CHECK_EQUAL(2, send_comm.total_destinations());
33213321
CHECK_EQUAL(2, send_queue.size());
33223322

3323-
pp = read_packet(send_queue, send_time);
3323+
pp = read_packet(send_queue);
33243324
expect_has_dest_address(pp, recv1_addr);
33253325
expect_has_orig_ssrc(pp, SendSsrc, true);
33263326
expect_has_dest_ssrc(pp, Recv1Ssrc, true);
33273327
expect_has_dest_ssrc(pp, Recv2Ssrc, false);
33283328

3329-
pp = read_packet(send_queue, send_time);
3329+
pp = read_packet(send_queue);
33303330
expect_has_dest_address(pp, recv2_addr);
33313331
expect_has_orig_ssrc(pp, SendSsrc, true);
33323332
expect_has_dest_ssrc(pp, Recv1Ssrc, false);
@@ -3423,7 +3423,7 @@ TEST(communicator, report_back_receiver) {
34233423
CHECK_EQUAL(1, recv_comm.total_destinations());
34243424
CHECK_EQUAL(1, recv_queue.size());
34253425

3426-
pp = read_packet(recv_queue, send1_time);
3426+
pp = read_packet(recv_queue);
34273427
expect_has_dest_address(pp, send1_addr);
34283428
expect_has_orig_ssrc(pp, RecvSsrc, true);
34293429
expect_has_dest_ssrc(pp, Send1Ssrc, true);
@@ -3469,13 +3469,13 @@ TEST(communicator, report_back_receiver) {
34693469
CHECK_EQUAL(2, recv_comm.total_destinations());
34703470
CHECK_EQUAL(2, recv_queue.size());
34713471

3472-
pp = read_packet(recv_queue, recv_time);
3472+
pp = read_packet(recv_queue);
34733473
expect_has_dest_address(pp, send1_addr);
34743474
expect_has_orig_ssrc(pp, RecvSsrc, true);
34753475
expect_has_dest_ssrc(pp, Send1Ssrc, true);
34763476
expect_has_dest_ssrc(pp, Send2Ssrc, false);
34773477

3478-
pp = read_packet(recv_queue, recv_time);
3478+
pp = read_packet(recv_queue);
34793479
expect_has_dest_address(pp, send2_addr);
34803480
expect_has_orig_ssrc(pp, RecvSsrc, true);
34813481
expect_has_dest_ssrc(pp, Send1Ssrc, false);
@@ -3606,14 +3606,14 @@ TEST(communicator, report_back_combine_reports) {
36063606
CHECK_EQUAL(2, recv_comm.total_destinations());
36073607
CHECK_EQUAL(2, recv_queue.size());
36083608

3609-
pp = read_packet(recv_queue, send3_time);
3609+
pp = read_packet(recv_queue);
36103610
expect_has_dest_address(pp, send1_addr);
36113611
expect_has_orig_ssrc(pp, RecvSsrc, true);
36123612
expect_has_dest_ssrc(pp, Send1Ssrc, true);
36133613
expect_has_dest_ssrc(pp, Send2Ssrc, true);
36143614
expect_has_dest_ssrc(pp, Send3Ssrc, false);
36153615

3616-
pp = read_packet(recv_queue, send3_time);
3616+
pp = read_packet(recv_queue);
36173617
expect_has_dest_address(pp, send3_addr);
36183618
expect_has_orig_ssrc(pp, RecvSsrc, true);
36193619
expect_has_dest_ssrc(pp, Send1Ssrc, false);
@@ -3832,6 +3832,99 @@ TEST(communicator, rtt) {
38323832
}
38333833
}
38343834

3835+
// Same, but there is a persistent clock drift between sender and receiver
3836+
TEST(communicator, rtt_clock_drift) {
3837+
enum { SendSsrc = 11, RecvSsrc = 22, NumIters = 200 };
3838+
3839+
const char* SendCname = "send_cname";
3840+
const char* RecvCname = "recv_cname";
3841+
3842+
const core::nanoseconds_t SendStartTime = 10000000000000000;
3843+
const core::nanoseconds_t RecvStartTime = 30000000000000000;
3844+
3845+
const core::nanoseconds_t ReportInterval = 500 * core::Millisecond;
3846+
const core::nanoseconds_t Rtt = 200 * core::Millisecond;
3847+
const core::nanoseconds_t Drift = 1 * core::Millisecond;
3848+
3849+
Config config;
3850+
config.rtt.rtt_winlen = 1; // Disable smoothing
3851+
config.rtt.clock_offset_winlen = 1;
3852+
3853+
packet::FifoQueue send_queue;
3854+
MockParticipant send_part(SendCname, SendSsrc, Report_ToAddress);
3855+
Communicator send_comm(config, send_part, send_queue, composer, packet_factory, arena,
3856+
NULL);
3857+
LONGS_EQUAL(status::StatusOK, send_comm.init_status());
3858+
3859+
packet::FifoQueue recv_queue;
3860+
MockParticipant recv_part(RecvCname, RecvSsrc, Report_Back);
3861+
Communicator recv_comm(config, recv_part, recv_queue, composer, packet_factory, arena,
3862+
NULL);
3863+
LONGS_EQUAL(status::StatusOK, recv_comm.init_status());
3864+
3865+
core::nanoseconds_t send_time = SendStartTime;
3866+
core::nanoseconds_t recv_time = RecvStartTime;
3867+
3868+
for (int iter = 0; iter < NumIters; iter++) {
3869+
// Generate sender report
3870+
send_part.set_send_report(make_send_report(send_time, SendCname, SendSsrc, Seed));
3871+
LONGS_EQUAL(status::StatusOK, send_comm.generate_reports(send_time));
3872+
CHECK_EQUAL(1, send_queue.size());
3873+
3874+
advance_time(send_time, Rtt / 2);
3875+
advance_time(recv_time, Rtt / 2);
3876+
3877+
// Deliver sender report to receiver
3878+
if (iter != 0) {
3879+
recv_part.set_recv_report(
3880+
0, make_recv_report(recv_time, RecvCname, RecvSsrc, SendSsrc, Seed));
3881+
}
3882+
LONGS_EQUAL(status::StatusOK,
3883+
recv_comm.process_packet(read_packet(send_queue, recv_time)));
3884+
3885+
{
3886+
// Check metrics on receiver
3887+
const SendReport report = recv_part.next_send_notification();
3888+
if (iter != 0) {
3889+
expect_timestamp("receiver rtt", Rtt, report.rtt, RttEpsilon + Drift);
3890+
expect_timestamp("receiver clock_offset",
3891+
SendStartTime + (Drift * iter) - RecvStartTime,
3892+
report.clock_offset, RttEpsilon + Drift);
3893+
}
3894+
}
3895+
3896+
advance_time(send_time, ReportInterval / 2 + Drift);
3897+
advance_time(recv_time, ReportInterval / 2);
3898+
3899+
// Generate receiver report
3900+
recv_part.set_recv_report(
3901+
0, make_recv_report(recv_time, RecvCname, RecvSsrc, SendSsrc, Seed));
3902+
LONGS_EQUAL(status::StatusOK, recv_comm.generate_reports(recv_time));
3903+
CHECK_EQUAL(1, recv_queue.size());
3904+
3905+
advance_time(send_time, Rtt / 2);
3906+
advance_time(recv_time, Rtt / 2);
3907+
3908+
// Deliver receiver report to sender
3909+
send_part.set_send_report(make_send_report(send_time, SendCname, SendSsrc, Seed));
3910+
LONGS_EQUAL(status::StatusOK,
3911+
send_comm.process_packet(read_packet(recv_queue, send_time)));
3912+
3913+
{
3914+
// Check metrics on sender
3915+
const RecvReport report = send_part.next_recv_notification();
3916+
3917+
expect_timestamp("sender rtt", Rtt, report.rtt, RttEpsilon + Drift);
3918+
expect_timestamp("sender clock_offset",
3919+
RecvStartTime - SendStartTime - (Drift * iter),
3920+
report.clock_offset, RttEpsilon + Drift);
3921+
}
3922+
3923+
advance_time(send_time, ReportInterval / 2);
3924+
advance_time(recv_time, ReportInterval / 2);
3925+
}
3926+
}
3927+
38353928
// Same, but there is persistent network jitter
38363929
TEST(communicator, rtt_network_jitter) {
38373930
enum { SendSsrc = 11, RecvSsrc = 22, NumIters = 200 };
@@ -4269,7 +4362,7 @@ TEST(communicator, rtt_network_reordering) {
42694362
recv_reorder_countdown = ReorderBurst;
42704363
}
42714364
recv_reorder_countdown--;
4272-
packet::PacketPtr pp = read_packet(recv_queue, recv_time);
4365+
packet::PacketPtr pp = read_packet(recv_queue);
42734366
recv_packet_stash.push_back(*pp);
42744367
}
42754368

0 commit comments

Comments
 (0)