misc: vpe.api messages dynamically allocated
[vpp.git] / src / vppinfra / test_elog.c
index 89905ad..2d1232c 100644 (file)
 #include <vppinfra/serialize.h>
 #include <vppinfra/unix.h>
 
+void
+g2_test_pattern (elog_main_t * em, int g2_test, char *dump_file)
+{
+  int i, j;
+  clib_error_t *error;
+  elog_track_t *tracks = 0;
+
+  elog_init (em, 100000);
+  elog_enable_disable (em, 1 /* enable */ );
+
+  for (i = 0; i < 100; i++)
+    {
+      elog_track_t *t;
+      vec_validate (tracks, i);
+      t = tracks + i;
+      t->name = (char *) format (0, "Track %3d", i + 1);
+      elog_track_register (em, t);
+    }
+
+  for (i = 0; i < 100; i++)
+    {
+      for (j = 0; j < 100; j++)
+       {
+         ELOG_TYPE_DECLARE (e) =
+         {
+         .format = "0: t%d event %d",.format_args = "i4i4",};
+         ELOG_TYPE_DECLARE (e2) =
+         {
+         .format = "1: t%d event %d",.format_args = "i4i4",};
+
+         struct
+         {
+           int track, event;
+         } *ed;
+
+         ed = ELOG_TRACK_DATA (em, e, tracks[j]);
+         ed->track = j + 1;
+         ed->event = i;
+         ed = ELOG_TRACK_DATA (em, e2, tracks[j]);
+         ed->track = j + 1;
+         ed->event = i;
+       }
+    }
+
+  if (dump_file == 0)
+    dump_file = "/tmp/g2_test.elog";
+
+  error = elog_write_file (em, dump_file, 1 /* flush ring */ );
+
+  if (error)
+    clib_error_report (error);
+}
+
+
 int
 test_elog_main (unformat_input_t * input)
 {
@@ -52,6 +106,9 @@ test_elog_main (unformat_input_t * input)
   f64 min_sample_time;
   char *dump_file, *load_file, *merge_file, **merge_files;
   u8 *tag, **tags;
+  f64 align_tweak;
+  f64 *align_tweaks;
+  int g2_test;
 
   n_iter = 100;
   max_events = 100000;
@@ -61,7 +118,9 @@ test_elog_main (unformat_input_t * input)
   load_file = 0;
   merge_files = 0;
   tags = 0;
+  align_tweaks = 0;
   min_sample_time = 2;
+  g2_test = 0;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "iter %d", &n_iter))
@@ -83,6 +142,10 @@ test_elog_main (unformat_input_t * input)
        ;
       else if (unformat (input, "sample-time %f", &min_sample_time))
        ;
+      else if (unformat (input, "align-tweak %f", &align_tweak))
+       vec_add1 (align_tweaks, align_tweak);
+      else if (unformat (input, "g2-test %=", &g2_test, 1))
+       ;
       else
        {
          error = clib_error_create ("unknown input `%U'\n",
@@ -91,6 +154,12 @@ test_elog_main (unformat_input_t * input)
        }
     }
 
+  if (g2_test)
+    {
+      g2_test_pattern (em, g2_test, dump_file);
+      return (0);
+    }
+
 #ifdef CLIB_UNIX
   if (load_file)
     {
@@ -102,9 +171,15 @@ test_elog_main (unformat_input_t * input)
     {
       uword i;
       elog_main_t *ems;
-
       vec_clone (ems, merge_files);
 
+      /* Supply default tags as needed */
+      if (vec_len (tags) < vec_len (ems))
+       {
+         for (i = vec_len (tags); i < vec_len (ems); i++)
+           vec_add1 (tags, format (0, "F%d%c", i, 0));
+       }
+
       elog_init (em, max_events);
       for (i = 0; i < vec_len (ems); i++)
        {
@@ -113,7 +188,10 @@ test_elog_main (unformat_input_t * input)
            goto done;
          if (i > 0)
            {
-             elog_merge (em, tags[0], &ems[i], tags[i]);
+             align_tweak = 0.0;
+             if (i <= vec_len (align_tweaks))
+               align_tweak = align_tweaks[i - 1];
+             elog_merge (em, tags[0], &ems[i], tags[i], align_tweak);
              tags[0] = 0;
            }
        }
@@ -217,7 +295,8 @@ test_elog_main (unformat_input_t * input)
 #ifdef CLIB_UNIX
   if (dump_file)
     {
-      if ((error = elog_write_file (em, dump_file)))
+      if ((error =
+          elog_write_file (em, dump_file, 0 /* do not flush ring */ )))
        goto done;
     }
 #endif
@@ -229,7 +308,8 @@ test_elog_main (unformat_input_t * input)
       vec_foreach (e, es)
       {
        clib_warning ("%18.9f: %12U %U\n", e->time,
-                     format_elog_track, em, e, format_elog_event, em, e);
+                     format_elog_track_name, em, e, format_elog_event, em,
+                     e);
       }
     }
 
@@ -246,6 +326,8 @@ main (int argc, char *argv[])
   unformat_input_t i;
   int r;
 
+  clib_mem_init (0, 3ULL << 30);
+
   unformat_init_command_line (&i, argv);
   r = test_elog_main (&i);
   unformat_free (&i);
@@ -253,6 +335,42 @@ main (int argc, char *argv[])
 }
 #endif
 
+/**
+ * @brief GDB callable function: vl - Return vector length of vector
+ *
+ * @param *p - void - address of vector
+ *
+ * @return length - u32
+ *
+ */
+u32
+vl (void *p)
+{
+  return vec_len (p);
+}
+
+/**
+ * @brief GDB callable function: pe - call pool_elts - number of elements in a pool
+ *
+ * @param *v - void - address of pool
+ *
+ * @return number - uword
+ *
+ */
+#include <vppinfra/pool.h>
+uword
+pe (void *v)
+{
+  return (pool_elts (v));
+}
+
+#include <vppinfra/hash.h>
+uword
+he (void *v)
+{
+  return (hash_elts (v));
+}
+
 /*
  * fd.io coding-style-patch-verification: ON
  *