diff --git a/srsenb/test/mac/sched_test_rand.cc b/srsenb/test/mac/sched_test_rand.cc index 3d60163a9..c088a21fc 100644 --- a/srsenb/test/mac/sched_test_rand.cc +++ b/srsenb/test/mac/sched_test_rand.cc @@ -59,10 +59,14 @@ using srslte::tti_point; uint32_t const seed = std::chrono::system_clock::now().time_since_epoch().count(); struct ue_stats_t { - uint64_t nof_dl_rbs = 0; - uint64_t nof_ul_rbs = 0; + uint32_t nof_dl_rbs = 0; + uint32_t nof_ul_rbs = 0; + uint64_t nof_dl_bytes = 0; + uint64_t nof_ul_bytes = 0; + uint32_t nof_ttis = 0; }; std::map ue_stats; +ue_stats_t ue_tot_stats; /******************* * Logging * @@ -77,8 +81,18 @@ public: void log_diagnostics() override { info("UE stats:\n"); + info("all: {DL/UL RBs: %" PRIu32 "/%" PRIu32 ", DL/UL bitrates: %0.2f/%0.2f Mbps}\n", + ue_tot_stats.nof_dl_rbs, + ue_tot_stats.nof_ul_rbs, + ue_tot_stats.nof_dl_bytes * 8 * 0.001 / ue_tot_stats.nof_ttis, + ue_tot_stats.nof_ul_bytes * 8 * 0.001 / ue_tot_stats.nof_ttis); for (auto& e : ue_stats) { - info("0x%x: {DL RBs: %" PRIu64 ", UL RBs: %" PRIu64 "}\n", e.first, e.second.nof_dl_rbs, e.second.nof_ul_rbs); + info("0x%x: {DL/UL RBs: %" PRIu32 "/%" PRIu32 ", DL/UL bitrates: %0.2f/%0.2f Mbps}\n", + e.first, + e.second.nof_dl_rbs, + e.second.nof_ul_rbs, + e.second.nof_dl_bytes * 8 * 0.001 / e.second.nof_ttis, + e.second.nof_ul_bytes * 8 * 0.001 / e.second.nof_ttis); } info("Number of assertion warnings: %u\n", warn_counter); info("Number of assertion errors: %u\n", error_counter); @@ -270,24 +284,37 @@ int sched_tester::update_ue_stats() { // update ue stats with number of allocated UL PRBs for (uint32_t i = 0; i < tti_info.ul_sched_result[CARRIER_IDX].nof_dci_elems; ++i) { - uint32_t L, RBstart; - srslte_ra_type2_from_riv(tti_info.ul_sched_result[CARRIER_IDX].pusch[i].dci.type2_alloc.riv, + const auto& pusch = tti_info.ul_sched_result[CARRIER_IDX].pusch[i]; + uint32_t L, RBstart; + srslte_ra_type2_from_riv(pusch.dci.type2_alloc.riv, &L, &RBstart, sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb, sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb); - ue_stats[tti_info.ul_sched_result[CARRIER_IDX].pusch[i].dci.rnti].nof_ul_rbs += L; + ue_stats[pusch.dci.rnti].nof_ul_rbs += L; + ue_stats[pusch.dci.rnti].nof_ul_bytes += pusch.tbs; + ue_tot_stats.nof_ul_rbs += L; + ue_tot_stats.nof_ul_bytes += pusch.tbs; } // update ue stats with number of DL RB allocations srslte::bounded_bitset<100, true> alloc_mask(sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb); for (uint32_t i = 0; i < tti_info.dl_sched_result[CARRIER_IDX].nof_data_elems; ++i) { + auto& data = tti_info.dl_sched_result[CARRIER_IDX].data[i]; TESTASSERT(srsenb::extract_dl_prbmask(sched_cell_params[CARRIER_IDX].cfg.cell, tti_info.dl_sched_result[CARRIER_IDX].data[i].dci, alloc_mask) == SRSLTE_SUCCESS); - ue_stats[tti_info.dl_sched_result[CARRIER_IDX].data[i].dci.rnti].nof_dl_rbs += alloc_mask.count(); + ue_stats[data.dci.rnti].nof_dl_rbs += alloc_mask.count(); + ue_stats[data.dci.rnti].nof_dl_bytes += data.tbs[0] + data.tbs[1]; + ue_tot_stats.nof_dl_rbs += alloc_mask.count(); + ue_tot_stats.nof_dl_bytes += data.tbs[0] + data.tbs[1]; } + for (auto& u : ue_db) { + ue_stats[u.first].nof_ttis++; + } + ue_tot_stats.nof_ttis++; + return SRSLTE_SUCCESS; }