From c8aea1b97021f45372ac1fa33b71dee599e6047f Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 18 Aug 2025 11:21:31 +0200 Subject: [PATCH] T: replace 'subframe' by 'tick' Some code in T tracers is used by both LTE and NR. In LTE, we expect 10 subframes per frame, and the logging is done with this assumption. We have one tick per subframe. In NR, we deal with slots, not subframes. And we have n ticks per frame (depending on mu). As of today, only n=20 is tested (corresponding to mu=1). A previous commit introduced 'subframes_per_frame' which had the correct meaning for LTE but was truly 'slots per frame' for NR. This creates confusion. Let's replace 'subframe' by 'tick' to reduce confusion. --- common/utils/T/tracer/logger/logger.h | 4 +- common/utils/T/tracer/logger/throughputlog.c | 70 ++++++++++---------- common/utils/T/tracer/view/scrolltti.c | 42 ++++++------ common/utils/T/tracer/view/tti.c | 32 ++++----- common/utils/T/tracer/view/view.h | 4 +- 5 files changed, 76 insertions(+), 76 deletions(-) diff --git a/common/utils/T/tracer/logger/logger.h b/common/utils/T/tracer/logger/logger.h index 8508032ec0..b78fa1b359 100644 --- a/common/utils/T/tracer/logger/logger.h +++ b/common/utils/T/tracer/logger/logger.h @@ -15,8 +15,8 @@ logger *new_ticked_ttilog(void *event_handler, void *database, char *event_name, char *data_varname, int convert_to_dB, float empty_value); logger *new_throughputlog(void *event_handler, void *database, - char *tick_event_name, char *frame_varname, char *subframe_varname, - char *event_name, char *data_varname, int subframes_per_frame); + char *tick_event_name, char *frame_varname, char *tick_varname, + char *event_name, char *data_varname, int ticks_per_frame); logger *new_timelog(void *event_handler, void *database, char *event_name); logger *new_ticklog(void *event_handler, void *database, char *event_name, char *frame_name, char *subframe_name); diff --git a/common/utils/T/tracer/logger/throughputlog.c b/common/utils/T/tracer/logger/throughputlog.c index e7b48f6e2f..5f066df343 100644 --- a/common/utils/T/tracer/logger/throughputlog.c +++ b/common/utils/T/tracer/logger/throughputlog.c @@ -13,13 +13,13 @@ struct throughputlog { struct logger common; void *database; int tick_frame_arg; - int tick_subframe_arg; + int tick_tick_arg; int data_frame_arg; - int data_subframe_arg; + int data_tick_arg; int data_arg; int last_tick_frame; - int last_tick_subframe; - int subframes_per_frame; + int last_tick_tick; + int ticks_per_frame; unsigned long *bits; unsigned long total; int insert_point; @@ -33,16 +33,16 @@ static void _event(void *p, event e) { struct throughputlog *l = p; int frame; - int subframe; + int tick; unsigned long value; if (l->common.filter != NULL && filter_eval(l->common.filter, e) == 0) return; frame = e.e[l->data_frame_arg].i; - subframe = e.e[l->data_subframe_arg].i; + tick = e.e[l->data_tick_arg].i; - if (frame != l->last_tick_frame || subframe != l->last_tick_subframe) { + if (frame != l->last_tick_frame || tick != l->last_tick_tick) { printf("WARNING: %s:%d: data comes without previous tick!\n", __FILE__, __LINE__); return; @@ -63,24 +63,24 @@ static void _tick_event(void *p, event e) struct throughputlog *l = p; int i; int frame; - int subframe; + int tick; if (l->tick_filter != NULL && filter_eval(l->tick_filter, e) == 0) return; frame = e.e[l->tick_frame_arg].i; - subframe = e.e[l->tick_subframe_arg].i; + tick = e.e[l->tick_tick_arg].i; for (i = 0; i < l->common.vsize; i++) - l->common.v[i]->append(l->common.v[i], frame, subframe, (double)l->total); + l->common.v[i]->append(l->common.v[i], frame, tick, (double)l->total); - while (l->last_tick_frame != frame || l->last_tick_subframe != subframe) { - l->insert_point = (l->insert_point + 1) % (100 * l->subframes_per_frame); + while (l->last_tick_frame != frame || l->last_tick_tick != tick) { + l->insert_point = (l->insert_point + 1) % (100 * l->ticks_per_frame); l->total -= l->bits[l->insert_point]; l->bits[l->insert_point] = 0; - l->last_tick_subframe++; - if (l->last_tick_subframe == l->subframes_per_frame) { - l->last_tick_subframe = 0; + l->last_tick_tick++; + if (l->last_tick_tick == l->ticks_per_frame) { + l->last_tick_tick = 0; l->last_tick_frame++; l->last_tick_frame %= 1024; } @@ -89,8 +89,8 @@ static void _tick_event(void *p, event e) } logger *new_throughputlog(event_handler *h, void *database, - char *tick_event_name, char *frame_varname, char *subframe_varname, - char *event_name, char *data_varname, int subframes_per_frame) + char *tick_event_name, char *frame_varname, char *tick_varname, + char *event_name, char *data_varname, int ticks_per_frame) { struct throughputlog *ret; int event_id; @@ -113,21 +113,21 @@ logger *new_throughputlog(event_handler *h, void *database, f = get_format(database, event_id); - /* look for frame and subframe */ + /* look for frame and tick */ ret->tick_frame_arg = -1; - ret->tick_subframe_arg = -1; + ret->tick_tick_arg = -1; for (i = 0; i < f.count; i++) { if (!strcmp(f.name[i], frame_varname)) ret->tick_frame_arg = i; - if (!strcmp(f.name[i], subframe_varname)) ret->tick_subframe_arg = i; + if (!strcmp(f.name[i], tick_varname)) ret->tick_tick_arg = i; } if (ret->tick_frame_arg == -1) { printf("%s:%d: frame argument '%s' not found in event '%s'\n", __FILE__, __LINE__, frame_varname, event_name); abort(); } - if (ret->tick_subframe_arg == -1) { - printf("%s:%d: subframe argument '%s' not found in event '%s'\n", - __FILE__, __LINE__, subframe_varname, event_name); + if (ret->tick_tick_arg == -1) { + printf("%s:%d: tick argument '%s' not found in event '%s'\n", + __FILE__, __LINE__, tick_varname, event_name); abort(); } if (strcmp(f.type[ret->tick_frame_arg], "int") != 0) { @@ -135,9 +135,9 @@ logger *new_throughputlog(event_handler *h, void *database, __FILE__, __LINE__, frame_varname); abort(); } - if (strcmp(f.type[ret->tick_subframe_arg], "int") != 0) { + if (strcmp(f.type[ret->tick_tick_arg], "int") != 0) { printf("%s:%d: argument '%s' has wrong type (should be 'int')\n", - __FILE__, __LINE__, subframe_varname); + __FILE__, __LINE__, tick_varname); abort(); } @@ -148,13 +148,13 @@ logger *new_throughputlog(event_handler *h, void *database, f = get_format(database, event_id); - /* look for frame, subframe and data args */ + /* look for frame, tick and data args */ ret->data_frame_arg = -1; - ret->data_subframe_arg = -1; + ret->data_tick_arg = -1; ret->data_arg = -1; for (i = 0; i < f.count; i++) { if (!strcmp(f.name[i], frame_varname)) ret->data_frame_arg = i; - if (!strcmp(f.name[i], subframe_varname)) ret->data_subframe_arg = i; + if (!strcmp(f.name[i], tick_varname)) ret->data_tick_arg = i; if (!strcmp(f.name[i], data_varname)) ret->data_arg = i; } if (ret->data_frame_arg == -1) { @@ -162,9 +162,9 @@ logger *new_throughputlog(event_handler *h, void *database, __FILE__, __LINE__, frame_varname, event_name); abort(); } - if (ret->data_subframe_arg == -1) { - printf("%s:%d: subframe argument '%s' not found in event '%s'\n", - __FILE__, __LINE__, subframe_varname, event_name); + if (ret->data_tick_arg == -1) { + printf("%s:%d: tick argument '%s' not found in event '%s'\n", + __FILE__, __LINE__, tick_varname, event_name); abort(); } if (ret->data_arg == -1) { @@ -177,9 +177,9 @@ logger *new_throughputlog(event_handler *h, void *database, __FILE__, __LINE__, frame_varname); abort(); } - if (strcmp(f.type[ret->data_subframe_arg], "int") != 0) { + if (strcmp(f.type[ret->data_tick_arg], "int") != 0) { printf("%s:%d: argument '%s' has wrong type (should be 'int')\n", - __FILE__, __LINE__, subframe_varname); + __FILE__, __LINE__, tick_varname); abort(); } if (strcmp(f.type[ret->data_arg], "int") != 0 && @@ -190,8 +190,8 @@ logger *new_throughputlog(event_handler *h, void *database, abort(); } - ret->subframes_per_frame = subframes_per_frame; - ret->bits = calloc(100 * subframes_per_frame, sizeof(unsigned long)); + ret->ticks_per_frame = ticks_per_frame; + ret->bits = calloc(100 * ticks_per_frame, sizeof(unsigned long)); if (ret->bits == NULL) abort(); return ret; diff --git a/common/utils/T/tracer/view/scrolltti.c b/common/utils/T/tracer/view/scrolltti.c index 66fe0b3f02..3bf1c93bd2 100644 --- a/common/utils/T/tracer/view/scrolltti.c +++ b/common/utils/T/tracer/view/scrolltti.c @@ -15,14 +15,14 @@ struct scrolltti { int plot; float refresh_rate; pthread_mutex_t lock; - int subframes_per_frame; + int ticks_per_frame; unsigned long *data; unsigned long total; /* sum data[0..n] to have smoother value printed */ float *xout; float *yout; int insert_point; int next_tick_frame; - int next_tick_subframe; + int next_tick_tick; }; /* this array is used to get Y range 1000, 2000, 5000, 10000, ... */ @@ -41,21 +41,21 @@ static void *scrolltti_thread(void *_this) /* TODO: optimize */ p = this->insert_point; max = 0; - for (i = 0; i < this->subframes_per_frame * 100; i++) { + for (i = 0; i < this->ticks_per_frame * 100; i++) { this->xout[i] = i; this->yout[i] = this->data[p]; if (this->data[p] > max) max = this->data[p]; - p = (p + 1) % (this->subframes_per_frame * 100); + p = (p + 1) % (this->ticks_per_frame * 100); } - bps(o, this->total/(this->subframes_per_frame * 100.), "b/s"); + bps(o, this->total/(this->ticks_per_frame * 100.), "b/s"); textarea_set_text(this->g, this->throughput_textarea, o); /* for Y range we want 1000, 2000, 5000, 10000, 20000, 50000, etc. */ if (max < 1000) max = 1000; mlog = pow(10, floor(log10(max))); max = tolog[(int)ceil(max/mlog)] * mlog; - xy_plot_set_range(this->g, this->w, 0, this->subframes_per_frame * 100, 0, max); + xy_plot_set_range(this->g, this->w, 0, this->ticks_per_frame * 100, 0, max); xy_plot_set_points(this->g, this->w, this->plot, - this->subframes_per_frame * 100, this->xout, this->yout); + this->ticks_per_frame * 100, this->xout, this->yout); if (pthread_mutex_unlock(&this->lock)) abort(); sleepms(1000/this->refresh_rate); } @@ -73,35 +73,35 @@ static void insert(struct scrolltti *this, double value) this->total -= this->data[this->insert_point]; this->data[this->insert_point] = value; this->total += this->data[this->insert_point]; - this->insert_point = (this->insert_point + 1) % (this->subframes_per_frame * 100); + this->insert_point = (this->insert_point + 1) % (this->ticks_per_frame * 100); } -static void next_subframe(struct scrolltti *this) +static void next_tick(struct scrolltti *this) { - this->next_tick_subframe++; - if (this->next_tick_subframe == this->subframes_per_frame) { - this->next_tick_subframe = 0; + this->next_tick_tick++; + if (this->next_tick_tick == this->ticks_per_frame) { + this->next_tick_tick = 0; this->next_tick_frame++; this->next_tick_frame %= 1024; } } -static void append(view *_this, int frame, int subframe, double value) +static void append(view *_this, int frame, int tick, double value) { struct scrolltti *this = (struct scrolltti *)_this; if (pthread_mutex_lock(&this->lock)) abort(); - while (this->next_tick_frame != frame || this->next_tick_subframe != subframe) { + while (this->next_tick_frame != frame || this->next_tick_tick != tick) { insert(this, 0); - next_subframe(this); + next_tick(this); } insert(this, value); - next_subframe(this); + next_tick(this); if (pthread_mutex_unlock(&this->lock)) abort(); } view *new_view_scrolltti(float refresh_rate, gui *g, widget *w, int color, - widget *throughput_textarea, int subframes_per_frame) + widget *throughput_textarea, int ticks_per_frame) { struct scrolltti *ret = calloc(1, sizeof(struct scrolltti)); if (ret == NULL) abort(); @@ -115,12 +115,12 @@ view *new_view_scrolltti(float refresh_rate, gui *g, widget *w, int color, ret->throughput_textarea = throughput_textarea; ret->plot = xy_plot_new_plot(g, w, color); - ret->subframes_per_frame = subframes_per_frame; - ret->data = calloc(subframes_per_frame * 100, sizeof(unsigned long)); + ret->ticks_per_frame = ticks_per_frame; + ret->data = calloc(ticks_per_frame * 100, sizeof(unsigned long)); if (ret->data == NULL) abort(); - ret->xout = calloc(subframes_per_frame * 100, sizeof(float)); + ret->xout = calloc(ticks_per_frame * 100, sizeof(float)); if (ret->xout == NULL) abort(); - ret->yout = calloc(subframes_per_frame * 100, sizeof(float)); + ret->yout = calloc(ticks_per_frame * 100, sizeof(float)); if (ret->yout == NULL) abort(); if (pthread_mutex_init(&ret->lock, NULL)) abort(); diff --git a/common/utils/T/tracer/view/tti.c b/common/utils/T/tracer/view/tti.c index 6c352d08d5..73d43b539b 100644 --- a/common/utils/T/tracer/view/tti.c +++ b/common/utils/T/tracer/view/tti.c @@ -21,20 +21,20 @@ struct tti { float *xout; float *yout; int last_insert_point; - int subframes_per_frame; + int ticks_per_frame; }; static int far_enough(int i, int last_insert, int plot_width, - int subframes_per_frame) + int ticks_per_frame) { int p1; int p2; int hole_size_px; int hole_size_tti; hole_size_px = 10; - hole_size_tti = 1024 * subframes_per_frame * hole_size_px / plot_width; + hole_size_tti = 1024 * ticks_per_frame * hole_size_px / plot_width; p1 = last_insert; - p2 = (last_insert + hole_size_tti) % (1024 * subframes_per_frame); + p2 = (last_insert + hole_size_tti) % (1024 * ticks_per_frame); if (p1 < p2) { return !(i > p1 && i < p2); } @@ -55,11 +55,11 @@ static void *tti_thread(void *_this) length = 0; double max = 0; /* TODO: optimize */ - for (i = 0; i < 1024 * this->subframes_per_frame; i++) + for (i = 0; i < 1024 * this->ticks_per_frame; i++) /* do not take points too close after last insertion point */ if (this->valid[i] && far_enough(i, this->last_insert_point, plot_width, - this->subframes_per_frame)) { + this->ticks_per_frame)) { this->xout[length] = i; this->yout[length] = this->data[i]; if (this->data[i] > max) max = this->data[i]; @@ -92,11 +92,11 @@ static void clear(view *this) /* TODO */ } -static void append(view *_this, int frame, int subframe, double value) +static void append(view *_this, int frame, int tick, double value) { struct tti *this = (struct tti *)_this; int i; - int index = frame * this->subframes_per_frame + subframe; + int index = frame * this->ticks_per_frame + tick; if (pthread_mutex_lock(&this->lock)) abort(); @@ -105,10 +105,10 @@ static void append(view *_this, int frame, int subframe, double value) * this may be wrong if delay between two append is * greater than 1024 frames (something like that) */ - i = (this->last_insert_point + 1) % (1024 * this->subframes_per_frame); + i = (this->last_insert_point + 1) % (1024 * this->ticks_per_frame); while (i != index) { this->valid[i] = 0; - i = (i + 1) % (1024 * this->subframes_per_frame); + i = (i + 1) % (1024 * this->ticks_per_frame); } this->data[index] = value; @@ -120,7 +120,7 @@ static void append(view *_this, int frame, int subframe, double value) } view *new_view_tti(float refresh_rate, gui *g, widget *w, int color, - int subframes_per_frame) + int ticks_per_frame) { struct tti *ret = calloc(1, sizeof(struct tti)); if (ret == NULL) abort(); @@ -137,14 +137,14 @@ view *new_view_tti(float refresh_rate, gui *g, widget *w, int color, if (pthread_mutex_init(&ret->lock, NULL)) abort(); - ret->subframes_per_frame = subframes_per_frame; - ret->data = calloc(subframes_per_frame * 1024, sizeof(float)); + ret->ticks_per_frame = ticks_per_frame; + ret->data = calloc(ticks_per_frame * 1024, sizeof(float)); if (ret->data == NULL) abort(); - ret->valid = calloc(subframes_per_frame * 1024, sizeof(int)); + ret->valid = calloc(ticks_per_frame * 1024, sizeof(int)); if (ret->valid == NULL) abort(); - ret->xout = calloc(subframes_per_frame * 1024, sizeof(float)); + ret->xout = calloc(ticks_per_frame * 1024, sizeof(float)); if (ret->xout == NULL) abort(); - ret->yout = calloc(subframes_per_frame * 1024, sizeof(float)); + ret->yout = calloc(ticks_per_frame * 1024, sizeof(float)); if (ret->yout == NULL) abort(); new_thread(tti_thread, ret); diff --git a/common/utils/T/tracer/view/view.h b/common/utils/T/tracer/view/view.h index 7f131efbb5..bc37e654d1 100644 --- a/common/utils/T/tracer/view/view.h +++ b/common/utils/T/tracer/view/view.h @@ -18,9 +18,9 @@ view *new_view_textlist(int maxsize, float refresh_rate, gui *g, widget *w); view *new_view_xy(int length, float refresh_rate, gui *g, widget *w, int color, enum xy_mode mode); view *new_view_tti(float refresh_rate, gui *g, widget *w, int color, - int subframes_per_frame); + int ticks_per_frame); view *new_view_scrolltti(float refresh_rate, gui *g, widget *w, - int color, widget *throughput_label, int subframes_per_frame); + int color, widget *throughput_label, int ticks_per_frame); view *new_view_time(int number_of_seconds, float refresh_rate, gui *g, widget *w); view *new_subview_time(view *time, int line, int color, int size);