2 * Copyright (C) 2008 - 2016 The Geeqie Team
4 * Authors: Vladimir Nadvornik, Laurent Monin
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #include "logwindow.h"
25 #include "ui_fileops.h"
27 #include <glib/gprintf.h>
33 static gboolean log_msg_cb(gpointer data)
36 log_window_append(buf, LOG_MSG);
41 static gboolean log_normal_cb(gpointer data)
44 log_window_append(buf, LOG_NORMAL);
49 void log_domain_printf(const gchar *domain, const gchar *format, ...)
55 buf = g_strdup_vprintf(format, ap);
59 if (strcmp(domain, DOMAIN_INFO) == 0)
60 g_idle_add(log_normal_cb, buf);
62 g_idle_add(log_msg_cb, buf);
67 * Debugging only functions
72 static gint debug_level = DEBUG_LEVEL_MIN;
75 gint get_debug_level(void)
80 void set_debug_level(gint new_level)
82 debug_level = CLAMP(new_level, DEBUG_LEVEL_MIN, DEBUG_LEVEL_MAX);
85 void debug_level_add(gint delta)
87 set_debug_level(debug_level + delta);
90 gint required_debug_level(gint level)
92 return (debug_level >= level);
95 static gint timeval_delta(struct timeval *result, struct timeval *x, struct timeval *y)
97 if (x->tv_usec < y->tv_usec)
99 gint nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
100 y->tv_usec -= 1000000 * nsec;
104 if (x->tv_usec - y->tv_usec > 1000000)
106 gint nsec = (x->tv_usec - y->tv_usec) / 1000000;
107 y->tv_usec += 1000000 * nsec;
111 result->tv_sec = x->tv_sec - y->tv_sec;
112 result->tv_usec = x->tv_usec - y->tv_usec;
114 return x->tv_sec < y->tv_sec;
117 const gchar *get_exec_time(void)
119 static gchar timestr[30];
120 static struct timeval start_tv = {0, 0};
121 static struct timeval previous = {0, 0};
122 static gint started = 0;
124 struct timeval tv = {0, 0};
125 static struct timeval delta = {0, 0};
127 gettimeofday(&tv, NULL);
129 if (start_tv.tv_sec == 0) start_tv = tv;
131 tv.tv_sec -= start_tv.tv_sec;
132 if (tv.tv_usec >= start_tv.tv_usec)
133 tv.tv_usec -= start_tv.tv_usec;
136 tv.tv_usec += 1000000 - start_tv.tv_usec;
140 if (started) timeval_delta(&delta, &tv, &previous);
145 g_snprintf(timestr, sizeof(timestr), "%5d.%06d (+%05d.%06d)", (gint)tv.tv_sec, (gint)tv.tv_usec, (gint)delta.tv_sec, (gint)delta.tv_usec);
150 void init_exec_time(void)
156 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */