X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Fprocesslist.h;h=b8ad845366a8287f8805af7cae782f07791b2440;hb=866fefbddc38ec2e13d4b18619f59961997c319f;hp=ebb32a30236e73c88f8be3e9570e82df761fa0aa;hpb=e465474eb70e83087e79cb04a4be5d3befd8bb36;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h index ebb32a30..b8ad8453 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h @@ -54,7 +54,9 @@ typedef struct _ProcessInfo { } ProcessInfo; typedef struct _HashedProcessData { - + + GdkPixmap *pixmap; // Pixmap slice containing drawing buffer for the PID + gint height; // height of the pixmap GtkTreeIter y_iter; // Access quickly to y pos. // DrawContext *draw_context; /* Information on current drawing */ @@ -81,21 +83,32 @@ struct _ProcessList { GtkWidget *process_list_widget; GtkListStore *list_store; GtkWidget *button; /* one button of the tree view */ + GtkCellRenderer *renderer; /* A hash table by PID to speed up process position find in the list */ GHashTable *process_hash; guint number_of_process; - gint cell_height_cache; + gint cell_height; /* Current process, one per cpu */ HashedProcessData **current_hash_data; + /* Array containing index -> pixmap correspondance. Must be updated + * every time the process list is reordered, process added or removed */ + GPtrArray * index_to_pixmap; + }; typedef struct _ProcessList ProcessList; + +#ifndef TYPE_DRAWING_T_DEFINED +#define TYPE_DRAWING_T_DEFINED +typedef struct _Drawing_t Drawing_t; +#endif //TYPE_DRAWING_T_DEFINED + ProcessList *processlist_construct(void); void processlist_destroy(ProcessList *process_list); GtkWidget *processlist_get_widget(ProcessList *process_list); @@ -104,7 +117,8 @@ void processlist_clear(ProcessList *process_list); // out : success (0) and height /* CPU num is only used for PID 0 */ -int processlist_add(ProcessList *process_list, guint pid, guint cpu, guint ppid, +int processlist_add(ProcessList *process_list, Drawing_t * drawing, + guint pid, guint cpu, guint ppid, LttTime *birth, guint trace_num, const gchar *name, guint *height, ProcessInfo **process_info, HashedProcessData **hashed_process_data); @@ -112,31 +126,33 @@ int processlist_add(ProcessList *process_list, guint pid, guint cpu, guint ppid, int processlist_remove(ProcessList *process_list, guint pid, guint cpu, LttTime *birth, guint trace_num); +/* Update the width of each pixmap buffer for each process */ +void update_pixmap_size(ProcessList *process_list, guint width); +/* Put src and/or dest to NULL to copy from/to the each PID specific pixmap */ +void copy_pixmap_region(ProcessList *process_list, GdkDrawable *dest, + GdkGC *gc, GdkDrawable *src, + gint xsrc, gint ysrc, + gint xdest, gint ydest, gint width, gint height); +/* If height is -1, the height of each pixmap is used */ +void rectangle_pixmap(ProcessList *process_list, GdkGC *gc, + gboolean filled, gint x, gint y, gint width, gint height); + +/* Renders each pixmaps into on big drawable */ +void copy_pixmap_to_screen(ProcessList *process_list, + GdkDrawable *dest, + GdkGC *gc, + gint x, gint y, + gint width, gint height); -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; -} static inline guint processlist_get_height(ProcessList *process_list) { - return get_cell_height(process_list, - (GtkTreeView*)process_list->process_list_widget) - * process_list->number_of_process ; + return process_list->cell_height * process_list->number_of_process ; } @@ -145,8 +161,6 @@ static inline HashedProcessData *processlist_get_process_data( guint pid, guint cpu, LttTime *birth, guint trace_num) { ProcessInfo process_info; - gint *path_indices; - GtkTreePath *tree_path; process_info.pid = pid; if(pid == 0) @@ -183,6 +197,24 @@ static inline gint processlist_get_pixels_from_data( ProcessList *process_list, } +static inline guint processlist_get_index_from_data(ProcessList *process_list, + HashedProcessData *hashed_process_data) +{ + gint *path_indices; + GtkTreePath *tree_path; + guint ret; + + tree_path = gtk_tree_model_get_path((GtkTreeModel*)process_list->list_store, + &hashed_process_data->y_iter); + path_indices = gtk_tree_path_get_indices (tree_path); + + ret = path_indices[0]; + + gtk_tree_path_free(tree_path); + + return ret; +} + #endif // _PROCESS_LIST_H