This is useful for testing the effects of code changes upon the time required to start PSPPIRE. --- src/ui/gui/main.c | 37 ++++++++++++++++++++++++++++++++++--- 1 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/src/ui/gui/main.c b/src/ui/gui/main.c index bb8f19d..eea71f8 100644 --- a/src/ui/gui/main.c +++ b/src/ui/gui/main.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2004, 2005, 2006, 2010, 2011 Free Software Foundation + Copyright (C) 2004, 2005, 2006, 2010, 2011, 2012 Free Software Foundation 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 @@ -50,6 +50,7 @@ enum OPT_HELP, OPT_VERSION, OPT_NO_SPLASH, + OPT_MEASURE_STARTUP, N_STARTUP_OPTIONS }; @@ -57,9 +58,15 @@ static const struct argv_option startup_options[N_STARTUP_OPTIONS] = { {"help", 'h', no_argument, OPT_HELP}, {"version", 'V', no_argument, OPT_VERSION}, - {"no-splash", 'q', no_argument, OPT_NO_SPLASH} + {"no-splash", 'q', no_argument, OPT_NO_SPLASH}, + {"measure-startup", 0, no_argument, OPT_MEASURE_STARTUP}, }; +/* --measure-startup: Prints the elapsed time to start up and load any file + specified on the command line. */ +static gboolean measure_startup; +static GTimer *startup; + static void usage (void) { @@ -138,6 +145,10 @@ startup_option_callback (int id, void *show_splash_) *show_splash = FALSE; break; + case OPT_MEASURE_STARTUP: + measure_startup = TRUE; + break; + default: NOT_REACHED (); } @@ -174,6 +185,15 @@ hide_splash_window (gpointer data) GtkWidget *splash = data; gtk_widget_destroy (splash); gtk_window_set_auto_startup_notification (TRUE); + if (startup) + { + g_timer_stop (startup); + if (measure_startup) + printf ("%.3f seconds elapsed\n", g_timer_elapsed (startup, NULL)); + g_timer_destroy (startup); + startup = NULL; + } + return FALSE; } @@ -196,9 +216,17 @@ static gboolean run_inner_loop (gpointer data) { struct initialisation_parameters *ip = data; + GSource *source; + guint id; + initialize (ip->data_file); - g_timeout_add (500, hide_splash_window, ip->splash_window); + source = g_idle_source_new (); + + g_source_set_priority (source, G_PRIORITY_LOW); + g_source_set_callback (source, hide_splash_window, ip->splash_window, NULL); + id = g_source_attach (source, NULL); + g_source_unref (source); gtk_main (); @@ -253,6 +281,9 @@ main (int argc, char *argv[]) gtk_disable_setlocale (); + g_thread_init (NULL); + startup = g_timer_new (); + g_timer_start (startup); if ( ! gtk_parse_args (&argc, &argv) ) { -- 1.7.2.5 _______________________________________________ pspp-dev mailing list pspp-dev@gnu.org https://lists.gnu.org/mailman/listinfo/pspp-dev