]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7820 updated switch_event.c to have benchmark framework, and updated .gitignore...
authorWilliam King <william.king@quentustech.com>
Fri, 10 Jul 2015 22:31:11 +0000 (15:31 -0700)
committerWilliam King <william.king@quentustech.com>
Fri, 10 Jul 2015 22:31:11 +0000 (15:31 -0700)
tests/unit/.gitignore [new file with mode: 0644]
tests/unit/switch_event.c

diff --git a/tests/unit/.gitignore b/tests/unit/.gitignore
new file mode 100644 (file)
index 0000000..653a998
--- /dev/null
@@ -0,0 +1,12 @@
+*
+!/**/
+!/*.*
+
+*.o
+*~
+\#*
+*.log
+*.trs
+perf.data
+perf.data.old
+Makefile.in
index bfef0cb9f669513a13966d6103d48db596b03a6e..9b19879d6705fb8787b195d86cb18c713c8bf325 100644 (file)
 #include <switch.h>
 #include <tap.h>
 
-int main () {
+// #define BENCHMARK 1
 
+int main () {
   switch_event_t *event = NULL;
   switch_bool_t verbose = SWITCH_TRUE;
   const char *err = NULL;
   switch_time_t start_ts, end_ts;
-  int rc = 0, loops = 1000;
+  int rc = 0, loops = 10;
   switch_status_t status = SWITCH_STATUS_SUCCESS;
+  char **index = NULL;
+  unsigned long long micro_total = 0;
+  double micro_per = 0;
+  double rate_per_sec = 0;
 
-  plan(1 + ( 3 * loops));
+#ifdef BENCHMARK
+  switch_time_t small_start_ts, small_end_ts;
+
+  plan(2);
+#else
+  plan(2 + ( 2 * loops));
+#endif
 
-  
   status = switch_core_init(SCF_MINIMAL, verbose, &err);
   
   if ( !ok( status == SWITCH_STATUS_SUCCESS, "Initialize FreeSWITCH core\n")) {
     bail_out(0, "Bail due to failure to initialize FreeSWITCH[%s]", err);
   }
 
+  index = calloc(loops, sizeof(char *));
+  for ( int x = 0; x < loops; x++) {
+    index[x] = switch_mprintf("%d", x);
+  }
+
   /* START LOOPS */
   start_ts = switch_time_now();
   
+  status = switch_event_create(&event, SWITCH_EVENT_MESSAGE);
+  ok( status == SWITCH_STATUS_SUCCESS,"Create Event");
+
+#ifndef BENCHMARK
   for ( int x = 0; x < loops; x++) {
-    status = switch_event_create(&event, SWITCH_EVENT_MESSAGE);
-    ok( status == SWITCH_STATUS_SUCCESS,"Create Event");
-    
-    status = switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "testing", "event_create");
+    status = switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, index[x], index[x]);
     ok( status == SWITCH_STATUS_SUCCESS,"Add header to event");
-    
-    is(switch_event_get_header(event, "testing"), "event_create", "correct header value returned");
-    
-    switch_event_destroy(&event);
-  } /* END LOOPS */
+  }
+#else 
+  small_start_ts = switch_time_now();
+  for ( int x = 0; x < loops; x++) {
+    if ( switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, index[x], index[x]) != SWITCH_STATUS_SUCCESS) {
+      fail("Failed to add header to event");
+    }
+  }
+  small_end_ts = switch_time_now();
+
+  micro_total = small_end_ts - small_start_ts;
+  micro_per = micro_total / (double) loops;
+  rate_per_sec = 1000000 / micro_per;
+  note("switch_event add_header: Total %ldus / %ld loops, %.2f us per loop, %.0f loops per second\n", 
+       micro_total, loops, micro_per, rate_per_sec);
+#endif
+
+
+#ifndef BENCHMARK
+  for ( int x = 0; x < loops; x++) {
+    is(switch_event_get_header(event, index[x]), index[x], "correct header value returned");
+  } 
+#else 
+  small_start_ts = switch_time_now();
+  for ( int x = 0; x < loops; x++) {
+    if ( !switch_event_get_header(event, index[x])) {
+      fail("Failed to lookup event header value");
+    }
+  }
+  small_end_ts = switch_time_now();
+
+  micro_total = small_end_ts - small_start_ts;
+  micro_per = micro_total / (double) loops;
+  rate_per_sec = 1000000 / micro_per;
+  note("switch_event get_header: Total %ldus / %ld loops, %.2f us per loop, %.0f loops per second\n", 
+       micro_total, loops, micro_per, rate_per_sec);
+#endif
+
+
+  switch_event_destroy(&event);
+  /* END LOOPS */
   
   end_ts = switch_time_now();
 
-  note("Total %ldus, %ldus per loop, %ld loops per second\n", end_ts - start_ts,(end_ts - start_ts) / loops, 1000000/ ((end_ts - start_ts) / loops));
+  for ( int x = 0; x < loops; x++) {
+    free(index[x]);
+  }
+  free(index);
+
+  micro_total = end_ts - start_ts;
+  micro_per = micro_total / (double) loops;
+  rate_per_sec = 1000000 / micro_per;
+  note("switch_event Total %ldus / %d loops, %.2f us per loop, %.0f loops per second\n", 
+       micro_total, loops, micro_per, rate_per_sec);
 
   switch_core_destroy();