summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog21
-rw-r--r--common/gdm-profile.h6
-rw-r--r--configure.ac11
-rw-r--r--gui/simple-greeter/gdm-greeter-client.c5
-rw-r--r--gui/simple-greeter/gdm-greeter-session.c47
-rw-r--r--gui/simple-greeter/gdm-session-manager.c7
-rw-r--r--gui/simple-greeter/greeter-main.c9
7 files changed, 77 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 53f20e48..e733e2b7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,26 @@
2008-03-23 William Jon McCann <jmccann@redhat.com>
+ * common/gdm-profile.h:
+ * configure.ac:
+ * gui/simple-greeter/gdm-greeter-client.c:
+ (gdm_greeter_client_start):
+ * gui/simple-greeter/gdm-greeter-session.c: (toggle_panel),
+ (toggle_login_window), (launch_compiz), (launch_metacity),
+ (start_window_manager), (activate_settings_daemon),
+ (gdm_greeter_session_start):
+ * gui/simple-greeter/gdm-session-manager.c: (_change_level),
+ (gdm_session_manager_set_level):
+ * gui/simple-greeter/greeter-main.c: (load_a11y), (main):
+ Add some more profiling stuff.
+
+ The greeter can now be profiled like so:
+ strace -ttt -f -o /tmp/logfile.strace -p `/sbin/pidof gdm-binary`
+ python plot-timeline.py -o prettygraph.png /tmp/logfile.strace
+
+ See: http://www.gnome.org/~federico/news-2006-03.html#09
+
+2008-03-23 William Jon McCann <jmccann@redhat.com>
+
* common/Makefile.am:
* common/gdm-profile.c: (_gdm_profile_log):
* common/gdm-profile.h:
diff --git a/common/gdm-profile.h b/common/gdm-profile.h
index 6b4fdd90..78703db6 100644
--- a/common/gdm-profile.h
+++ b/common/gdm-profile.h
@@ -29,9 +29,9 @@ G_BEGIN_DECLS
#ifdef ENABLE_PROFILING
#ifdef G_HAVE_ISO_VARARGS
-#define gdm_profile_start(...) _gdm_profile_log (G_STRFUNC, "start", __VA_ARGDM__)
-#define gdm_profile_end(...) _gdm_profile_log (G_STRFUNC, "end", __VA_ARGDM__)
-#define gdm_profile_msg(...) _gdm_profile_log (NULL, NULL, __VA_ARGDM__)
+#define gdm_profile_start(...) _gdm_profile_log (G_STRFUNC, "start", __VA_ARGS__)
+#define gdm_profile_end(...) _gdm_profile_log (G_STRFUNC, "end", __VA_ARGS__)
+#define gdm_profile_msg(...) _gdm_profile_log (NULL, NULL, __VA_ARGS__)
#elif defined(G_HAVE_GNUC_VARARGS)
#define gdm_profile_start(format...) _gdm_profile_log (G_STRFUNC, "start", format)
#define gdm_profile_end(format...) _gdm_profile_log (G_STRFUNC, "end", format)
diff --git a/configure.ac b/configure.ac
index dd091d34..88b90f37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1306,6 +1306,17 @@ else
fi
AC_SUBST(DEBUG_CFLAGS)
+#
+# Enable Profiling
+#
+AC_ARG_ENABLE(profiling,
+ [AC_HELP_STRING([--enable-profiling],
+ [turn on profiling])],
+ , enable_profiling=yes)
+if test "$enable_profiling" = "yes"; then
+ AC_DEFINE(ENABLE_PROFILING,1,[enable profiling])
+fi
+
# Set configuration choices.
#
AC_SUBST(HALT_COMMAND)
diff --git a/gui/simple-greeter/gdm-greeter-client.c b/gui/simple-greeter/gdm-greeter-client.c
index aaa6370b..a341b911 100644
--- a/gui/simple-greeter/gdm-greeter-client.c
+++ b/gui/simple-greeter/gdm-greeter-client.c
@@ -35,6 +35,7 @@
#include "gdm-greeter-client.h"
#include "gdm-marshal.h"
+#include "gdm-profile.h"
#define GDM_GREETER_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_CLIENT, GdmGreeterClientPrivate))
@@ -688,6 +689,8 @@ gdm_greeter_client_start (GdmGreeterClient *client,
g_return_val_if_fail (GDM_IS_GREETER_CLIENT (client), FALSE);
+ gdm_profile_start (NULL);
+
ret = FALSE;
if (client->priv->address == NULL) {
@@ -730,6 +733,8 @@ gdm_greeter_client_start (GdmGreeterClient *client,
ret = TRUE;
out:
+ gdm_profile_end (NULL);
+
return ret;
}
diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c
index e3527e4b..a7fbda15 100644
--- a/gui/simple-greeter/gdm-greeter-session.c
+++ b/gui/simple-greeter/gdm-greeter-session.c
@@ -40,6 +40,7 @@
#include "gdm-session-manager.h"
#include "gdm-session-client.h"
+#include "gdm-profile.h"
#define GDM_GREETER_SESSION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_SESSION, GdmGreeterSessionPrivate))
@@ -272,6 +273,8 @@ toggle_panel (GdmSessionManager *manager,
gboolean enabled,
GdmGreeterSession *session)
{
+ gdm_profile_start (NULL);
+
if (enabled) {
session->priv->panel = gdm_greeter_panel_new ();
@@ -290,6 +293,8 @@ toggle_panel (GdmSessionManager *manager,
gtk_widget_destroy (session->priv->panel);
session->priv->panel = NULL;
}
+
+ gdm_profile_end (NULL);
}
static void
@@ -297,6 +302,8 @@ toggle_login_window (GdmSessionManager *manager,
gboolean enabled,
GdmGreeterSession *session)
{
+ gdm_profile_start (NULL);
+
if (enabled) {
gboolean is_local;
@@ -341,6 +348,7 @@ toggle_login_window (GdmSessionManager *manager,
gtk_widget_destroy (session->priv->login_window);
session->priv->login_window = NULL;
}
+ gdm_profile_end (NULL);
}
static gboolean
@@ -349,6 +357,7 @@ launch_compiz (GdmGreeterSession *session)
GError *error;
gboolean ret;
+ gdm_profile_start (NULL);
g_debug ("GdmGreeterSession: Launching compiz");
ret = FALSE;
@@ -376,6 +385,7 @@ launch_compiz (GdmGreeterSession *session)
/* FIXME: should try to detect if it actually works */
out:
+ gdm_profile_end (NULL);
return ret;
}
@@ -385,6 +395,8 @@ launch_metacity (GdmGreeterSession *session)
GError *error;
gboolean ret;
+ gdm_profile_start (NULL);
+
g_debug ("GdmGreeterSession: Launching metacity");
ret = FALSE;
@@ -400,6 +412,7 @@ launch_metacity (GdmGreeterSession *session)
ret = TRUE;
out:
+ gdm_profile_end (NULL);
return ret;
}
@@ -409,8 +422,6 @@ start_window_manager (GdmGreeterSession *session)
gboolean use_compiz;
GConfClient *client;
- /* FIXME: check for COMPOSITE */
-
client = gconf_client_get_default ();
use_compiz = gconf_client_get_bool (client, KEY_WM_USE_COMPIZ, NULL);
g_object_unref (client);
@@ -628,6 +639,8 @@ activate_settings_daemon (GdmGreeterSession *session)
DBusError local_error;
DBusConnection *connection;
+ gdm_profile_start (NULL);
+
g_debug ("GdmGreeterLoginWindow: activating settings daemon");
dbus_error_init (&local_error);
@@ -635,7 +648,7 @@ activate_settings_daemon (GdmGreeterSession *session)
if (connection == NULL) {
g_debug ("Failed to connect to the D-Bus daemon: %s", local_error.message);
dbus_error_free (&local_error);
- return FALSE;
+ goto out;
}
res = send_dbus_string_method (connection,
@@ -648,30 +661,8 @@ activate_settings_daemon (GdmGreeterSession *session)
ret = TRUE;
g_debug ("GdmGreeterLoginWindow: settings daemon started");
out:
- return ret;
-}
-
-static gboolean
-start_settings_daemon (GdmGreeterSession *session)
-{
- GError *error;
- gboolean ret;
+ gdm_profile_end (NULL);
- g_debug ("GdmGreeterSession: Launching settings daemon");
-
- ret = FALSE;
-
- error = NULL;
- g_spawn_command_line_async (LIBEXECDIR "/gnome-settings-daemon --gconf-prefix=/apps/gdm/simple-greeter/settings-manager-plugins", &error);
- if (error != NULL) {
- g_warning ("Error starting settings daemon: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- ret = TRUE;
-
- out:
return ret;
}
@@ -695,10 +686,14 @@ gdm_greeter_session_start (GdmGreeterSession *session,
g_return_val_if_fail (GDM_IS_GREETER_SESSION (session), FALSE);
+ gdm_profile_start (NULL);
+
res = gdm_greeter_client_start (session->priv->client, error);
gdm_session_manager_set_level (session->priv->manager, GDM_SESSION_LEVEL_LOGIN_WINDOW);
+ gdm_profile_end (NULL);
+
return res;
}
diff --git a/gui/simple-greeter/gdm-session-manager.c b/gui/simple-greeter/gdm-session-manager.c
index 80fbb4c3..a4b44ba9 100644
--- a/gui/simple-greeter/gdm-session-manager.c
+++ b/gui/simple-greeter/gdm-session-manager.c
@@ -31,6 +31,7 @@
#include "gdm-session-manager.h"
#include "gdm-marshal.h"
+#include "gdm-profile.h"
#define GDM_SESSION_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SESSION_MANAGER, GdmSessionManagerPrivate))
@@ -294,6 +295,8 @@ _change_level (GdmSessionManager *manager,
GList *list;
guint old_level;
+ gdm_profile_start (NULL);
+
g_debug ("GdmSessionManager: Changing level to %u", (guint)new_level);
/* unlike some other run level systems
@@ -371,6 +374,8 @@ _change_level (GdmSessionManager *manager,
ndata->func (manager, TRUE, ndata->data);
}
}
+
+ gdm_profile_end (NULL);
}
void
@@ -383,7 +388,9 @@ gdm_session_manager_set_level (GdmSessionManager *manager,
return;
}
+ gdm_profile_start (NULL);
_change_level (manager, level);
+ gdm_profile_end (NULL);
}
static void
diff --git a/gui/simple-greeter/greeter-main.c b/gui/simple-greeter/greeter-main.c
index 75985d29..4e5e98e3 100644
--- a/gui/simple-greeter/greeter-main.c
+++ b/gui/simple-greeter/greeter-main.c
@@ -36,6 +36,7 @@
#include "gdm-signal-handler.h"
#include "gdm-settings-client.h"
#include "gdm-settings-keys.h"
+#include "gdm-profile.h"
#include "gdm-greeter-session.h"
@@ -202,6 +203,8 @@ load_a11y (void)
gboolean a_t_support;
GConfClient *gconf_client;
+ gdm_profile_start (NULL);
+
gconf_client = gconf_client_get_default ();
env_a_t_support = g_getenv ("GNOME_ACCESSIBILITY");
@@ -217,6 +220,8 @@ load_a11y (void)
}
g_object_unref (gconf_client);
+
+ gdm_profile_end (NULL);
}
@@ -295,10 +300,12 @@ main (int argc, char *argv[])
g_type_init ();
+ gdm_profile_start ("Initializing settings client");
if (! gdm_settings_client_init (GDMCONFDIR "/gdm.schemas", "/")) {
g_critical ("Unable to initialize settings client");
exit (1);
}
+ gdm_profile_end ("Initializing settings client");
g_debug ("Greeter session pid=%d display=%s xauthority=%s",
(int)getpid (),
@@ -325,11 +332,13 @@ main (int argc, char *argv[])
gdm_signal_handler_add (signal_handler, SIGHUP, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL);
+ gdm_profile_start ("Creating new greeter session");
session = gdm_greeter_session_new ();
if (session == NULL) {
g_critical ("Unable to create greeter session");
exit (1);
}
+ gdm_profile_end ("Creating new greeter session");
error = NULL;
res = gdm_greeter_session_start (session, &error);