#define _PROCESS_LIST_H
#include <gtk/gtk.h>
+#include <gdk/gdk.h>
#include <lttv/state.h>
#include <ltt/ltt.h>
* provides helper function to convert a process unique identifier to
* pixels (in height).
*
- * //FIXME : connect the scrolled window adjustment with the list.
*/
+
+/* Enumeration of the columns */
+enum
+{
+ PROCESS_COLUMN,
+ BRAND_COLUMN,
+ PID_COLUMN,
+ TGID_COLUMN,
+ PPID_COLUMN,
+ CPU_COLUMN,
+ BIRTH_S_COLUMN,
+ BIRTH_NS_COLUMN,
+ TRACE_COLUMN,
+ N_COLUMNS
+};
+
+
typedef struct _ProcessInfo {
guint pid;
+ guint tgid;
guint cpu;
guint ppid;
LttTime birth;
LttTime next_good_time; /* precalculate the next time where the next
pixel is.*/
- // FIXME : add info on last event ?
} HashedProcessData;
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;
+ /* Current process pointer, one per cpu, one per trace */
+ HashedProcessData ***current_hash_data;
/* Array containing index -> pixmap correspondance. Must be updated
* every time the process list is reordered, process added or removed */
// out : success (0) and height
/* CPU num is only used for PID 0 */
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,
+ guint pid, guint tgid, guint cpu, guint ppid,
+ LttTime *birth, guint trace_num, GQuark name, GQuark brand, guint *height,
ProcessInfo **process_info,
HashedProcessData **hashed_process_data);
// out : success (0) and height
int processlist_remove(ProcessList *process_list, guint pid, guint cpu,
LttTime *birth, guint trace_num);
+/* Set the name of a process */
+void processlist_set_name(ProcessList *process_list,
+ GQuark name,
+ HashedProcessData *hashed_process_data);
+
+void processlist_set_brand(ProcessList *process_list,
+ GQuark brand,
+ HashedProcessData *hashed_process_data);
+
+/* Set the ppid of a process */
+void processlist_set_tgid(ProcessList *process_list,
+ guint tgid,
+ HashedProcessData *hashed_process_data);
+void processlist_set_ppid(ProcessList *process_list,
+ guint ppid,
+ HashedProcessData *hashed_process_data);
+
+
+/* Synchronize the list at the left and the drawing */
+void update_index_to_pixmap(ProcessList *process_list);
+
/* Update the width of each pixmap buffer for each process */
void update_pixmap_size(ProcessList *process_list, guint width);
gint width, gint height);
-
-
-static inline gint get_cell_height(ProcessList *process_list,
- GtkTreeView *tree_view)
+static inline gint get_cell_height(GtkTreeView *TreeView)
{
- gint height = process_list->cell_height_cache;
- if(height != -1) return height;
- else {
- GtkTreeViewColumn *Column = gtk_tree_view_get_column(tree_view, 0);
+ gint height;
+ GtkTreeViewColumn *column = gtk_tree_view_get_column(TreeView, 0);
- gtk_tree_view_column_cell_get_size(Column, NULL, NULL, NULL, NULL,
- &process_list->cell_height_cache);
- }
- return process_list->cell_height_cache;
-}
+ gtk_tree_view_column_cell_get_size(column, NULL, NULL, NULL, NULL, &height);
+ gint vertical_separator;
+ gtk_widget_style_get (GTK_WIDGET (TreeView),
+ "vertical-separator", &vertical_separator,
+ NULL);
+ height += vertical_separator;
+ return height;
+}
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 ;
}
if(pid == 0)
process_info.cpu = cpu;
else
- process_info.cpu = 0;
+ process_info.cpu = ANY_CPU;
process_info.birth = *birth;
process_info.trace_num = trace_num;
&hashed_process_data->y_iter);
path_indices = gtk_tree_path_get_indices (tree_path);
- *height = get_cell_height(process_list,
- (GtkTreeView*)process_list->process_list_widget);
+ *height = get_cell_height((GtkTreeView*)process_list->process_list_widget);
*y = *height * path_indices[0];
gtk_tree_path_free(tree_path);