X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Fprocesslist.c;h=a600cfa27476c0cc4155246f0bee725ddb5bd35a;hb=c55068cea542836c1a0898244090ad49135f7800;hp=6edb0c2c4390ff956ccd28e19fc49bf7fa39ab2e;hpb=9d7e0c255f8df252a67f60bbb3ddd8c6b4dde0d9;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 6edb0c2c..a600cfa2 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c @@ -32,7 +32,6 @@ #include "drawitem.h" #define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format) -#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format) /* Preallocated Size of the index_to_pixmap array */ #define ALLOCATE_PROCESSES 1000 @@ -48,35 +47,41 @@ gint process_sort_func ( GtkTreeModel *model, gpointer user_data) { gchar *a_name; - guint a_pid, a_ppid, a_cpu; + gchar *a_brand; + guint a_pid, a_tgid, a_ppid, a_cpu; gulong a_birth_s, a_birth_ns; - gulong a_trace; + guint a_trace; gchar *b_name; - guint b_pid, b_ppid, b_cpu; + gchar *b_brand; + guint b_pid, b_tgid, b_ppid, b_cpu; gulong b_birth_s, b_birth_ns; - gulong b_trace; + guint b_trace; gtk_tree_model_get(model, it_a, - 0, &a_name, - 1, &a_pid, - 2, &a_ppid, - 3, &a_cpu, - 4, &a_birth_s, - 5, &a_birth_ns, - 6, &a_trace, + PROCESS_COLUMN, &a_name, + BRAND_COLUMN, &a_brand, + PID_COLUMN, &a_pid, + TGID_COLUMN, &a_tgid, + PPID_COLUMN, &a_ppid, + CPU_COLUMN, &a_cpu, + BIRTH_S_COLUMN, &a_birth_s, + BIRTH_NS_COLUMN, &a_birth_ns, + TRACE_COLUMN, &a_trace, -1); gtk_tree_model_get(model, it_b, - 0, &b_name, - 1, &b_pid, - 2, &b_ppid, - 3, &b_cpu, - 4, &b_birth_s, - 5, &b_birth_ns, - 6, &b_trace, + PROCESS_COLUMN, &b_name, + BRAND_COLUMN, &b_brand, + PID_COLUMN, &b_pid, + TGID_COLUMN, &b_tgid, + PPID_COLUMN, &b_ppid, + CPU_COLUMN, &b_cpu, + BIRTH_S_COLUMN, &b_birth_s, + BIRTH_NS_COLUMN, &b_birth_ns, + TRACE_COLUMN, &b_trace, -1); @@ -160,6 +165,8 @@ gboolean scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer data) gtk_adjustment_set_value(control_flow_data->v_adjust, gtk_adjustment_get_value(control_flow_data->v_adjust) + cell_height); break; + default: + g_error("should only scroll up and down."); } return TRUE; } @@ -349,12 +356,14 @@ ProcessList *processlist_construct(void) /* Create the Process list */ process_list->list_store = gtk_list_store_new ( N_COLUMNS, G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_ULONG, G_TYPE_ULONG, - G_TYPE_ULONG); + G_TYPE_UINT); process_list->process_list_widget = @@ -391,24 +400,15 @@ ProcessList *processlist_construct(void) renderer = gtk_cell_renderer_text_new (); process_list->renderer = renderer; - gint vertical_separator; - gtk_widget_style_get (GTK_WIDGET (process_list->process_list_widget), - "vertical-separator", &vertical_separator, - NULL); - gtk_cell_renderer_get_size(renderer, - GTK_WIDGET(process_list->process_list_widget), - NULL, - NULL, - NULL, - NULL, - &process_list->cell_height); - - guint ypad; - g_object_get(G_OBJECT(renderer), "ypad", &ypad, NULL); + /* Add a temporary row to the model to get the cell size when the first + * real process is added. */ + GtkTreeIter iter; + GtkTreePath *path; + path = gtk_tree_path_new_first(); + gtk_tree_model_get_iter (gtk_tree_view_get_model(GTK_TREE_VIEW(process_list->process_list_widget)), &iter, path); + gtk_list_store_append(process_list->list_store, &iter); - process_list->cell_height += ypad; - process_list->cell_height += vertical_separator; - + process_list->cell_height = 0; // not ready to get size yet. column = gtk_tree_view_column_new_with_attributes ( "Process", renderer, @@ -416,17 +416,41 @@ ProcessList *processlist_construct(void) PROCESS_COLUMN, NULL); gtk_tree_view_column_set_alignment (column, 0.0); - gtk_tree_view_column_set_fixed_width (column, 45); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); process_list->button = column->button; - + + column = gtk_tree_view_column_new_with_attributes ( "Brand", + renderer, + "text", + BRAND_COLUMN, + NULL); + gtk_tree_view_column_set_alignment (column, 0.0); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_append_column ( + GTK_TREE_VIEW (process_list->process_list_widget), column); + column = gtk_tree_view_column_new_with_attributes ( "PID", renderer, "text", PID_COLUMN, NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_append_column ( + GTK_TREE_VIEW (process_list->process_list_widget), column); + + column = gtk_tree_view_column_new_with_attributes ( "TGID", + renderer, + "text", + TGID_COLUMN, + NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); @@ -435,6 +459,8 @@ ProcessList *processlist_construct(void) "text", PPID_COLUMN, NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); @@ -443,6 +469,8 @@ ProcessList *processlist_construct(void) "text", CPU_COLUMN, NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); @@ -451,6 +479,8 @@ ProcessList *processlist_construct(void) "text", BIRTH_S_COLUMN, NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); @@ -461,6 +491,8 @@ ProcessList *processlist_construct(void) "text", BIRTH_NS_COLUMN, NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); @@ -469,6 +501,8 @@ ProcessList *processlist_construct(void) "text", TRACE_COLUMN, NULL); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); + gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column ( GTK_TREE_VIEW (process_list->process_list_widget), column); @@ -510,8 +544,8 @@ static gboolean remove_hash_item(ProcessInfo *process_info, 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; + process_list->current_hash_data[process_info->trace_num][process_info->cpu])) + process_list->current_hash_data[process_info->trace_num][process_info->cpu] = NULL; } return TRUE; /* remove the element from the hash table */ } @@ -554,6 +588,24 @@ void processlist_set_name(ProcessList *process_list, -1); } +void processlist_set_brand(ProcessList *process_list, + GQuark brand, + HashedProcessData *hashed_process_data) +{ + gtk_list_store_set ( process_list->list_store, &hashed_process_data->y_iter, + BRAND_COLUMN, g_quark_to_string(brand), + -1); +} + +void processlist_set_tgid(ProcessList *process_list, + guint tgid, + HashedProcessData *hashed_process_data) +{ + gtk_list_store_set ( process_list->list_store, &hashed_process_data->y_iter, + TGID_COLUMN, tgid, + -1); +} + void processlist_set_ppid(ProcessList *process_list, guint ppid, HashedProcessData *hashed_process_data) @@ -567,11 +619,13 @@ void processlist_set_ppid(ProcessList *process_list, int processlist_add( ProcessList *process_list, Drawing_t *drawing, guint pid, + guint tgid, guint cpu, guint ppid, LttTime *birth, guint trace_num, GQuark name, + GQuark brand, guint *height, ProcessInfo **pm_process_info, HashedProcessData **pm_hashed_process_data) @@ -580,8 +634,9 @@ int processlist_add( ProcessList *process_list, HashedProcessData *hashed_process_data = g_new(HashedProcessData, 1); *pm_hashed_process_data = hashed_process_data; *pm_process_info = Process_Info; - + Process_Info->pid = pid; + Process_Info->tgid = tgid; if(pid == 0) Process_Info->cpu = cpu; else @@ -607,13 +662,30 @@ int processlist_add( ProcessList *process_list, hashed_process_data->x.under_marked = FALSE; hashed_process_data->next_good_time = ltt_time_zero; + if (process_list->cell_height == 0) { + GtkTreePath *path; + GdkRectangle rect; + GtkTreeIter iter; + + path = gtk_tree_path_new_first(); + gtk_tree_model_get_iter (gtk_tree_view_get_model(GTK_TREE_VIEW(process_list->process_list_widget)), &iter, path); + gtk_tree_view_get_background_area( + GTK_TREE_VIEW(process_list->process_list_widget), + path, NULL, &rect); + gtk_list_store_remove(process_list->list_store, &iter); + gtk_tree_path_free (path); + process_list->cell_height = rect.height; + } + /* Add a new row to the model */ gtk_list_store_append ( process_list->list_store, &hashed_process_data->y_iter); gtk_list_store_set ( process_list->list_store, &hashed_process_data->y_iter, PROCESS_COLUMN, g_quark_to_string(name), + BRAND_COLUMN, g_quark_to_string(brand), PID_COLUMN, pid, + TGID_COLUMN, tgid, PPID_COLUMN, ppid, CPU_COLUMN, cpu, BIRTH_S_COLUMN, birth->tv_sec, @@ -629,9 +701,19 @@ int processlist_add( ProcessList *process_list, (gpointer)hashed_process_data); process_list->number_of_process++; +#if 0 + GtkTreePath *path; + GdkRectangle rect; + gtk_widget_queue_draw(process_list->process_list_widget); + path = gtk_tree_path_new_first(); + gtk_tree_view_get_background_area(GTK_TREE_VIEW(process_list->process_list_widget), + path, NULL, &rect); + gtk_tree_path_free (path); + process_list->cell_height = rect.height; +#endif //0 - hashed_process_data->height = process_list->cell_height; + hashed_process_data->height = process_list->cell_height; g_assert(hashed_process_data->height != 0); *height = hashed_process_data->height * process_list->number_of_process; @@ -689,8 +771,8 @@ int processlist_remove( ProcessList *process_list, &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; + if(likely(hashed_process_data == process_list->current_hash_data[trace_num][cpu])) { + process_list->current_hash_data[trace_num][cpu] = NULL; } }