2007-04-19 Federico Mena Quintero * src/nautilus-window-manage-views.c (location_has_really_changed): Checkpoint this function. (update_for_new_location): Checkpoint this function. * libnautilus-private/nautilus-metafile.c (metafile_read_restart): Checkpoint this function. (metafile_read_done_callback): Checkpoint this function. * src/file-manager/fm-directory-view.c (load_directory): Checkpoint this function. (finish_loading): Checkpoint this function. * libnautilus-private/nautilus-directory.c (nautilus_directory_new): Checkpoint this function. * src/nautilus-window.c (nautilus_window_size_request): Checkpoint this function. (nautilus_window_realize): Checkpoint this function. (nautilus_window_size_allocate): New function; just used as a checkpoint. (nautilus_window_map): Likewise. (nautilus_window_show): Checkpoint this function. * libnautilus-private/nautilus-directory-async.c (start_monitoring_file_list): Checkpoint the start of a directory load. (directory_load_callback): Checkpoint the end of the load. (directory_count_start): Checkpoint the start of a directory load. (directory_count_callback): Checkpoint the end of a load. (deep_count_load): Checkpoint the start of a directory load. (deep_count_callback): Checkpoint the end of a load. (mime_list_load): Checkpoint the start of a directory load. (mime_list_callback): Checkpoint the end of a load. * libnautilus-private/nautilus-debug-log.h (NAUTILUS_DEBUG_LOG_DOMAIN_CHECKPOINT): New macro with a "checkpoint" domain for profiiling. (nautilus_checkpoint): New prototype. * libnautilus-private/nautilus-debug-log.c (nautilus_debug_logv): If the domain is "checkpoint", do an access() call to pick it up later with strace. (nautilus_checkpoint): New function; logs a non-milestone message on the "checkpoint" domain. * libnautilus-private/nautilus-module.c (load_module_dir): Checkpoint the start/end of loading a module. * src/nautilus-application.c (nautilus_application_instance_init): Checkpoint this function, and the block where we launch the volume monitor. (nautilus_application_startup): Checkpoint this function. * src/nautilus-main.c (main): Checkpoint where we call gtk_main(). * src/nautilus-desktop-window.c (nautilus_desktop_window_new): Checkpoint this function. * libnautilus-private/nautilus-icon-container.c (nautilus_icon_container_instance_init): Checkpoint this function. (size_allocate): Checkpoint this function. (expose_event): Checkpoint this function. (redo_layout_internal): Checkpoint this function. (schedule_redo_layout): Checkpoint this function. * src/file-manager/fm-icon-view.c (fm_icon_view_add_file): Checkpoint this function. (fm_icon_view_begin_loading): Checkpoint this function. Index: src/nautilus-application.c =================================================================== --- src/nautilus-application.c (revisión: 12871) +++ src/nautilus-application.c (copia de trabajo) @@ -171,6 +171,8 @@ nautilus_application_get_n_windows (void static void nautilus_application_instance_init (NautilusApplication *application) { + nautilus_checkpoint ("nautilus-application.c: nautilus_application_instance_init() START"); + /* Create an undo manager */ application->undo_manager = nautilus_undo_manager_new (); @@ -181,12 +183,14 @@ nautilus_application_instance_init (Naut * used anymore */ /* Watch for volume unmounts so we can close open windows */ + nautilus_checkpoint ("nautilus-application.c: nautilus_application_instance_init() calling signal_connect on gnome_vfs_get_volume_monitor()"); g_signal_connect_object (gnome_vfs_get_volume_monitor (), "volume_unmounted", G_CALLBACK (volume_unmounted_callback), application, 0); g_signal_connect_object (gnome_vfs_get_volume_monitor (), "volume_pre_unmount", G_CALLBACK (volume_unmounted_callback), application, 0); g_signal_connect_object (gnome_vfs_get_volume_monitor (), "volume_mounted", G_CALLBACK (volume_mounted_callback), application, 0); + nautilus_checkpoint ("nautilus-application.c: nautilus_application_instance_init() finished signal_connect on gnome_vfs_get_volume_monitor()"); /* register views */ fm_icon_view_register (); @@ -203,6 +207,8 @@ nautilus_application_instance_init (Naut /* register property pages */ nautilus_image_properties_page_register (); + + nautilus_checkpoint ("nautilus-application.c: nautilus_application_instance_init() END"); } NautilusApplication * @@ -396,6 +402,8 @@ menu_provider_init_callback (void) static void finish_startup (NautilusApplication *application) { + nautilus_checkpoint ("nautilus-application.c: nautilus-application finish_startup() START"); + /* initialize nautilus modules */ nautilus_module_init (); @@ -412,6 +420,8 @@ finish_startup (NautilusApplication *app /* Initialize the desktop link monitor singleton */ nautilus_desktop_link_monitor_get (); + + nautilus_checkpoint ("nautilus-application.c: nautilus-application finish_startup() END"); } static void @@ -509,12 +519,15 @@ nautilus_application_startup (NautilusAp const CORBA_char *corba_geometry; int num_failures; + nautilus_checkpoint ("nautilus-application.c: nautilus_application_startup() START"); + num_failures = 0; /* Check the user's ~/.nautilus directories and post warnings * if there are problems. */ if (!kill_shell && !check_required_directories (application)) { + nautilus_checkpoint ("nautilus-application.c: nautilus_application_startup() END bailing out"); return; } @@ -682,6 +695,8 @@ nautilus_application_startup (NautilusAp out: CORBA_exception_free (&ev); + + nautilus_checkpoint ("nautilus-application.c: nautilus_application_startup() END"); } Index: src/nautilus-window-manage-views.c =================================================================== --- src/nautilus-window-manage-views.c (revisión: 12871) +++ src/nautilus-window-manage-views.c (copia de trabajo) @@ -1134,6 +1134,8 @@ location_has_really_changed (NautilusWin char *location_copy; if (window->new_content_view != NULL) { + nautilus_checkpoint ("nautilus-window-manage-views.c: location_has_really_changed() setting content view"); + widget = nautilus_view_get_widget (window->new_content_view); /* Switch to the new content view. */ if (widget->parent == NULL) { @@ -1144,15 +1146,19 @@ location_has_really_changed (NautilusWin window->new_content_view = NULL; } + nautilus_checkpoint ("nautilus-window-manage-views.c: location_has_really_changed() updating for new location"); + location_copy = g_strdup (window->details->pending_location); if (window->details->pending_location != NULL) { /* Tell the window we are finished. */ update_for_new_location (window); } + nautilus_checkpoint ("nautilus-window-manage-views.c: location_has_really_changed() freeing location change"); free_location_change (window); if (location_copy != NULL) { + nautilus_checkpoint ("nautilus-window-manage-views.c: location_has_really_changed() emitting loading_uri"); g_signal_emit_by_name (window, "loading_uri", location_copy); g_free (location_copy); @@ -1201,12 +1207,15 @@ update_for_new_location (NautilusWindow NautilusFile *file; NautilusDirectory *directory; gboolean location_really_changed; - + + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() START"); + new_location = window->details->pending_location; window->details->pending_location = NULL; set_displayed_location (window, new_location); + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() updating history"); update_history (window, window->details->location_change_type, new_location); location_really_changed = eel_strcmp (window->details->location, new_location) != 0; @@ -1218,6 +1227,7 @@ update_for_new_location (NautilusWindow /* Create a NautilusFile for this location, so we can catch it * if it goes away. */ + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() setup watch file"); cancel_viewed_file_changed_callback (window); file = nautilus_file_get (window->details->location); nautilus_window_set_viewed_file (window, file); @@ -1229,19 +1239,24 @@ update_for_new_location (NautilusWindow nautilus_file_unref (file); /* Check if we can go up. */ + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() update up button"); update_up_button (window); /* Set up the initial zoom levels */ + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() set zoom levels"); zoom_parameters_changed_callback (window->content_view, window); /* Set up the content view menu for this new location. */ + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() load view as menus"); nautilus_window_load_view_as_menus (window); /* Load menus from nautilus extensions for this location */ + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() load extension menus"); nautilus_window_load_extension_menus (window); if (location_really_changed) { + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() add extra widgets"); remove_extra_location_widgets (window); directory = nautilus_directory_get (window->details->location); @@ -1264,6 +1279,7 @@ update_for_new_location (NautilusWindow #if !NEW_UI_COMPLETE if (NAUTILUS_IS_NAVIGATION_WINDOW (window)) { + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() navigation window"); /* Check if the back and forward buttons need enabling or disabling. */ nautilus_navigation_window_allow_back (NAUTILUS_NAVIGATION_WINDOW (window), NAUTILUS_NAVIGATION_WINDOW (window)->back_list != NULL); nautilus_navigation_window_allow_forward (NAUTILUS_NAVIGATION_WINDOW (window), NAUTILUS_NAVIGATION_WINDOW (window)->forward_list != NULL); @@ -1277,12 +1293,15 @@ update_for_new_location (NautilusWindow } if (NAUTILUS_IS_SPATIAL_WINDOW (window)) { + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() spatial window"); /* Change the location button to match the current location. */ nautilus_spatial_window_set_location_button (NAUTILUS_SPATIAL_WINDOW (window), window->details->location); } #endif + + nautilus_checkpoint ("nautilus-window-manage-view.c: update_for_new_location() END"); } /* A location load previously announced by load_underway Index: src/file-manager/fm-icon-view.c =================================================================== --- src/file-manager/fm-icon-view.c (revisión: 12871) +++ src/file-manager/fm-icon-view.c (copia de trabajo) @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -554,6 +555,7 @@ fm_icon_view_add_file (FMDirectoryView * { FMIconView *icon_view; NautilusIconContainer *icon_container; + char *uri; g_assert (directory == fm_directory_view_get_model (view)); @@ -570,11 +572,17 @@ fm_icon_view_add_file (FMDirectoryView * nautilus_icon_container_reset_scroll_region (icon_container); } + uri = nautilus_file_get_uri (file); + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_add_file(\"%s\") START", uri); + if (nautilus_icon_container_add (icon_container, NAUTILUS_ICON_CONTAINER_ICON_DATA (file), file_has_lazy_position (view, file))) { nautilus_file_ref (file); } + + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_add_file(\"%s\") END", uri); + g_free (uri); } static void @@ -1088,6 +1096,8 @@ fm_icon_view_begin_loading (FMDirectoryV g_return_if_fail (FM_IS_ICON_VIEW (view)); + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() START"); + icon_view = FM_ICON_VIEW (view); file = fm_directory_view_get_directory_as_file (view); icon_container = GTK_WIDGET (get_icon_container (icon_view)); @@ -1096,11 +1106,13 @@ fm_icon_view_begin_loading (FMDirectoryV fm_directory_view_get_allow_moves (view)); /* kill any sound preview process that is ongoing */ + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() preview_audio"); preview_audio (icon_view, NULL, FALSE); /* FIXME bugzilla.gnome.org 45060: Should use methods instead * of hardcoding desktop knowledge in here. */ + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() connect metadata"); if (FM_IS_DESKTOP_ICON_VIEW (view)) { nautilus_connect_desktop_background_to_file_metadata (NAUTILUS_ICON_CONTAINER (icon_container), file); } else { @@ -1120,6 +1132,7 @@ fm_icon_view_begin_loading (FMDirectoryV /* Set up the zoom level from the metadata. */ + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() supports zooming"); if (fm_directory_view_supports_zooming (FM_DIRECTORY_VIEW (icon_view))) { level = nautilus_file_get_integer_metadata (file, @@ -1132,6 +1145,7 @@ fm_icon_view_begin_loading (FMDirectoryV * It's OK not to resort the icons because the * container doesn't have any icons at this point. */ + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() set sort"); sort_name = fm_icon_view_get_directory_sort_by (icon_view, file); set_sort_criterion (icon_view, get_sort_criterion_by_metadata_text (sort_name)); g_free (sort_name); @@ -1139,6 +1153,7 @@ fm_icon_view_begin_loading (FMDirectoryV /* Set the sort direction from the metadata. */ set_sort_reversed (icon_view, fm_icon_view_get_directory_sort_reversed (icon_view, file)); + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() set layout"); nautilus_icon_container_set_keep_aligned (get_icon_container (icon_view), fm_icon_view_get_directory_keep_aligned (icon_view, file)); @@ -1157,7 +1172,10 @@ fm_icon_view_begin_loading (FMDirectoryV fm_icon_view_get_directory_auto_layout (icon_view, file)); /* e.g. keep aligned may have changed */ + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() update layout menus"); update_layout_menus (icon_view); + + nautilus_checkpoint ("fm-icon-view.c: fm_icon_view_begin_loading() END"); } static void Index: src/file-manager/fm-directory-view.c =================================================================== --- src/file-manager/fm-directory-view.c (revisión: 12871) +++ src/file-manager/fm-directory-view.c (copia de trabajo) @@ -8862,10 +8862,15 @@ load_directory (FMDirectoryView *view, NautilusDirectory *old_directory; NautilusFile *old_file; NautilusFileAttributes attributes; + char *uri; g_assert (FM_IS_DIRECTORY_VIEW (view)); g_assert (NAUTILUS_IS_DIRECTORY (directory)); + uri = nautilus_directory_get_uri (directory); + nautilus_checkpoint ("fm-directory-view.c: load_directory(\"%s\")", uri); + g_free (uri); + fm_directory_view_stop (view); fm_directory_view_clear (view); @@ -8930,6 +8935,10 @@ static void finish_loading (FMDirectoryView *view) { NautilusFileAttributes attributes; + char *uri; + + uri = nautilus_directory_get_uri (view->details->model); + nautilus_checkpoint ("fm-directory-view.c: finish_loading(\"%s\") START", uri); nautilus_window_info_report_load_underway (view->details->window, NAUTILUS_VIEW (view)); @@ -8937,11 +8946,14 @@ finish_loading (FMDirectoryView *view) /* Tell interested parties that we've begun loading this directory now. * Subclasses use this to know that the new metadata is now available. */ + nautilus_checkpoint ("fm-directory-view.c: finish_loading() calling fm_directory_view_begin_loading()"); fm_directory_view_begin_loading (view); /* Assume we have now all information to show window */ + nautilus_checkpoint ("fm-directory-view.c: finish_loading() calling nautilus_window_info_show_window()"); nautilus_window_info_show_window (view->details->window); + nautilus_checkpoint ("fm-directory-view.c: finish_loading() checking all files seen"); if (nautilus_directory_are_all_files_seen (view->details->model)) { /* Unschedule a pending update and schedule a new one with the minimal * update interval. This gives the view a short chance at gathering the @@ -8954,6 +8966,7 @@ finish_loading (FMDirectoryView *view) /* Start loading. */ /* Connect handlers to learn about loading progress. */ + nautilus_checkpoint ("fm-directory-view.c: finish_loading() connecting signals"); view->details->done_loading_handler_id = g_signal_connect (view->details->model, "done_loading", G_CALLBACK (done_loading_callback), view); @@ -8966,6 +8979,7 @@ finish_loading (FMDirectoryView *view) * attribute is based on that, and the file's metadata * and possible custom name. */ + nautilus_checkpoint ("fm-directory-view.c: finish_loading() getting required file attributes"); attributes = nautilus_icon_factory_get_required_file_attributes (); attributes |= NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT | NAUTILUS_FILE_ATTRIBUTE_METADATA | @@ -8973,6 +8987,7 @@ finish_loading (FMDirectoryView *view) NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME | NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO; + nautilus_checkpoint ("fm-directory-view.c: finish_loading() adding file monitor"); nautilus_directory_file_monitor_add (view->details->model, &view->details->model, view->details->show_hidden_files, @@ -8986,6 +9001,9 @@ finish_loading (FMDirectoryView *view) view->details->files_changed_handler_id = g_signal_connect (view->details->model, "files_changed", G_CALLBACK (files_changed_callback), view); + + nautilus_checkpoint ("fm-directory-view.c: finish_loading(\"%s\") END", uri); + g_free (uri); } static void Index: src/nautilus-window.c =================================================================== --- src/nautilus-window.c (revisión: 12871) +++ src/nautilus-window.c (copia de trabajo) @@ -57,6 +57,7 @@ #include #endif #include +#include #include #include #include @@ -676,6 +677,8 @@ nautilus_window_show_window (NautilusWin { g_return_if_fail (NAUTILUS_IS_WINDOW (window)); + nautilus_checkpoint ("nautilus-window.c: nautilus_window_show_window(%p) START", window); + EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window, show_window, (window)); @@ -689,6 +692,8 @@ nautilus_window_show_window (NautilusWin nautilus_file_set_has_open_window (window->details->viewed_file, TRUE); } } + + nautilus_checkpoint ("nautilus-window.c: nautilus_window_show_window(%p) END", window); } void @@ -713,6 +718,8 @@ nautilus_window_size_request (GtkWidget g_assert (NAUTILUS_IS_WINDOW (widget)); g_assert (requisition != NULL); + nautilus_checkpoint ("nautilus-window.c: nautilus_window_size_request(%p) START", widget); + GTK_WIDGET_CLASS (nautilus_window_parent_class)->size_request (widget, requisition); screen = gtk_window_get_screen (GTK_WINDOW (widget)); @@ -740,13 +747,40 @@ nautilus_window_size_request (GtkWidget if (requisition->height > (int) max_height) { requisition->height = max_height; } + + nautilus_checkpoint ("nautilus-window.c: nautilus_window_size_request(%p) END", widget); +} + +static void +nautilus_window_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + nautilus_checkpoint ("nautilus-window.c: nautilus_window_size_allocate(%p) START", widget); + + GTK_WIDGET_CLASS (nautilus_window_parent_class)->size_allocate (widget, allocation); + + nautilus_checkpoint ("nautilus-window.c: nautilus_window_size_allocate(%p) END", widget); } static void nautilus_window_realize (GtkWidget *widget) { + nautilus_checkpoint ("nautilus-window.c: nautilus_window_realize(%p) START", widget); + GTK_WIDGET_CLASS (nautilus_window_parent_class)->realize (widget); update_cursor (NAUTILUS_WINDOW (widget)); + + nautilus_checkpoint ("nautilus-window.c: nautilus_window_realize(%p) END", widget); +} + +static void +nautilus_window_map (GtkWidget *widget) +{ + nautilus_checkpoint ("nautilus-window.c: nautilus_window_map(%p) START", widget); + + GTK_WIDGET_CLASS (nautilus_window_parent_class)->map (widget); + + nautilus_checkpoint ("nautilus-window.c: nautilus_window_map(%p) END", widget); } static gboolean @@ -1312,11 +1346,15 @@ nautilus_window_show (GtkWidget *widget) { NautilusWindow *window; + nautilus_checkpoint ("nautilus-window.c: nautilus_window_show(%p) START", widget); + window = NAUTILUS_WINDOW (widget); GTK_WIDGET_CLASS (nautilus_window_parent_class)->show (widget); nautilus_window_ui_update (window); + + nautilus_checkpoint ("nautilus-window.c: nautilus_window_show(%p) END", widget); } GtkUIManager * @@ -1624,7 +1662,9 @@ nautilus_window_class_init (NautilusWind GTK_OBJECT_CLASS (class)->destroy = nautilus_window_destroy; GTK_WIDGET_CLASS (class)->show = nautilus_window_show; GTK_WIDGET_CLASS (class)->size_request = nautilus_window_size_request; + GTK_WIDGET_CLASS (class)->size_allocate = nautilus_window_size_allocate; GTK_WIDGET_CLASS (class)->realize = nautilus_window_realize; + GTK_WIDGET_CLASS (class)->map = nautilus_window_map; GTK_WIDGET_CLASS (class)->key_press_event = nautilus_window_key_press_event; class->add_current_location_to_history_list = real_add_current_location_to_history_list; class->get_title = real_get_title; Index: src/nautilus-desktop-window.c =================================================================== --- src/nautilus-desktop-window.c (revisión: 12871) +++ src/nautilus-desktop-window.c (copia de trabajo) @@ -34,6 +34,7 @@ #include #include #include +#include #include struct NautilusDesktopWindowDetails { @@ -110,6 +111,8 @@ nautilus_desktop_window_new (NautilusApp NautilusDesktopWindow *window; int width_request, height_request; + nautilus_checkpoint ("nautilus-desktop-window.c: nautilus_desktop_window_new() START"); + width_request = gdk_screen_get_width (screen); height_request = gdk_screen_get_height (screen); @@ -131,6 +134,8 @@ nautilus_desktop_window_new (NautilusApp */ nautilus_desktop_window_update_directory (window); + nautilus_checkpoint ("nautilus-desktop-window.c: nautilus_desktop_window_new() END"); + return window; } Index: src/nautilus-main.c =================================================================== --- src/nautilus-main.c (revisión: 12871) +++ src/nautilus-main.c (copia de trabajo) @@ -545,6 +545,7 @@ main (int argc, char *argv[]) we need to check whether the main loop is needed in an idle */ g_idle_add (initial_event_loop_needed, NULL); + nautilus_checkpoint ("nautilus-main.c: STARTING MAIN LOOP!"); gtk_main (); } Index: libnautilus-private/nautilus-directory.c =================================================================== --- libnautilus-private/nautilus-directory.c (revisión: 12871) +++ libnautilus-private/nautilus-directory.c (copia de trabajo) @@ -25,6 +25,7 @@ #include #include "nautilus-directory-private.h" +#include "nautilus-debug-log.h" #include "nautilus-directory-metafile.h" #include "nautilus-directory-notify.h" #include "nautilus-file-attributes.h" @@ -535,6 +536,8 @@ nautilus_directory_new (const char *uri) set_directory_uri (directory, uri); + nautilus_checkpoint ("nautilus-directory.c: nautilus_directory_new(\"%s\") = %p", uri, directory); + return directory; } Index: libnautilus-private/nautilus-directory-async.c =================================================================== --- libnautilus-private/nautilus-directory-async.c (revisión: 12871) +++ libnautilus-private/nautilus-directory-async.c (copia de trabajo) @@ -24,6 +24,7 @@ #include +#include "nautilus-debug-log.h" #include "nautilus-directory-metafile.h" #include "nautilus-directory-notify.h" #include "nautilus-directory-private.h" @@ -1058,6 +1059,8 @@ directory_load_callback (GnomeVFSAsyncHa if (nautilus_directory_file_list_length_reached (directory) || result != GNOME_VFS_OK) { + nautilus_checkpoint ("nautilus-directory-async.c: directory_load_callback(\"%s\") END", + directory->details->uri); directory_load_done (directory, result); } @@ -1460,6 +1463,7 @@ directory_count_callback (GnomeVFSAsyncH count_file->details->got_directory_count = FALSE; count_file->details->directory_count = 0; } else { + nautilus_checkpoint ("nautilus-directory-async.c: directory_count_callback END"); count_file->details->directory_count_failed = FALSE; count_file->details->got_directory_count = TRUE; count_file->details->directory_count = count_non_skipped_files (list); @@ -2106,6 +2110,8 @@ start_monitoring_file_list (NautilusDire #ifdef DEBUG_LOAD_DIRECTORY g_message ("load_directory called to monitor file list of %s", directory->details->uri); #endif + nautilus_checkpoint ("nautilus-directory-async.c: async_load_directory (directory_load_callback, \"%s\") START", + directory->details->uri); gnome_vfs_async_load_directory (&directory->details->directory_load_in_progress, /* handle */ directory->details->uri, /* uri */ @@ -2328,6 +2334,8 @@ directory_count_start (NautilusDirectory #ifdef DEBUG_LOAD_DIRECTORY g_message ("load_directory called to get shallow file count for %s", uri); #endif + nautilus_checkpoint ("nautilus-directory-async.c: async_load_directory (directory_count_callback, \"%s\") START", + uri); gnome_vfs_async_load_directory (&directory->details->count_in_progress, uri, @@ -2401,6 +2409,8 @@ deep_count_callback (GnomeVFSAsyncHandle if (result != GNOME_VFS_OK) { if (result != GNOME_VFS_ERROR_EOF) { file->details->deep_unreadable_count += 1; + } else { + nautilus_checkpoint ("nautilus-directory-async.c: deep_count_callback END"); } directory->details->deep_count_in_progress = NULL; @@ -2440,6 +2450,8 @@ deep_count_load (NautilusDirectory *dire #ifdef DEBUG_LOAD_DIRECTORY g_message ("load_directory called to get deep file count for %s", uri); #endif + nautilus_checkpoint ("nautilus-directory-async.c: async_load_directory (deep_count_callback, \"%s\") START", + uri); gnome_vfs_async_load_directory (&directory->details->deep_count_in_progress, uri, @@ -2561,6 +2573,7 @@ mime_list_callback (GnomeVFSAsyncHandle file->details->mime_list_failed = TRUE; file->details->mime_list = NULL; } else { + nautilus_checkpoint ("nautilus-directory-async.c: mime_list_callback END"); file->details->got_mime_list = TRUE; file->details->mime_list = istr_set_get_as_list (directory->details->mime_list_hash); @@ -2591,6 +2604,8 @@ mime_list_load (NautilusDirectory *direc #ifdef DEBUG_LOAD_DIRECTORY g_message ("load_directory called to get MIME list of %s", uri); #endif + nautilus_checkpoint ("nautilus-directory-async.c: async_load_directory (mime_list_callback, \"%s\") START", + uri); gnome_vfs_async_load_directory (&directory->details->mime_list_in_progress, uri, @@ -3412,6 +3427,7 @@ nautilus_directory_async_state_changed ( directory->details->state_changed = TRUE; return; } + directory->details->in_async_service_loop = TRUE; nautilus_directory_ref (directory); do { Index: libnautilus-private/nautilus-metafile.c =================================================================== --- libnautilus-private/nautilus-metafile.c (revisión: 12871) +++ libnautilus-private/nautilus-metafile.c (copia de trabajo) @@ -24,6 +24,7 @@ #include #include "nautilus-metafile.h" +#include "nautilus-debug-log.h" #include "nautilus-directory.h" #include "nautilus-directory.h" #include "nautilus-file-private.h" @@ -1893,9 +1894,16 @@ metafile_read_done_callback (GnomeVFSRes metafile = NAUTILUS_METAFILE (callback_data); g_assert (metafile->details->xml == NULL); + nautilus_checkpoint ("nautilus-metafile.c: metafile_read_done_callback (\"%s\") START", + metafile->details->private_uri); + if (result != GNOME_VFS_OK) { g_assert (file_contents == NULL); metafile_read_failed (metafile); + + nautilus_checkpoint ("nautilus-metafile.c: metafile_read_done_callback (\"%s\") END", + metafile->details->private_uri); + return; } @@ -1903,6 +1911,10 @@ metafile_read_done_callback (GnomeVFSRes if ((GnomeVFSFileSize) size != file_size) { g_free (file_contents); metafile_read_failed (metafile); + + nautilus_checkpoint ("nautilus-metafile.c: metafile_read_done_callback (\"%s\") END", + metafile->details->private_uri); + return; } @@ -1913,11 +1925,17 @@ metafile_read_done_callback (GnomeVFSRes g_free (buffer); metafile_read_done (metafile); + + nautilus_checkpoint ("nautilus-metafile.c: metafile_read_done_callback (\"%s\") END", + metafile->details->private_uri); } static void metafile_read_restart (NautilusMetafile *metafile) { + nautilus_checkpoint ("nautilus-metafile.c: metafile_read_restart(\"%s\")", + metafile->details->private_uri); + metafile->details->read_state->handle = eel_read_entire_file_async (metafile->details->private_uri, GNOME_VFS_PRIORITY_DEFAULT, Index: libnautilus-private/nautilus-icon-container.c =================================================================== --- libnautilus-private/nautilus-icon-container.c (revisión: 12871) +++ libnautilus-private/nautilus-icon-container.c (copia de trabajo) @@ -1637,6 +1637,8 @@ lay_down_icons (NautilusIconContainer *c static void redo_layout_internal (NautilusIconContainer *container) { + nautilus_checkpoint ("nautilus-icon-container.c: redo_layout_internal() START"); + finish_adding_new_icons (container); /* Don't do any re-laying-out during stretching. Later we @@ -1655,6 +1657,8 @@ redo_layout_internal (NautilusIconContai process_pending_icon_to_reveal (container); process_pending_icon_to_rename (container); nautilus_icon_container_update_visible_icons (container); + + nautilus_checkpoint ("nautilus-icon-container.c: redo_layout_internal() END"); } static gboolean @@ -1683,6 +1687,7 @@ schedule_redo_layout (NautilusIconContai { if (container->details->idle_id == 0 && container->details->has_been_allocated) { + nautilus_checkpoint ("nautilus-icon-container.c: schedule_redo_layout()"); container->details->idle_id = g_idle_add (redo_layout_callback, container); } @@ -3091,6 +3096,8 @@ size_allocate (GtkWidget *widget, NautilusIconContainer *container; gboolean need_layout_redone; + nautilus_checkpoint ("nautilus-icon-container.c: size_allocate() START"); + container = NAUTILUS_ICON_CONTAINER (widget); need_layout_redone = !container->details->has_been_allocated; @@ -3106,6 +3113,8 @@ size_allocate (GtkWidget *widget, if (need_layout_redone) { redo_layout (container); } + + nautilus_checkpoint ("nautilus-icon-container.c: size_allocate() END"); } static void @@ -3115,6 +3124,8 @@ realize (GtkWidget *widget) GdkBitmap *stipple; GtkAdjustment *vadj; + nautilus_checkpoint ("nautilus-icon-container.c: realize() START"); + GTK_WIDGET_CLASS (parent_class)->realize (widget); /* Set up DnD. */ @@ -3136,6 +3147,7 @@ realize (GtkWidget *widget) g_signal_connect (vadj, "value_changed", G_CALLBACK (handle_vadjustment_changed), widget); + nautilus_checkpoint ("nautilus-icon-container.c: realize() END"); } static void @@ -3174,6 +3186,8 @@ style_set (GtkWidget *widget, { NautilusIconContainer *container; gboolean frame_text; + + nautilus_checkpoint ("nautilus-icon-container.c: style_set() START"); container = NAUTILUS_ICON_CONTAINER (widget); @@ -3191,6 +3205,8 @@ style_set (GtkWidget *widget, } GTK_WIDGET_CLASS (parent_class)->style_set (widget, previous_style); + + nautilus_checkpoint ("nautilus-icon-container.c: style_set() END"); } static gboolean @@ -4465,12 +4481,23 @@ static gboolean expose_event (GtkWidget *widget, GdkEventExpose *event) { + gboolean retval; + /* g_warning ("Expose Icon Container %p '%d,%d: %d,%d'", widget, event->area.x, event->area.y, event->area.width, event->area.height); */ - - return GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); + + nautilus_checkpoint ("nautilus-icon-container.c: expose_event(x=%d, y=%d, w=%d, h=%d)", + event->area.x, + event->area.y, + event->area.width, + event->area.height); + + retval = GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); + + nautilus_checkpoint ("nautilus-icon-container.c: finished expose_event()"); + return retval; } static AtkObject * @@ -5025,7 +5052,9 @@ nautilus_icon_container_instance_init (N { NautilusIconContainerDetails *details; EelBackground *background; - + + nautilus_checkpoint ("nautilus-icon-container.c: nautilus_icon_container_instance_init() START"); + details = g_new0 (NautilusIconContainerDetails, 1); details->icon_set = g_hash_table_new (g_direct_hash, g_direct_equal); @@ -5067,6 +5096,8 @@ nautilus_icon_container_instance_init (N eel_preferences_add_callback (NAUTILUS_PREFERENCES_THEME, nautilus_icon_container_theme_changed, container); + + nautilus_checkpoint ("nautilus-icon-container.c: nautilus_icon_container_instance_init() END"); } typedef struct { @@ -5836,13 +5867,20 @@ static void finish_adding_icon (NautilusIconContainer *container, NautilusIcon *icon) { + nautilus_checkpoint ("nautilus-icon-container.c: finish_adding_icon() START"); + nautilus_icon_container_update_icon (container, icon); + + nautilus_checkpoint ("nautilus-icon-container.c: finish_adding_icon() eel_canvas_item_show() START"); eel_canvas_item_show (EEL_CANVAS_ITEM (icon->item)); + nautilus_checkpoint ("nautilus-icon-container.c: finish_adding_icon() eel_canvas_item_show() END"); g_signal_connect_object (icon->item, "event", G_CALLBACK (item_event_callback), container, 0); g_signal_emit (container, signals[ICON_ADDED], 0, icon->data); + + nautilus_checkpoint ("nautilus-icon-container.c: finish_adding_icon() END"); } static void @@ -5852,10 +5890,13 @@ finish_adding_new_icons (NautilusIconCon NautilusIcon *icon; double bottom; + nautilus_checkpoint ("nautilus-icon-container.c: finish_adding_new_icons() START"); + new_icons = container->details->new_icons; container->details->new_icons = NULL; /* Position most icons (not unpositioned manual-layout icons). */ + new_icons = g_list_reverse (new_icons); no_position_icons = semi_position_icons = NULL; for (p = new_icons; p != NULL; p = p->next) { @@ -5925,6 +5966,8 @@ finish_adding_new_icons (NautilusIconCon lay_down_icons (container, no_position_icons, bottom + ICON_PAD_BOTTOM); g_list_free (no_position_icons); } + + nautilus_checkpoint ("nautilus-icon-container.c: finish_adding_new_icons() END"); } /** Index: libnautilus-private/nautilus-module.c =================================================================== --- libnautilus-private/nautilus-module.c (revisión: 12871) +++ libnautilus-private/nautilus-module.c (copia de trabajo) @@ -27,6 +27,7 @@ #include #include #include +#include "nautilus-debug-log.h" #define NAUTILUS_TYPE_MODULE (nautilus_module_get_type ()) #define NAUTILUS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_MODULE, NautilusModule)) @@ -196,7 +197,9 @@ load_module_dir (const char *dirname) filename = g_build_filename (dirname, name, NULL); + nautilus_checkpoint ("nautilus-module.c: calling nautilus_module_load_file (%s)", filename); nautilus_module_load_file (filename); + nautilus_checkpoint ("nautilus-module.c: finished nautilus_module_load_file (%s)", filename); g_free (filename); } } Index: libnautilus-private/nautilus-debug-log.c =================================================================== --- libnautilus-private/nautilus-debug-log.c (revisión: 12871) +++ libnautilus-private/nautilus-debug-log.c (copia de trabajo) @@ -153,6 +153,16 @@ nautilus_debug_logv (gboolean is_milesto goto out; str = g_strdup_vprintf (format, args); + + if (strcmp (domain, NAUTILUS_DEBUG_LOG_DOMAIN_CHECKPOINT) == 0) { + char *checkpoint_str; + + checkpoint_str = g_strdup_printf ("MARK: %s: %s", g_get_prgname(), str); + access (checkpoint_str, F_OK); + g_free (checkpoint_str); + + } + gettimeofday (&tv, NULL); tm = *localtime (&tv.tv_sec); @@ -690,3 +700,26 @@ nautilus_debug_log_clear (void) out: unlock (); } + +/** + * nautilus_checkpoint: + * @format: Format string + * @...: Arguments for format string + * + * Logs a non-milestone message to the debug log under the + * NAUTILUS_DEBUG_DOMAIN_CHECKPOINT domain, and also does an access(2) call of + * this form: + * + * access ("MARK: nautilus: ", F_OK) + * + * This call can be searched for in strace logs for profiling purposes. + **/ +void +nautilus_checkpoint (const char *format, ...) +{ + va_list args; + + va_start (args, format); + nautilus_debug_logv (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_CHECKPOINT, NULL, format, args); + va_end (args); +} Index: libnautilus-private/nautilus-debug-log.h =================================================================== --- libnautilus-private/nautilus-debug-log.h (revisión: 12871) +++ libnautilus-private/nautilus-debug-log.h (copia de trabajo) @@ -30,6 +30,7 @@ #define NAUTILUS_DEBUG_LOG_DOMAIN_USER "USER" /* always enabled */ #define NAUTILUS_DEBUG_LOG_DOMAIN_ASYNC "async" /* when asynchronous notifications come in */ #define NAUTILUS_DEBUG_LOG_DOMAIN_GLOG "GLog" /* used for GLog messages; don't use it yourself */ +#define NAUTILUS_DEBUG_LOG_DOMAIN_CHECKPOINT "checkpoint" /* for profiling using strace */ void nautilus_debug_log (gboolean is_milestone, const char *domain, const char *format, ...); @@ -55,4 +56,7 @@ int nautilus_debug_log_get_max_lines (vo /* For testing only */ void nautilus_debug_log_clear (void); +/* For profiling using strace */ +void nautilus_checkpoint (const char *format, ...); + #endif /* NAUTILUS_DEBUG_LOG_H */