summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorNélio Laranjeiro2012-09-11 15:41:21 +0200
committerNélio Laranjeiro2012-12-12 12:59:21 +0100
commitb95d60b83e65e7a2b9c70fa77b3f326f81d82dd1 (patch)
treeed3539b128da4f17d573b76037d5e50a03c55412 /cesar
parent70718b0cb73332c882c9163c4c9fd6b6f0d9ee8b (diff)
cesar/mac/sar: add jobs stats, refs #3344
* Count number of jobs * Count number of waiting jobs (those which does not have a buffer)
Diffstat (limited to 'cesar')
-rw-r--r--cesar/mac/sar/inc/context.h4
-rw-r--r--cesar/mac/sar/src/brg.c8
-rw-r--r--cesar/mac/sar/src/rx.c7
-rw-r--r--cesar/mac/sar/test/utest/host/src/reassembly.c13
4 files changed, 32 insertions, 0 deletions
diff --git a/cesar/mac/sar/inc/context.h b/cesar/mac/sar/inc/context.h
index ced302977e..5ac23a0d97 100644
--- a/cesar/mac/sar/inc/context.h
+++ b/cesar/mac/sar/inc/context.h
@@ -119,6 +119,10 @@ struct sar_stats_t
u32 pb_data_before_ssn_min;
/** Number of MME PB dropped because it is before the SSN min. */
u32 pb_mme_before_ssn_min;
+ /** Number of RX jobs. */
+ u32 rx_jobs_nb;
+ /** Number of RX jobs waiting for buffer/unfinished. */
+ u32 rx_jobs_waiting_nb;
};
typedef struct sar_stats_t sar_stats_t;
diff --git a/cesar/mac/sar/src/brg.c b/cesar/mac/sar/src/brg.c
index 097b38602b..8d5e9500ba 100644
--- a/cesar/mac/sar/src/brg.c
+++ b/cesar/mac/sar/src/brg.c
@@ -161,6 +161,7 @@ sar_bridge_dma_free_head (sar_t *ctx)
sar_job_mfs_t *job;
sar_job_mfs_t *jobs;
dbg_claim (ctx);
+ uint jobs_rx_nb = 0;
/* Get the ended list of jobs from the bridge DMA. */
jobs =
PARENT_OF_OR_NULL (
@@ -194,10 +195,17 @@ sar_bridge_dma_free_head (sar_t *ctx)
else if (!job->job.direction)
sar_bridge_dma_free_head_tx (ctx, job);
else
+ {
sar_bridge_dma_free_head_rx (ctx, job);
+ jobs_rx_nb ++;
+ }
blk_release (job->mfs);
/* Release the JOB only for RX jobs. TX is static. */
if (job->job.direction)
blk_release (job);
}
+ if (CONFIG_STATS)
+ {
+ ctx->stats.rx_jobs_waiting_nb -= jobs_rx_nb;
+ }
}
diff --git a/cesar/mac/sar/src/rx.c b/cesar/mac/sar/src/rx.c
index 4a0c0b7e7b..00745aee4a 100644
--- a/cesar/mac/sar/src/rx.c
+++ b/cesar/mac/sar/src/rx.c
@@ -916,11 +916,13 @@ sar_rx_mfs_process (sar_t *ctx, mfs_rx_t * mfs)
{
sar_job_mfs_t *job;
dbg_assert (mfs);
+ uint jobs_nb = 0;
/* No pending jobs. */
if (slist_empty (ctx->reassembly.jobs_pending_list., bare))
{
while ((job = sar_rx_mfs_detect_and_reconstitute_mf (ctx, mfs)))
{
+ jobs_nb ++;
u8 *buffer = bufmgr_get (ctx->bufmgr);
if (buffer)
{
@@ -944,6 +946,11 @@ sar_rx_mfs_process (sar_t *ctx, mfs_rx_t * mfs)
}
}
}
+ if (CONFIG_STATS)
+ {
+ ctx->stats.rx_jobs_nb += jobs_nb;
+ ctx->stats.rx_jobs_waiting_nb += jobs_nb;
+ }
/* No more buffer available. */
while ((job = sar_rx_mfs_detect_and_reconstitute_mf (ctx, mfs)))
sar_rx_mfs_process__queue_jobs (ctx, job);
diff --git a/cesar/mac/sar/test/utest/host/src/reassembly.c b/cesar/mac/sar/test/utest/host/src/reassembly.c
index 994aa6737c..7b6dab37b1 100644
--- a/cesar/mac/sar/test/utest/host/src/reassembly.c
+++ b/cesar/mac/sar/test/utest/host/src/reassembly.c
@@ -669,6 +669,8 @@ test_case_example (test_t test)
/* No job should be created. */
test_fail_unless (
slist_empty (t.sar->reassembly.jobs_pending_list., bare));
+ test_fail_unless (!t.sar->stats.rx_jobs_nb);
+ test_fail_unless (!t.sar->stats.rx_jobs_waiting_nb);
/* Chain the new PBs. */
mfs->head = pb_list[0];
pb_list[0]->next = pb_list[1];
@@ -687,6 +689,8 @@ test_case_example (test_t test)
test_fail_unless (job != NULL);
test_fail_unless (job->job.data_len == 940);
test_fail_unless (((pb_t*) job->job.first_pb_desc)->header.ssn == 0);
+ test_fail_unless (t.sar->stats.rx_jobs_nb == 1);
+ test_fail_unless (t.sar->stats.rx_jobs_waiting_nb == 1);
blk_release_desc_range_nb ((blk_t*) job->job.first_pb_desc,
job->pb_quantity);
@@ -798,6 +802,8 @@ test_case_reassembly_one_pb_opsf (test_t test)
job = slist_pop_front (t.sar->reassembly.jobs_pending_list., bare);
test_fail_unless (job);
test_fail_unless (job->job.data_len == ETH_PACKET_MAX_SIZE);
+ test_fail_unless (t.sar->stats.rx_jobs_nb == 1);
+ test_fail_unless (t.sar->stats.rx_jobs_waiting_nb == 1);
blk_release_desc_range_nb (job->job.first_pb_desc, job->pb_quantity);
blk_release (job->mfs);
blk_release (job);
@@ -878,6 +884,7 @@ test_case_reassembly (test_t test)
uint j;
sar_mpdu_t *mpdu;
sar_test_bitstream_change_data_t bcd;
+ uint rx_jobs_nb = 0;
sar_test_init (&t, INVALID_PTR, INVALID_PTR);
/* SAR activate. */
@@ -958,6 +965,10 @@ test_case_reassembly (test_t test)
test_fail_unless (t.rea_done.length == 60);
test_fail_unless (t.rea_done.mfs == mfs);
+ rx_jobs_nb++;
+ test_fail_unless (t.sar->stats.rx_jobs_nb == rx_jobs_nb);
+ test_fail_unless (!t.sar->stats.rx_jobs_waiting_nb);
+
/* Remove the MFS. */
sar_mfs_free_rx (t.sar, mfs);
blk_release (mfs);
@@ -1029,6 +1040,8 @@ test_case_reassembly (test_t test)
test_fail_unless (t.rea_done.mfs == &mpdu.rx.mfs->rx);
test_fail_unless (t.rea_done.encrypted == true);
test_fail_unless (mpdu.rx.mfs->rx.head == NULL);
+ test_fail_unless (t.sar->stats.rx_jobs_nb == 1);
+ test_fail_unless (t.sar->stats.rx_jobs_waiting_nb == 0);
sar_cleanup (t.sar);
sar_test_uninit (&t);