From 27f24e61b2bcb7da616503729ead05c4520b64a3 Mon Sep 17 00:00:00 2001 From: zoff99 Date: Sun, 5 Apr 2020 12:35:02 +0200 Subject: Stop using Messenger's mono_time in bandwidth controller. We're actually still using it, but we got a private pointer now, preparing us for having a private mono_time in toxav. --- toxav/bwcontroller.c | 15 +++++++++------ toxav/bwcontroller.h | 3 ++- toxav/toxav.c | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/toxav/bwcontroller.c b/toxav/bwcontroller.c index 2af8eee8..a9018162 100644 --- a/toxav/bwcontroller.c +++ b/toxav/bwcontroller.c @@ -50,6 +50,7 @@ struct BWController_s { BWCRcvPkt rcvpkt; /* To calculate average received packet (this means split parts, not the full message!) */ uint32_t packet_loss_counted_cycles; + Mono_Time *bwc_mono_time; }; struct BWCMessage { @@ -60,7 +61,8 @@ struct BWCMessage { static int bwc_handle_data(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t length, void *object); static void send_update(BWController *bwc); -BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data) +BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, + Mono_Time *bwc_mono_time) { BWController *retu = (BWController *)calloc(sizeof(struct BWController_s), 1); LOGGER_DEBUG(m->log, "Creating bandwidth controller"); @@ -68,7 +70,8 @@ BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_ retu->mcb_user_data = mcb_user_data; retu->m = m; retu->friend_number = friendnumber; - uint64_t now = current_time_monotonic(m->mono_time); + retu->bwc_mono_time = bwc_mono_time; + uint64_t now = current_time_monotonic(bwc_mono_time); retu->cycle.last_sent_timestamp = now; retu->cycle.last_refresh_timestamp = now; retu->rcvpkt.rb = rb_new(BWC_AVG_PKT_COUNT); @@ -123,7 +126,7 @@ void bwc_add_recv(BWController *bwc, uint32_t recv_bytes) static void send_update(BWController *bwc) { if (bwc->packet_loss_counted_cycles > BWC_AVG_LOSS_OVER_CYCLES_COUNT && - current_time_monotonic(bwc->m->mono_time) - bwc->cycle.last_sent_timestamp > BWC_SEND_INTERVAL_MS) { + current_time_monotonic(bwc->bwc_mono_time) - bwc->cycle.last_sent_timestamp > BWC_SEND_INTERVAL_MS) { bwc->packet_loss_counted_cycles = 0; if (bwc->cycle.lost) { @@ -148,7 +151,7 @@ static void send_update(BWController *bwc) } } - bwc->cycle.last_sent_timestamp = current_time_monotonic(bwc->m->mono_time); + bwc->cycle.last_sent_timestamp = current_time_monotonic(bwc->bwc_mono_time); bwc->cycle.lost = 0; bwc->cycle.recv = 0; } @@ -159,12 +162,12 @@ static int on_update(BWController *bwc, const struct BWCMessage *msg) LOGGER_DEBUG(bwc->m->log, "%p Got update from peer", (void *)bwc); /* Peers sent update too soon */ - if (bwc->cycle.last_recv_timestamp + BWC_SEND_INTERVAL_MS > current_time_monotonic(bwc->m->mono_time)) { + if (bwc->cycle.last_recv_timestamp + BWC_SEND_INTERVAL_MS > current_time_monotonic(bwc->bwc_mono_time)) { LOGGER_INFO(bwc->m->log, "%p Rejecting extra update", (void *)bwc); return -1; } - bwc->cycle.last_recv_timestamp = current_time_monotonic(bwc->m->mono_time); + bwc->cycle.last_recv_timestamp = current_time_monotonic(bwc->bwc_mono_time); const uint32_t recv = msg->recv; const uint32_t lost = msg->lost; diff --git a/toxav/bwcontroller.h b/toxav/bwcontroller.h index a84898b1..7c101b02 100644 --- a/toxav/bwcontroller.h +++ b/toxav/bwcontroller.h @@ -11,7 +11,8 @@ typedef struct BWController_s BWController; typedef void m_cb(BWController *bwc, uint32_t friend_number, float todo, void *user_data); -BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data); +BWController *bwc_new(Messenger *m, uint32_t friendnumber, m_cb *mcb, void *mcb_user_data, + Mono_Time *bwc_mono_time); void bwc_kill(BWController *bwc); diff --git a/toxav/toxav.c b/toxav/toxav.c index 2d753176..3d0fe718 100644 --- a/toxav/toxav.c +++ b/toxav/toxav.c @@ -1317,7 +1317,7 @@ static bool call_prepare_transmission(ToxAVCall *call) } /* Prepare bwc */ - call->bwc = bwc_new(av->m, call->friend_number, callback_bwc, call); + call->bwc = bwc_new(av->m, call->friend_number, callback_bwc, call, av->m->mono_time); { /* Prepare audio */ call->audio = ac_new(av->m->mono_time, av->m->log, av, call->friend_number, av->acb, av->acb_user_data); -- cgit v1.2.3