+void
+ev_profiler_start (EvProfileSection section,
+ const gchar *format, ...)
+{
+ if (G_UNLIKELY (ev_profile & section)) {
+ GTimer *timer;
+ gchar *name;
+ va_list args;
+
+ if (!format)
+ return;
+
+ va_start (args, format);
+ name = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ timer = g_hash_table_lookup (timers, name);
+ if (!timer) {
+ timer = g_timer_new ();
+ g_hash_table_insert (timers, g_strdup (name), timer);
+ } else {
+ g_timer_start (timer);
+ }
+ }
+}
+
+void
+ev_profiler_stop (EvProfileSection section,
+ const gchar *format, ...)
+{
+ if (G_UNLIKELY (ev_profile & section)) {
+ GTimer *timer;
+ gchar *name;
+ va_list args;
+ gdouble seconds;
+
+ if (!format)
+ return;
+
+ va_start (args, format);
+ name = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ timer = g_hash_table_lookup (timers, name);
+ if (!timer)
+ return;
+
+ g_timer_stop (timer);
+ seconds = g_timer_elapsed (timer, NULL);
+ g_print ("[ %s ] %f s elapsed\n", name, seconds);
+ fflush (stdout);
+ }
+}
+