#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)
{
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;
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))
;
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",
}
}
+ if (g2_test)
+ {
+ g2_test_pattern (em, g2_test, dump_file);
+ return (0);
+ }
+
#ifdef CLIB_UNIX
if (load_file)
{
{
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++)
{
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;
}
}
#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
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);
}
}
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);
}
#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
*