X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Fprocesslist.c;h=a482927c7ae0230c71157cb6bf99ece3065e5530;hb=7abb23ad0e7234c65fbd6f1d64ea591de3f98faf;hp=e56911e94d6e4d330ecb4929e705805b2befd3fd;hpb=b27439533c5620fe06b9800fce0bc3592ed2088b;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c index e56911e9..a482927c 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c @@ -32,7 +32,7 @@ * Methods to synchronize process list * *****************************************************************************/ -static __inline guint get_cpu_number_from_name(GQuark name); +//static inline guint get_cpu_number_from_name(GQuark name); /* Enumeration of the columns */ enum @@ -235,31 +235,28 @@ gint process_sort_func ( GtkTreeModel *model, static guint process_list_hash_fct(gconstpointer key) { - guint pid = ((ProcessInfo*)key)->pid; - return ((pid>>8 ^ pid>>4 ^ pid>>2 ^ pid) ^ ((ProcessInfo*)key)->cpu); + guint pid = ((const ProcessInfo*)key)->pid; + return ((pid>>8 ^ pid>>4 ^ pid>>2 ^ pid) ^ ((const ProcessInfo*)key)->cpu); } +/* If hash is good, should be different */ static gboolean process_list_equ_fct(gconstpointer a, gconstpointer b) { const ProcessInfo *pa = (const ProcessInfo*)a; const ProcessInfo *pb = (const ProcessInfo*)b; - if(pa->pid != pb->pid) - return 0; - - if((pa->pid == 0 && (pa->cpu != pb->cpu))) - return 0; - - if(pa->birth.tv_sec != pb->birth.tv_sec) - return 0; - - if(pa->birth.tv_nsec != pb->birth.tv_nsec) - return 0; - - if(pa->trace_num != pb->trace_num) - return 0; - - return 1; + gboolean ret = TRUE; + + if(likely(pa->pid != pb->pid)) + ret = FALSE; + else if(likely((pa->pid == 0 && (pa->cpu != pb->cpu)))) + ret = FALSE; + else if(unlikely(ltt_time_compare(pa->birth, pb->birth) != 0)) + ret = FALSE; + else if(unlikely(pa->trace_num != pb->trace_num)) + ret = FALSE; + + return ret; } void destroy_hash_key(gpointer key); @@ -279,6 +276,8 @@ ProcessList *processlist_construct(void) process_list->number_of_process = 0; process_list->cell_height_cache = -1; + process_list->current_hash_data = NULL; + /* Create the Process list */ process_list->list_store = gtk_list_store_new ( N_COLUMNS, G_TYPE_STRING, @@ -414,6 +413,11 @@ static gboolean remove_hash_item(ProcessInfo *process_info, gtk_list_store_remove (process_list->list_store, &iter); + if(likely(process_list->current_hash_data != NULL)) { + if(likely(hashed_process_data == + process_list->current_hash_data[process_info->cpu])) + process_list->current_hash_data[process_info->cpu] = NULL; + } return TRUE; /* remove the element from the hash table */ } @@ -434,22 +438,6 @@ GtkWidget *processlist_get_widget(ProcessList *process_list) } - -static __inline gint get_cell_height(ProcessList *process_list, GtkTreeView *tree_view) -{ - gint height = process_list->cell_height_cache; - if(height != -1) return height; - else { - GtkTreeViewColumn *Column = gtk_tree_view_get_column(tree_view, 0); - - gtk_tree_view_column_cell_get_size(Column, NULL, NULL, NULL, NULL, - &process_list->cell_height_cache); - } - - - return process_list->cell_height_cache; -} - void destroy_hash_key(gpointer key) { g_free(key); @@ -468,11 +456,13 @@ int processlist_add( ProcessList *process_list, guint trace_num, const gchar *name, guint *height, + ProcessInfo **pm_process_info, HashedProcessData **pm_hashed_process_data) { ProcessInfo *Process_Info = g_new(ProcessInfo, 1); HashedProcessData *hashed_process_data = g_new(HashedProcessData, 1); *pm_hashed_process_data = hashed_process_data; + *pm_process_info = Process_Info; Process_Info->pid = pid; if(pid == 0) @@ -508,7 +498,7 @@ int processlist_add( ProcessList *process_list, PROCESS_COLUMN, name, PID_COLUMN, pid, PPID_COLUMN, ppid, - CPU_COLUMN, get_cpu_number_from_name(cpu), + CPU_COLUMN, cpu, BIRTH_S_COLUMN, birth->tv_sec, BIRTH_NS_COLUMN, birth->tv_nsec, TRACE_COLUMN, trace_num, @@ -543,116 +533,48 @@ int processlist_remove( ProcessList *process_list, LttTime *birth, guint trace_num) { - ProcessInfo Process_Info; - gint *path_indices; + ProcessInfo process_info; HashedProcessData *hashed_process_data; GtkTreeIter iter; - Process_Info.pid = pid; + process_info.pid = pid; if(pid == 0) - Process_Info.cpu = cpu; + process_info.cpu = cpu; else - Process_Info.cpu = 0; - Process_Info.birth = *birth; - Process_Info.trace_num = trace_num; + process_info.cpu = 0; + process_info.birth = *birth; + process_info.trace_num = trace_num; - if(hashed_process_data = + hashed_process_data = (HashedProcessData*)g_hash_table_lookup( process_list->process_hash, - &Process_Info)) + &process_info); + if(likely(hashed_process_data != NULL)) { iter = hashed_process_data->y_iter; gtk_list_store_remove (process_list->list_store, &iter); g_hash_table_remove(process_list->process_hash, - &Process_Info); - - process_list->number_of_process--; - - return 0; - } else { - return 1; - } -} - - -guint processlist_get_height(ProcessList *process_list) -{ - return get_cell_height(process_list, - GTK_TREE_VIEW(process_list->process_list_widget)) - * process_list->number_of_process ; -} + &process_info); + if(likely(process_list->current_hash_data != NULL)) { + if(likely(hashed_process_data == process_list->current_hash_data[cpu])) { + process_list->current_hash_data[cpu] = NULL; + } + } + process_list->number_of_process--; -__inline gint processlist_get_process_pixels( ProcessList *process_list, - guint pid, guint cpu, LttTime *birth, guint trace_num, - guint *y, - guint *height, - HashedProcessData **pm_hashed_process_data) -{ - ProcessInfo Process_Info; - gint *path_indices; - GtkTreePath *tree_path; - HashedProcessData *hashed_process_data = NULL; - - Process_Info.pid = pid; - if(pid == 0) - Process_Info.cpu = cpu; - else - Process_Info.cpu = 0; - Process_Info.birth = *birth; - Process_Info.trace_num = trace_num; - - if(hashed_process_data = - (HashedProcessData*)g_hash_table_lookup( - process_list->process_hash, - &Process_Info)) - { - tree_path = gtk_tree_model_get_path( - GTK_TREE_MODEL(process_list->list_store), - &hashed_process_data->y_iter); - path_indices = gtk_tree_path_get_indices (tree_path); - - *height = get_cell_height(process_list, - GTK_TREE_VIEW(process_list->process_list_widget)); - *y = *height * path_indices[0]; - *pm_hashed_process_data = hashed_process_data; - gtk_tree_path_free(tree_path); - return 0; } else { - *pm_hashed_process_data = hashed_process_data; return 1; } - } -__inline gint processlist_get_pixels_from_data( ProcessList *process_list, - ProcessInfo *process_info, - HashedProcessData *hashed_process_data, - guint *y, - guint *height) -{ - gint *path_indices; - GtkTreePath *tree_path; - - tree_path = gtk_tree_model_get_path(GTK_TREE_MODEL(process_list->list_store), - &hashed_process_data->y_iter); - path_indices = gtk_tree_path_get_indices (tree_path); - - *height = get_cell_height(process_list, - GTK_TREE_VIEW(process_list->process_list_widget)); - *y = *height * path_indices[0]; - gtk_tree_path_free(tree_path); - - return 0; - -} - -static __inline guint get_cpu_number_from_name(GQuark name) +#if 0 +static inline guint get_cpu_number_from_name(GQuark name) { const gchar *string; char *begin; @@ -669,4 +591,4 @@ static __inline guint get_cpu_number_from_name(GQuark name) return cpu; } - +#endif //0