From 421aac43a03263b3564cbc83b82e19bb3642728f Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Tue, 17 May 2016 12:26:53 +0200
Subject: [PATCH] add skip_delay parameter to the framelog

not very clean, might be reworked at some point
the idea is to compute much less 'log' than what
was done
---
 common/utils/T/tracer/logger/framelog.c | 30 +++++++++++++++++++++++++
 common/utils/T/tracer/logger/logger.h   |  2 ++
 2 files changed, 32 insertions(+)

diff --git a/common/utils/T/tracer/logger/framelog.c b/common/utils/T/tracer/logger/framelog.c
index 2b26a5b3a0..0889f2b80c 100644
--- a/common/utils/T/tracer/logger/framelog.c
+++ b/common/utils/T/tracer/logger/framelog.c
@@ -15,6 +15,11 @@ struct framelog {
   float *x;
   float *buffer;
   int blength;
+  int skip_delay;       /* one frame over 'skip_delay' is truly processed
+                         * 0 to disable (process all data)
+                         */
+  int skip_current;     /* internal data for the skip mechanism */
+  int skip_on;          /* internal data for the skip mechanism */
 };
 
 static void _event(void *p, event e)
@@ -30,6 +35,18 @@ static void _event(void *p, event e)
   buffer = e.e[l->buffer_arg].b;
   bsize = e.e[l->buffer_arg].bsize;
 
+  if (l->skip_delay != 0) {
+    if (subframe == 0) {
+      l->skip_current++;
+      if (l->skip_current >= l->skip_delay) {
+        l->skip_on = 0;
+        l->skip_current = 0;
+      } else
+        l->skip_on = 1;
+    }
+  }
+  if (l->skip_on) return;
+
   nsamples = bsize / (2*sizeof(int16_t));
 
   if (l->blength != nsamples * 10) {
@@ -110,3 +127,16 @@ logger *new_framelog(event_handler *h, void *database,
 
   return ret;
 }
+
+/****************************************************************************/
+/*                             public functions                             */
+/****************************************************************************/
+
+void framelog_set_skip(logger *_this, int skip_delay)
+{
+  struct framelog *l = _this;
+  /* TODO: protect with a lock? */
+  l->skip_delay = skip_delay;
+  l->skip_current = 0;
+  l->skip_on = 0;
+}
diff --git a/common/utils/T/tracer/logger/logger.h b/common/utils/T/tracer/logger/logger.h
index a3c09b2c23..ec04e60819 100644
--- a/common/utils/T/tracer/logger/logger.h
+++ b/common/utils/T/tracer/logger/logger.h
@@ -12,6 +12,8 @@ logger *new_ttilog(void *event_handler, void *database,
     char *data_varname, int convert_to_dB);
 logger *new_timelog(void *event_handler, void *database, char *event_name);
 
+void framelog_set_skip(logger *_this, int skip_delay);
+
 #include "view/view.h"
 
 void logger_add_view(logger *l, view *v);
-- 
GitLab