[Groonga-commit] groonga/groonga at 4b1c4df [master] benchmark: show average and median

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Aug 12 22:29:45 JST 2014


Kouhei Sutou	2014-08-12 22:29:45 +0900 (Tue, 12 Aug 2014)

  New Revision: 4b1c4df3a027926852a2309bffe5ef76e5317b27
  https://github.com/groonga/groonga/commit/4b1c4df3a027926852a2309bffe5ef76e5317b27

  Message:
    benchmark: show average and median

  Modified files:
    benchmark/lib/bench-reporter.c

  Modified: benchmark/lib/bench-reporter.c (+82 -8)
===================================================================
--- benchmark/lib/bench-reporter.c    2014-08-12 22:23:34 +0900 (fd039e2)
+++ benchmark/lib/bench-reporter.c    2014-08-12 22:29:45 +0900 (3eb86a2)
@@ -152,7 +152,9 @@ print_header(BenchReporterPrivate *priv, gint max_label_length)
        n_spaces--) {
     g_print(" ");
   }
-  g_print("(time)\n");
+  g_print("(total)    ");
+  g_print("(average)  ");
+  g_print("(median)\n");
 }
 
 static void
@@ -175,7 +177,7 @@ print_label(BenchReporterPrivate *priv, BenchItem *item, gint max_label_length)
 }
 
 static void
-report_elapsed(gdouble elapsed_time)
+report_elapsed_time(gdouble elapsed_time)
 {
   gdouble one_second = 1.0;
   gdouble one_millisecond = one_second / 1000.0;
@@ -186,8 +188,74 @@ report_elapsed(gdouble elapsed_time)
   } else if (elapsed_time < one_millisecond) {
     g_print("(%.4fms)", elapsed_time * 1000.0);
   } else {
-    g_print("(%.4fs)", elapsed_time);
+    g_print("(%.4fs) ", elapsed_time);
   }
+}
+
+static gdouble
+compute_total_elapsed_time(GArray *elapsed_times)
+{
+  guint i;
+  gdouble total = 0.0;
+
+  for (i = 0; i< elapsed_times->len; i++) {
+    gdouble elapsed_time = g_array_index(elapsed_times, gdouble, i);
+    total += elapsed_time;
+  }
+
+  return total;
+}
+
+static void
+report_elapsed_time_total(GArray *elapsed_times)
+{
+  report_elapsed_time(compute_total_elapsed_time(elapsed_times));
+}
+
+static void
+report_elapsed_time_average(GArray *elapsed_times)
+{
+  gdouble total;
+  gdouble average;
+
+  total = compute_total_elapsed_time(elapsed_times);
+  average = total / elapsed_times->len;
+  report_elapsed_time(average);
+}
+
+static gint
+compare_elapsed_time(gconstpointer a, gconstpointer b)
+{
+  const gdouble *elapsed_time1 = a;
+  const gdouble *elapsed_time2 = b;
+
+  if (*elapsed_time1 > *elapsed_time2) {
+    return 1;
+  } else if (*elapsed_time1 < *elapsed_time2) {
+    return -1;
+  } else {
+    return 0;
+  }
+}
+
+static void
+report_elapsed_time_median(GArray *elapsed_times)
+{
+  gdouble median;
+
+  g_array_sort(elapsed_times, compare_elapsed_time);
+  median = g_array_index(elapsed_times, gdouble, elapsed_times->len / 2);
+  report_elapsed_time(median);
+}
+
+static void
+report_elapsed_time_statistics(GArray *elapsed_times)
+{
+  report_elapsed_time_total(elapsed_times);
+  g_print(" ");
+  report_elapsed_time_average(elapsed_times);
+  g_print(" ");
+  report_elapsed_time_median(elapsed_times);
   g_print("\n");
 }
 
@@ -195,26 +263,32 @@ static void
 run_item(BenchReporterPrivate *priv, BenchItem *item, gint max_label_length)
 {
   GTimer *timer;
+  GArray *elapsed_times;
   gint i;
 
   print_label(priv, item, max_label_length);
 
+  elapsed_times = g_array_new(FALSE, FALSE, sizeof(gdouble));
+
   timer = g_timer_new();
-  g_timer_stop(timer);
-  g_timer_reset(timer);
   for (i = 0; i < item->n; i++) {
+    gdouble elapsed_time;
     if (item->bench_setup)
       item->bench_setup(item->data);
-    g_timer_continue(timer);
+    g_timer_start(timer);
     item->bench(item->data);
     g_timer_stop(timer);
+    elapsed_time = g_timer_elapsed(timer, NULL);
+    g_array_append_val(elapsed_times, elapsed_time);
     if (item->bench_teardown)
       item->bench_teardown(item->data);
   }
+  g_timer_destroy(timer);
 
-  report_elapsed(g_timer_elapsed(timer, NULL));
+  report_elapsed_time_statistics(elapsed_times);
+
+  g_array_free(elapsed_times, TRUE);
 
-  g_timer_destroy(timer);
 }
 
 void
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index