summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@ximian.com>2005-07-20 02:11:37 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2005-07-20 02:11:37 +0000
commit78d3db9fad6872b959f54706f43f57660b0d1377 (patch)
tree0b4bbac0588228bf5e4ef4e7fe8f99edcecb44d0 /gtk
parentc45de61fcba14d0d9852b52c968c51bfce5b652c (diff)
downloadgdk-pixbuf-78d3db9fad6872b959f54706f43f57660b0d1377.tar.gz
Added a few utility functions for profiling; instrument the code, make it
2005-07-19 Federico Mena Quintero <federico@ximian.com> * gtk/gtkfilechooserdefault.c: Added a few utility functions for profiling; instrument the code, make it conditional.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkfilechooserdefault.c177
1 files changed, 166 insertions, 11 deletions
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index a04a3b42a..3bcaccb1e 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -79,6 +79,56 @@
#include <string.h>
#include <time.h>
+
+
+/* Profiling stuff */
+
+#undef PROFILE_FILE_CHOOSER
+#ifdef PROFILE_FILE_CHOOSER
+#include <unistd.h>
+
+#define PROFILE_INDENT 4
+static int profile_indent;
+
+static void
+profile_add_indent (int indent)
+{
+ profile_indent += indent;
+ if (profile_indent < 0)
+ g_error ("You screwed up your indentation");
+}
+
+void
+_gtk_file_chooser_profile_log (const char *func, int indent, const char *msg1, const char *msg2)
+{
+ char *str;
+
+ if (indent < 0)
+ profile_add_indent (indent);
+
+ if (profile_indent == 0)
+ str = g_strdup_printf ("MARK: %s %s %s", func, msg1 ? msg1 : "", msg2 ? msg2 : "");
+ else
+ str = g_strdup_printf ("MARK: %*c %s %s %s", profile_indent - 1, ' ', func, msg1 ? msg1 : "", msg2 ? msg2 : "");
+
+ access (str, F_OK);
+ g_free (str);
+
+ if (indent > 0)
+ profile_add_indent (indent);
+}
+
+#define profile_start(x, y) _gtk_file_chooser_profile_log (G_STRFUNC, PROFILE_INDENT, x, y)
+#define profile_end(x, y) _gtk_file_chooser_profile_log (G_STRFUNC, -PROFILE_INDENT, x, y)
+#define profile_msg(x, y) _gtk_file_chooser_profile_log (NULL, 0, x, y)
+#else
+#define profile_start(x, y)
+#define profile_end(x, y)
+#define profile_msg(x, y)
+#endif
+
+
+
typedef struct _GtkFileChooserDefaultClass GtkFileChooserDefaultClass;
#define GTK_FILE_CHOOSER_DEFAULT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FILE_CHOOSER_DEFAULT, GtkFileChooserDefaultClass))
@@ -1011,6 +1061,8 @@ change_folder_and_display_error (GtkFileChooserDefault *impl,
gboolean result;
GtkFilePath *path_copy;
+ profile_start ("start", (char *) path);
+
/* We copy the path because of this case:
*
* list_row_activated()
@@ -1030,6 +1082,8 @@ change_folder_and_display_error (GtkFileChooserDefault *impl,
gtk_file_path_free (path_copy);
+ profile_end ("end", (char *) path);
+
return result;
}
@@ -1094,8 +1148,10 @@ shortcuts_reload_icons (GtkFileChooserDefault *impl)
{
GtkTreeIter iter;
+ profile_start ("start", NULL);
+
if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (impl->shortcuts_model), &iter))
- return;
+ goto out;
do {
gpointer data;
@@ -1135,6 +1191,10 @@ shortcuts_reload_icons (GtkFileChooserDefault *impl)
g_object_unref (pixbuf);
}
} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model),&iter));
+
+ out:
+
+ profile_end ("end", NULL);
}
static void
@@ -1179,6 +1239,8 @@ get_file_info (GtkFileSystem *file_system,
GtkFileInfo *info;
GError *tmp = NULL;
+ profile_start ("start", (char *) path);
+
parent_path = NULL;
info = NULL;
@@ -1210,6 +1272,8 @@ get_file_info (GtkFileSystem *file_system,
g_error_free (tmp);
}
+ profile_end ("end", (char *) path);
+
return info;
}
@@ -1221,11 +1285,18 @@ check_is_folder (GtkFileSystem *file_system,
{
GtkFileFolder *folder;
+ profile_start ("start", (char *) path);
+
folder = gtk_file_system_get_folder (file_system, path, 0, error);
if (!folder)
- return FALSE;
+ {
+ profile_end ("end - is not folder", (char *) path);
+ return FALSE;
+ }
g_object_unref (folder);
+
+ profile_end ("end", (char *) path);
return TRUE;
}
@@ -1247,6 +1318,8 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
gpointer data;
GtkTreeIter iter;
+ profile_start ("start", is_volume ? "volume" : (char *) path);
+
if (is_volume)
{
data = volume;
@@ -1257,7 +1330,10 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
else
{
if (!check_is_folder (impl->file_system, path, error))
- return FALSE;
+ {
+ profile_end ("end - is not folder", NULL);
+ return FALSE;
+ }
if (label)
label_copy = g_strdup (label);
@@ -1266,7 +1342,10 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
GtkFileInfo *info = get_file_info (impl->file_system, path, TRUE, error);
if (!info)
- return FALSE;
+ {
+ profile_end ("end - could not get info", (char *) path);
+ return FALSE;
+ }
label_copy = g_strdup (gtk_file_info_get_display_name (info));
gtk_file_info_free (info);
@@ -1296,6 +1375,8 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
if (pixbuf)
g_object_unref (pixbuf);
+ profile_end ("end", NULL);
+
return TRUE;
}
@@ -1307,9 +1388,14 @@ shortcuts_append_home (GtkFileChooserDefault *impl)
GtkFilePath *home_path;
GError *error;
+ profile_start ("start", NULL);
+
home = g_get_home_dir ();
if (home == NULL)
- return;
+ {
+ profile_end ("end - no home directory!?", NULL);
+ return;
+ }
home_path = gtk_file_system_filename_to_path (impl->file_system, home);
@@ -1319,6 +1405,8 @@ shortcuts_append_home (GtkFileChooserDefault *impl)
error_getting_info_dialog (impl, home_path, error);
gtk_file_path_free (home_path);
+
+ profile_end ("end", NULL);
}
/* Appends the ~/Desktop directory to the shortcuts model */
@@ -1328,12 +1416,17 @@ shortcuts_append_desktop (GtkFileChooserDefault *impl)
char *name;
GtkFilePath *path;
+ profile_start ("start", NULL);
+
#ifdef G_OS_WIN32
name = _gtk_file_system_win32_get_desktop ();
#else
const char *home = g_get_home_dir ();
if (home == NULL)
- return;
+ {
+ profile_end ("end - no home directory!?", NULL);
+ return;
+ }
name = g_build_filename (home, "Desktop", NULL);
#endif
@@ -1347,6 +1440,8 @@ shortcuts_append_desktop (GtkFileChooserDefault *impl)
*/
gtk_file_path_free (path);
+
+ profile_end ("end", NULL);
}
/* Appends a list of GtkFilePath to the shortcuts model; returns how many were inserted */
@@ -1358,6 +1453,8 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
int num_inserted;
gchar *label;
+ profile_start ("start", NULL);
+
/* As there is no separator now, we want to start there.
*/
start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR);
@@ -1384,6 +1481,8 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
g_free (label);
}
+ profile_end ("end", NULL);
+
return num_inserted;
}
@@ -1475,6 +1574,8 @@ shortcuts_add_volumes (GtkFileChooserDefault *impl)
int n;
gboolean old_changing_folders;
+ profile_start ("start", NULL);
+
old_changing_folders = impl->changing_folder;
impl->changing_folder = TRUE;
@@ -1518,6 +1619,8 @@ shortcuts_add_volumes (GtkFileChooserDefault *impl)
gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_filter_model));
impl->changing_folder = old_changing_folders;
+
+ profile_end ("end", NULL);
}
/* Inserts a separator node in the shortcuts list */
@@ -1550,6 +1653,8 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl)
GtkFilePath *combo_selected = NULL;
gboolean is_volume;
gpointer col_data;
+
+ profile_start ("start", NULL);
old_changing_folders = impl->changing_folder;
impl->changing_folder = TRUE;
@@ -1613,6 +1718,8 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl)
}
impl->changing_folder = old_changing_folders;
+
+ profile_end ("end", NULL);
}
/* Appends a separator and a row to the shortcuts list for the current folder */
@@ -4506,6 +4613,8 @@ gtk_file_chooser_default_style_set (GtkWidget *widget,
{
GtkFileChooserDefault *impl;
+ profile_start ("start", NULL);
+
impl = GTK_FILE_CHOOSER_DEFAULT (widget);
if (GTK_WIDGET_CLASS (parent_class)->style_set)
@@ -4515,6 +4624,8 @@ gtk_file_chooser_default_style_set (GtkWidget *widget,
change_icon_theme (impl);
g_signal_emit_by_name (widget, "default-size-changed");
+
+ profile_end ("end", NULL);
}
static void
@@ -4587,6 +4698,8 @@ gtk_file_chooser_default_map (GtkWidget *widget)
{
GtkFileChooserDefault *impl;
+ profile_start ("start", NULL);
+
impl = GTK_FILE_CHOOSER_DEFAULT (widget);
GTK_WIDGET_CLASS (parent_class)->map (widget);
@@ -4598,6 +4711,8 @@ gtk_file_chooser_default_map (GtkWidget *widget)
}
bookmarks_changed_cb (impl->file_system, impl);
+
+ profile_end ("end", NULL);
}
static gboolean
@@ -4776,6 +4891,8 @@ load_timeout_cb (gpointer data)
{
GtkFileChooserDefault *impl;
+ profile_start ("start", NULL);
+
GDK_THREADS_ENTER ();
impl = GTK_FILE_CHOOSER_DEFAULT (data);
@@ -4790,6 +4907,8 @@ load_timeout_cb (gpointer data)
GDK_THREADS_LEAVE ();
+ profile_end ("end", NULL);
+
return FALSE;
}
@@ -4886,12 +5005,20 @@ show_and_select_paths (GtkFileChooserDefault *impl,
gboolean have_hidden;
gboolean have_filtered;
+ profile_start ("start", NULL);
+
if (!only_one_path && !paths)
- return TRUE;
+ {
+ profile_end ("end", NULL);
+ return TRUE;
+ }
folder = gtk_file_system_get_folder (impl->file_system, parent_path, GTK_FILE_INFO_IS_HIDDEN, error);
if (!folder)
- return FALSE;
+ {
+ profile_end ("end", NULL);
+ return FALSE;
+ }
success = FALSE;
have_hidden = FALSE;
@@ -4944,7 +5071,10 @@ show_and_select_paths (GtkFileChooserDefault *impl,
g_object_unref (folder);
if (!success)
- return FALSE;
+ {
+ profile_end ("end", NULL);
+ return FALSE;
+ }
if (have_hidden)
g_object_set (impl, "show-hidden", TRUE, NULL);
@@ -4967,6 +5097,7 @@ show_and_select_paths (GtkFileChooserDefault *impl,
}
}
+ profile_end ("end", NULL);
return TRUE;
}
@@ -5012,6 +5143,8 @@ static void
browse_files_model_finished_loading_cb (GtkFileSystemModel *model,
GtkFileChooserDefault *impl)
{
+ profile_start ("start", NULL);
+
if (impl->load_state == LOAD_PRELOAD)
{
load_remove_timer (impl);
@@ -5026,6 +5159,7 @@ browse_files_model_finished_loading_cb (GtkFileSystemModel *model,
/* We can't g_assert_not_reached(), as something other than us may have
* initiated a folder reload. See #165556.
*/
+ profile_end ("end", NULL);
return;
}
@@ -5035,6 +5169,8 @@ browse_files_model_finished_loading_cb (GtkFileSystemModel *model,
pending_select_paths_process (impl);
set_busy_cursor (impl, FALSE);
+
+ profile_end ("end", NULL);
}
/* Gets rid of the old list model and creates a new one for the current folder */
@@ -5044,6 +5180,8 @@ set_list_model (GtkFileChooserDefault *impl,
{
g_assert (impl->current_folder != NULL);
+ profile_start ("start", NULL);
+
load_remove_timer (impl); /* This changes the state to LOAD_EMPTY */
if (impl->browse_files_model)
@@ -5068,6 +5206,7 @@ set_list_model (GtkFileChooserDefault *impl,
if (!impl->browse_files_model)
{
set_busy_cursor (impl, FALSE);
+ profile_end ("end", NULL);
return FALSE;
}
@@ -5080,6 +5219,8 @@ set_list_model (GtkFileChooserDefault *impl,
install_list_model_filter (impl);
+ profile_end ("end", NULL);
+
return TRUE;
}
@@ -5137,6 +5278,8 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
gboolean result;
+ profile_start ("start", (char *) path);
+
g_assert (path != NULL);
if (impl->local_only &&
@@ -5147,15 +5290,22 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
_("Cannot change to folder because it is not local"));
+ profile_end ("end - not local", (char *) path);
return FALSE;
}
/* Test validity of path here. */
if (!check_is_folder (impl->file_system, path, error))
- return FALSE;
+ {
+ profile_end ("end - not a folder", (char *) path);
+ return FALSE;
+ }
if (!_gtk_path_bar_set_path (GTK_PATH_BAR (impl->browse_path_bar), path, keep_trail, error))
- return FALSE;
+ {
+ profile_end ("end - could not set path bar", (char *) path);
+ return FALSE;
+ }
if (impl->current_folder != path)
{
@@ -5198,6 +5348,7 @@ gtk_file_chooser_default_update_current_folder (GtkFileChooser *chooser,
g_signal_emit_by_name (impl, "selection-changed", 0);
+ profile_end ("end", NULL);
return result;
}
@@ -6691,6 +6842,8 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
GdkPixbuf *pixbuf;
const GtkFileInfo *info;
gboolean sensitive = TRUE;
+
+ profile_start ("start", NULL);
info = get_list_file_info (impl, iter);
@@ -6722,6 +6875,8 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
if (pixbuf)
g_object_unref (pixbuf);
+
+ profile_end ("end", NULL);
}
static void