diff options
Diffstat (limited to 'lib/ephy-debug.c')
-rw-r--r-- | lib/ephy-debug.c | 268 |
1 files changed, 123 insertions, 145 deletions
diff --git a/lib/ephy-debug.c b/lib/ephy-debug.c index 6a6997d7d..43ffc9004 100644 --- a/lib/ephy-debug.c +++ b/lib/ephy-debug.c @@ -48,24 +48,22 @@ static gboolean ephy_profile_all_modules; static char ** build_modules (const char *name, - gboolean* is_all) + gboolean *is_all) { - const char *env; + const char *env; - *is_all = FALSE; + *is_all = FALSE; - env = g_getenv (name); - if (env == NULL) return NULL; + env = g_getenv (name); + if (env == NULL) return NULL; - if (strcmp (env, "all") == 0) - { - *is_all = TRUE; - return NULL; - } + if (strcmp (env, "all") == 0) { + *is_all = TRUE; + return NULL; + } - return g_strsplit (g_getenv (name), ":", -1); + return g_strsplit (g_getenv (name), ":", -1); } - #endif #ifndef DISABLE_LOGGING @@ -74,92 +72,77 @@ static char **ephy_log_modules; static gboolean ephy_log_all_modules; static void -log_module (const gchar *log_domain, - GLogLevelFlags log_level, - const char *message, - gpointer user_data) +log_module (const gchar *log_domain, + GLogLevelFlags log_level, + const char *message, + gpointer user_data) { - gboolean should_log = ephy_log_all_modules; - - if (!ephy_log_all_modules && !ephy_log_modules) return; - - if (ephy_log_modules != NULL) - { - guint i; - - for (i = 0; ephy_log_modules[i] != NULL; i++) - { - if (strstr (message, ephy_log_modules [i]) != NULL) - { - should_log = TRUE; - break; - } - } - } - - if (should_log) - { - g_print ("%s\n", message); - } -} + gboolean should_log = ephy_log_all_modules; + + if (!ephy_log_all_modules && !ephy_log_modules) return; + + if (ephy_log_modules != NULL) { + guint i; + + for (i = 0; ephy_log_modules[i] != NULL; i++) { + if (strstr (message, ephy_log_modules [i]) != NULL) { + should_log = TRUE; + break; + } + } + } + if (should_log) { + g_print ("%s\n", message); + } +} #endif /* !DISABLE_LOGGING */ #define MAX_DEPTH 200 -static void -trap_handler (const char *log_domain, - GLogLevelFlags log_level, - const char *message, - gpointer user_data) +static void +trap_handler (const char *log_domain, + GLogLevelFlags log_level, + const char *message, + gpointer user_data) { - g_log_default_handler (log_domain, log_level, message, user_data); - - if (ephy_debug_break != NULL && - (log_level & (G_LOG_LEVEL_WARNING | - G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_FLAG_FATAL))) - { - if (strcmp (ephy_debug_break, "suspend") == 0) - { - /* the suspend case is first because we wanna send the signal before - * other threads have had a chance to get too far from the state that - * caused this assertion (in case they happen to have been involved). - */ - g_print ("Suspending program; attach with the debugger.\n"); - - raise (SIGSTOP); - } - else if (strcmp (ephy_debug_break, "stack") == 0) - { + g_log_default_handler (log_domain, log_level, message, user_data); + + if (ephy_debug_break != NULL && + (log_level & (G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_ERROR | + G_LOG_LEVEL_CRITICAL | + G_LOG_FLAG_FATAL))) { + if (strcmp (ephy_debug_break, "suspend") == 0) { + /* the suspend case is first because we wanna send the signal before + * other threads have had a chance to get too far from the state that + * caused this assertion (in case they happen to have been involved). + */ + g_print ("Suspending program; attach with the debugger.\n"); + + raise (SIGSTOP); + } else if (strcmp (ephy_debug_break, "stack") == 0) { #ifdef HAVE_EXECINFO_H - void *array[MAX_DEPTH]; - size_t size; - - size = backtrace (array, MAX_DEPTH); - backtrace_symbols_fd (array, size, 2); + void *array[MAX_DEPTH]; + size_t size; + + size = backtrace (array, MAX_DEPTH); + backtrace_symbols_fd (array, size, 2); #else - g_on_error_stack_trace (g_get_prgname ()); + g_on_error_stack_trace (g_get_prgname ()); #endif /* HAVE_EXECINFO_H */ - } - else if (strcmp (ephy_debug_break, "trap") == 0) - { - /* FIXME: disable the handler for a moment so we - * don't crash if we don't actually run under gdb - */ - G_BREAKPOINT (); - } - else if (strcmp (ephy_debug_break, "warn") == 0) - { - /* default behaviour only */ - } - else if (ephy_debug_break[0] != '\0') - { - g_print ("Unrecognised value of EPHY_DEBUG_BREAK env var: %s!\n", - ephy_debug_break); - } - } + } else if (strcmp (ephy_debug_break, "trap") == 0) { + /* FIXME: disable the handler for a moment so we + * don't crash if we don't actually run under gdb + */ + G_BREAKPOINT (); + } else if (strcmp (ephy_debug_break, "warn") == 0) { + /* default behaviour only */ + } else if (ephy_debug_break[0] != '\0') { + g_print ("Unrecognised value of EPHY_DEBUG_BREAK env var: %s!\n", + ephy_debug_break); + } + } } /** @@ -173,17 +156,16 @@ void ephy_debug_init (void) { #ifndef DISABLE_LOGGING - ephy_log_modules = build_modules ("EPHY_LOG_MODULES", &ephy_log_all_modules); - - g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, log_module, NULL); + ephy_log_modules = build_modules ("EPHY_LOG_MODULES", &ephy_log_all_modules); + g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, log_module, NULL); #endif - ephy_debug_break = g_getenv ("EPHY_DEBUG_BREAK"); - g_log_set_default_handler (trap_handler, NULL); + ephy_debug_break = g_getenv ("EPHY_DEBUG_BREAK"); + g_log_set_default_handler (trap_handler, NULL); #ifndef DISABLE_PROFILING - ephy_profile_modules = build_modules ("EPHY_PROFILE_MODULES", &ephy_profile_all_modules); + ephy_profile_modules = build_modules ("EPHY_PROFILE_MODULES", &ephy_profile_all_modules); #endif } @@ -192,65 +174,63 @@ ephy_debug_init (void) static EphyProfiler * ephy_profiler_new (const char *name, const char *module) { - EphyProfiler *profiler; + EphyProfiler *profiler; - profiler = g_new0 (EphyProfiler, 1); - profiler->timer = g_timer_new (); - profiler->name = g_strdup (name); - profiler->module = g_strdup (module); + profiler = g_new0 (EphyProfiler, 1); + profiler->timer = g_timer_new (); + profiler->name = g_strdup (name); + profiler->module = g_strdup (module); - g_timer_start (profiler->timer); + g_timer_start (profiler->timer); - return profiler; + return profiler; } static gboolean ephy_should_profile (const char *module) { - char *slash; - gboolean result = FALSE; - guint i; + char *slash; + gboolean result = FALSE; + guint i; - slash = strrchr (module, '/'); + slash = strrchr (module, '/'); - /* Happens on builddir != srcdir builds */ - if (slash != NULL) module = slash + 1; + /* Happens on builddir != srcdir builds */ + if (slash != NULL) module = slash + 1; - for (i = 0; ephy_profile_modules[i] != NULL; i++) - { - if (strcmp (ephy_profile_modules[i], module) == 0) - { - result = TRUE; - break; - } - } + for (i = 0; ephy_profile_modules[i] != NULL; i++) { + if (strcmp (ephy_profile_modules[i], module) == 0) { + result = TRUE; + break; + } + } - return result; + return result; } static void ephy_profiler_dump (EphyProfiler *profiler) { - double seconds; + double seconds; - g_return_if_fail (profiler != NULL); + g_return_if_fail (profiler != NULL); - seconds = g_timer_elapsed (profiler->timer, NULL); + seconds = g_timer_elapsed (profiler->timer, NULL); - g_print ("[ %s ] %s %f s elapsed\n", - profiler->module, profiler->name, - seconds); + g_print ("[ %s ] %s %f s elapsed\n", + profiler->module, profiler->name, + seconds); } static void ephy_profiler_free (EphyProfiler *profiler) { - g_return_if_fail (profiler != NULL); + g_return_if_fail (profiler != NULL); - g_timer_destroy (profiler->timer); - g_free (profiler->name); - g_free (profiler->module); - g_free (profiler); + g_timer_destroy (profiler->timer); + g_free (profiler->name); + g_free (profiler->module); + g_free (profiler); } /** @@ -263,21 +243,20 @@ ephy_profiler_free (EphyProfiler *profiler) void ephy_profiler_start (const char *name, const char *module) { - EphyProfiler *profiler; + EphyProfiler *profiler; - if (ephy_profilers_hash == NULL) - { - ephy_profilers_hash = - g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, NULL); - } + if (ephy_profilers_hash == NULL) { + ephy_profilers_hash = + g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, NULL); + } - if (!ephy_profile_all_modules && - (ephy_profile_modules == NULL || !ephy_should_profile (module))) return; + if (!ephy_profile_all_modules && + (ephy_profile_modules == NULL || !ephy_should_profile (module))) return; - profiler = ephy_profiler_new (name, module); + profiler = ephy_profiler_new (name, module); - g_hash_table_insert (ephy_profilers_hash, g_strdup (name), profiler); + g_hash_table_insert (ephy_profilers_hash, g_strdup (name), profiler); } /** @@ -289,14 +268,13 @@ ephy_profiler_start (const char *name, const char *module) void ephy_profiler_stop (const char *name) { - EphyProfiler *profiler; + EphyProfiler *profiler; - profiler = g_hash_table_lookup (ephy_profilers_hash, name); - if (profiler == NULL) return; - g_hash_table_remove (ephy_profilers_hash, name); + profiler = g_hash_table_lookup (ephy_profilers_hash, name); + if (profiler == NULL) return; + g_hash_table_remove (ephy_profilers_hash, name); - ephy_profiler_dump (profiler); - ephy_profiler_free (profiler); + ephy_profiler_dump (profiler); + ephy_profiler_free (profiler); } - #endif |