From ba429d344132c088177e853cce8ff7181570b221 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 19:42:51 +0200 Subject: Adding upstream version 44.2. Signed-off-by: Daniel Baumann --- gedit/gedit-debug.c | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 gedit/gedit-debug.c (limited to 'gedit/gedit-debug.c') diff --git a/gedit/gedit-debug.c b/gedit/gedit-debug.c new file mode 100644 index 0000000..5aa82fa --- /dev/null +++ b/gedit/gedit-debug.c @@ -0,0 +1,232 @@ +/* + * gedit-debug.c + * This file is part of gedit + * + * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence + * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi + * Copyright (C) 2002 - 2005 Paolo Maggi + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#include "gedit-debug.h" +#include + +#define ENABLE_PROFILING + +#ifdef ENABLE_PROFILING +static GTimer *timer = NULL; +static gdouble last_time = 0.0; +#endif + +static GeditDebugSection enabled_sections = GEDIT_NO_DEBUG; + +#define DEBUG_IS_ENABLED(section) (enabled_sections & (section)) + +/** + * gedit_debug_init: + * + * Initializes the debugging subsystem of gedit. + * + * The function checks for the existence of certain environment variables to + * determine whether to enable output for a debug section. To enable output + * for a specific debug section, set an environment variable of the same name; + * e.g. to enable output for the %GEDIT_DEBUG_PLUGINS section, set a + * GEDIT_DEBUG_PLUGINS environment variable. To enable output + * for all debug sections, set the GEDIT_DEBUG environment + * variable. + * + * This function must be called before any of the other debug functions are + * called. It must only be called once. + */ +void +gedit_debug_init (void) +{ + if (g_getenv ("GEDIT_DEBUG") != NULL) + { + /* enable all debugging */ + enabled_sections = ~GEDIT_NO_DEBUG; + goto out; + } + + if (g_getenv ("GEDIT_DEBUG_VIEW") != NULL) + { + enabled_sections |= GEDIT_DEBUG_VIEW; + } + if (g_getenv ("GEDIT_DEBUG_PREFS") != NULL) + { + enabled_sections |= GEDIT_DEBUG_PREFS; + } + if (g_getenv ("GEDIT_DEBUG_WINDOW") != NULL) + { + enabled_sections |= GEDIT_DEBUG_WINDOW; + } + if (g_getenv ("GEDIT_DEBUG_PANEL") != NULL) + { + enabled_sections |= GEDIT_DEBUG_PANEL; + } + if (g_getenv ("GEDIT_DEBUG_PLUGINS") != NULL) + { + enabled_sections |= GEDIT_DEBUG_PLUGINS; + } + if (g_getenv ("GEDIT_DEBUG_TAB") != NULL) + { + enabled_sections |= GEDIT_DEBUG_TAB; + } + if (g_getenv ("GEDIT_DEBUG_DOCUMENT") != NULL) + { + enabled_sections |= GEDIT_DEBUG_DOCUMENT; + } + if (g_getenv ("GEDIT_DEBUG_COMMANDS") != NULL) + { + enabled_sections |= GEDIT_DEBUG_COMMANDS; + } + if (g_getenv ("GEDIT_DEBUG_APP") != NULL) + { + enabled_sections |= GEDIT_DEBUG_APP; + } + if (g_getenv ("GEDIT_DEBUG_UTILS") != NULL) + { + enabled_sections |= GEDIT_DEBUG_UTILS; + } + +out: + +#ifdef ENABLE_PROFILING + if (enabled_sections != GEDIT_NO_DEBUG) + { + timer = g_timer_new (); + } +#endif +} + +/** + * gedit_debug: + * @section: debug section. + * @file: file name. + * @line: line number. + * @function: name of the function that is calling gedit_debug(). + * + * If @section is enabled, then logs the trace information @file, @line, and + * @function. + */ +void +gedit_debug (GeditDebugSection section, + const gchar *file, + gint line, + const gchar *function) +{ + gedit_debug_message (section, file, line, function, "%s", ""); +} + +/** + * gedit_debug_message: + * @section: debug section. + * @file: file name. + * @line: line number. + * @function: name of the function that is calling gedit_debug_message(). + * @format: A g_vprintf() format string. + * @...: The format string arguments. + * + * If @section is enabled, then logs the trace information @file, @line, and + * @function along with the message obtained by formatting @format with the + * given format string arguments. + */ +void +gedit_debug_message (GeditDebugSection section, + const gchar *file, + gint line, + const gchar *function, + const gchar *format, + ...) +{ + if (G_UNLIKELY (DEBUG_IS_ENABLED (section))) + { + va_list args; + gchar *msg; + +#ifdef ENABLE_PROFILING + gdouble seconds; + + g_return_if_fail (timer != NULL); + + seconds = g_timer_elapsed (timer, NULL); +#endif + + g_return_if_fail (format != NULL); + + va_start (args, format); + msg = g_strdup_vprintf (format, args); + va_end (args); + +#ifdef ENABLE_PROFILING + g_print ("[%f (%f)] %s:%d (%s) %s\n", + seconds, + seconds - last_time, + file, + line, + function, + msg); + + last_time = seconds; +#else + g_print ("%s:%d (%s) %s\n", file, line, function, msg); +#endif + + fflush (stdout); + + g_free (msg); + } +} + +/** + * gedit_debug_plugin_message: + * @file: file name. + * @line: line number. + * @function: name of the function that is calling gedit_debug_plugin_message(). + * @message: a message. + * + * If the section %GEDIT_DEBUG_PLUGINS is enabled, then logs the trace + * information @file, @line, and @function along with @message. + * + * This function may be overridden by GObject Introspection language bindings + * to be more language-specific. + * + * Python + * + * A PyGObject override is provided that has the following signature: + * + * + * def debug_plugin_message(format_str, *format_args): + * #... + * + * + * + * It automatically supplies parameters @file, @line, and @function, and it + * formats format_str with the given format arguments. The syntax + * of the format string is the usual Python string formatting syntax described + * by 5.6.2. String Formatting Operations. + * + * Since: 3.4 + */ +void +gedit_debug_plugin_message (const gchar *file, + gint line, + const gchar *function, + const gchar *message) +{ + gedit_debug_message (GEDIT_DEBUG_PLUGINS, file, line, function, "%s", message); +} + +/* ex:set ts=8 noet: */ -- cgit v1.2.3