cpu column added
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Wed, 11 Aug 2004 20:39:06 +0000 (20:39 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Wed, 11 Aug 2004 20:39:06 +0000 (20:39 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@702 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c
ltt/branches/poly/lttv/modules/gui/controlflow/processlist.c
ltt/branches/poly/lttv/modules/gui/controlflow/processlist.h

index c53afe9c43c79871b8a294b7424fbe21f420acef..84b5ff36e6c784ce9828ede89128d575e252f931 100644 (file)
@@ -391,6 +391,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
         
         if(processlist_get_process_pixels(process_list,
                 pid_out,
+                process->last_cpu,
                 &birth,
                 tfc->t_context->index,
                 &y,
@@ -401,6 +402,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
           /* Process not present */
           processlist_add(process_list,
               pid_out,
+              process->last_cpu,
               process->ppid,
               &birth,
               tfc->t_context->index,
@@ -409,6 +411,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
               &hashed_process_data);
           processlist_get_process_pixels(process_list,
                   pid_out,
+                  process->last_cpu,
                   &birth,
                   tfc->t_context->index,
                   &y,
@@ -493,6 +496,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
         
         if(processlist_get_process_pixels(process_list,
                 pid_in,
+                process->last_cpu,
                 &birth,
                 tfc->t_context->index,
                 &y,
@@ -503,6 +507,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
           /* Process not present */
           processlist_add(process_list,
               pid_in,
+              process->last_cpu,
               process->ppid,
               &birth,
               tfc->t_context->index,
@@ -511,6 +516,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
               &hashed_process_data);
           processlist_get_process_pixels(process_list,
                   pid_in,
+                  process->last_cpu,
                   &birth,
                   tfc->t_context->index,
                   &y,
@@ -1268,6 +1274,7 @@ int after_schedchange_hook(void *hook_data, void *call_data)
 
       if(processlist_get_process_pixels(process_list,
               pid_in,
+              process_in->last_cpu,
               &birth,
               tfc->t_context->index,
               &y_in,
@@ -1278,6 +1285,7 @@ int after_schedchange_hook(void *hook_data, void *call_data)
         /* Process not present */
         processlist_add(process_list,
             pid_in,
+            process_in->last_cpu,
             process_in->ppid,
             &birth,
             tfc->t_context->index,
@@ -1286,6 +1294,7 @@ int after_schedchange_hook(void *hook_data, void *call_data)
             &hashed_process_data_in);
         processlist_get_process_pixels(process_list,
                 pid_in,
+                process_in->last_cpu,
                 &birth,
                 tfc->t_context->index,
                 &y_in,
@@ -1831,6 +1840,7 @@ int after_fork_hook(void *hook_data, void *call_data)
 
       if(processlist_get_process_pixels(process_list,
               child_pid,
+              process_child->last_cpu,
               &birth,
               tfc->t_context->index,
               &y_child,
@@ -1841,6 +1851,7 @@ int after_fork_hook(void *hook_data, void *call_data)
         /* Process not present */
         processlist_add(process_list,
             child_pid,
+            process_child->last_cpu,
             process_child->ppid,
             &birth,
             tfc->t_context->index,
@@ -1849,6 +1860,7 @@ int after_fork_hook(void *hook_data, void *call_data)
             &hashed_process_data_child);
         processlist_get_process_pixels(process_list,
                 child_pid,
+                process_child->last_cpu,
                 &birth,
                 tfc->t_context->index,
                 &y_child,
@@ -2328,6 +2340,7 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data)
       /* process HAS to be present */
       g_assert(processlist_get_process_pixels(process_list,
               process_info->pid,
+              process_info->cpu,
               &birth,
               process_info->trace_num,
               &y,
index 7825860a24732bac9293a3eb73b88182d2ab358e..60d0e1d57b9269a7c11318c2c37645b82cb6f89c 100644 (file)
@@ -18,6 +18,8 @@
 
 #include <gtk/gtk.h>
 #include <glib.h>
+#include <string.h>
+#include <stdlib.h>
 
 #include "processlist.h"
 #include "drawitem.h"
  *                       Methods to synchronize process list                 *
  *****************************************************************************/
 
+static guint get_cpu_number_from_name(GQuark name);
+  
 /* Enumeration of the columns */
 enum
 {
   PROCESS_COLUMN,
   PID_COLUMN,
   PPID_COLUMN,
+  CPU_COLUMN,
   BIRTH_S_COLUMN,
   BIRTH_NS_COLUMN,
   TRACE_COLUMN,
@@ -67,17 +72,61 @@ gint process_sort_func  ( GtkTreeModel *model,
   if(G_VALUE_TYPE(&a) == G_TYPE_UINT
     && G_VALUE_TYPE(&b) == G_TYPE_UINT )
   {
-    if(g_value_get_uint(&a) > g_value_get_uint(&b))
-    {
-      g_value_unset(&a);
-      g_value_unset(&b);
-      return 1;
-    }
-    if(g_value_get_uint(&a) < g_value_get_uint(&b))
     {
-      g_value_unset(&a);
-      g_value_unset(&b);
-      return 0;
+
+      if(g_value_get_uint(&a) == 0 &&  g_value_get_uint(&b) == 0) {
+
+        GValue cpua, cpub;
+
+        memset(&cpua, 0, sizeof(GValue));
+        memset(&cpub, 0, sizeof(GValue));
+       
+        /* If 0, order by CPU */
+        gtk_tree_model_get_value( model,
+                it_a,
+                CPU_COLUMN,
+                &cpua);
+
+        gtk_tree_model_get_value( model,
+                it_b,
+                CPU_COLUMN,
+                &cpub);
+
+        if(G_VALUE_TYPE(&cpua) == G_TYPE_UINT
+          && G_VALUE_TYPE(&cpub) == G_TYPE_UINT )
+        {
+          if(g_value_get_uint(&cpua) > g_value_get_uint(&cpub))
+          {
+            g_value_unset(&cpua);
+            g_value_unset(&cpub);
+            return 1;
+          }
+          if(g_value_get_uint(&cpua) < g_value_get_uint(&cpub))
+          {
+            g_value_unset(&cpua);
+            g_value_unset(&cpub);
+            return 0;
+          }
+        }
+
+        g_value_unset(&cpua);
+        g_value_unset(&cpub);
+
+      } else { /* if not 0, order by pid */
+      
+        if(g_value_get_uint(&a) > g_value_get_uint(&b))
+        {
+          g_value_unset(&a);
+          g_value_unset(&b);
+          return 1;
+        }
+        if(g_value_get_uint(&a) < g_value_get_uint(&b))
+        {
+          g_value_unset(&a);
+          g_value_unset(&b);
+          return 0;
+        }
+      }
     }
   }
 
@@ -139,13 +188,12 @@ gint process_sort_func  ( GtkTreeModel *model,
       g_value_unset(&b);
       return 1;
     }
-    // Final condition
-    //if(g_value_get_ulong(&a) < g_value_get_ulong(&b))
-    //{
-    //  g_value_unset(&a);
-    //  g_value_unset(&b);
-    //  return 0;
-    //}
+    if(g_value_get_ulong(&a) < g_value_get_ulong(&b))
+    {
+      g_value_unset(&a);
+      g_value_unset(&b);
+      return 0;
+    }
 
   }
   
@@ -181,8 +229,6 @@ gint process_sort_func  ( GtkTreeModel *model,
 
   }
 
-
-
   return 0;
 
 }
@@ -194,18 +240,22 @@ guint hash_fct(gconstpointer key)
 
 gboolean equ_fct(gconstpointer a, gconstpointer b)
 {
-  if(((ProcessInfo*)a)->pid != ((ProcessInfo*)b)->pid)
+  const ProcessInfo *pa = (const ProcessInfo*)a;
+  const ProcessInfo *pb = (const ProcessInfo*)b;
+
+  if(pa->pid != pb->pid)
     return 0;
-//  g_critical("compare %u and %u",((ProcessInfo*)a)->pid,((ProcessInfo*)b)->pid);
-  if(((ProcessInfo*)a)->birth.tv_sec != ((ProcessInfo*)b)->birth.tv_sec)
+
+  if((pa->pid == 0 && (pa->cpu != pb->cpu)))
     return 0;
-//  g_critical("compare %u and %u",((ProcessInfo*)a)->birth.tv_sec,((ProcessInfo*)b)->birth.tv_sec);
 
-  if(((ProcessInfo*)a)->birth.tv_nsec != ((ProcessInfo*)b)->birth.tv_nsec)
+  if(pa->birth.tv_sec != pb->birth.tv_sec)
     return 0;
-//  g_critical("compare %u and %u",((ProcessInfo*)a)->birth.tv_nsec,((ProcessInfo*)b)->birth.tv_nsec);
 
-  if(((ProcessInfo*)a)->trace_num != ((ProcessInfo*)b)->trace_num)
+  if(pa->birth.tv_nsec != pb->birth.tv_nsec)
+    return 0;
+
+  if(pa->trace_num != pb->trace_num)
     return 0;
 
   return 1;
@@ -232,6 +282,7 @@ ProcessList *processlist_construct(void)
               G_TYPE_STRING,
               G_TYPE_UINT,
               G_TYPE_UINT,
+              G_TYPE_UINT,
               G_TYPE_ULONG,
               G_TYPE_ULONG,
               G_TYPE_ULONG);
@@ -294,6 +345,14 @@ ProcessList *processlist_construct(void)
                 NULL);
   gtk_tree_view_append_column (
     GTK_TREE_VIEW (process_list->process_list_widget), column);
+  
+  column = gtk_tree_view_column_new_with_attributes ( "CPU",
+                renderer,
+                "text",
+                CPU_COLUMN,
+                NULL);
+  gtk_tree_view_append_column (
+    GTK_TREE_VIEW (process_list->process_list_widget), column);
 
   column = gtk_tree_view_column_new_with_attributes ( "Birth sec",
                 renderer,
@@ -408,6 +467,7 @@ void destroy_hash_data(gpointer data)
 
 int processlist_add(  ProcessList *process_list,
       guint pid,
+      guint cpu,
       guint ppid,
       LttTime *birth,
       guint trace_num,
@@ -421,6 +481,10 @@ int processlist_add(  ProcessList *process_list,
   *pm_hashed_process_data = hashed_process_data;
   
   Process_Info->pid = pid;
+  if(pid == 0)
+    Process_Info->cpu = cpu;
+  else
+    Process_Info->cpu = 0;
   Process_Info->ppid = ppid;
   Process_Info->birth = *birth;
   Process_Info->trace_num = trace_num;
@@ -433,53 +497,6 @@ int processlist_add(  ProcessList *process_list,
    */
   hashed_process_data->x = 0;
   
-#if 0
-  hashed_process_data->draw_context = g_new(DrawContext, 1);
-  hashed_process_data->draw_context->drawable = NULL;
-  hashed_process_data->draw_context->gc = NULL;
-  hashed_process_data->draw_context->pango_layout = NULL;
-  hashed_process_data->draw_context->current = g_new(DrawInfo,1);
-  hashed_process_data->draw_context->current->over = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->current->over->x = -1;
-  hashed_process_data->draw_context->current->over->y = -1;
-  hashed_process_data->draw_context->current->middle = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->current->middle->x = -1;
-  hashed_process_data->draw_context->current->middle->y = -1;
-  hashed_process_data->draw_context->current->under = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->current->under->x = -1;
-  hashed_process_data->draw_context->current->under->y = -1;
-  hashed_process_data->draw_context->current->modify_over = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->current->modify_over->x = -1;
-  hashed_process_data->draw_context->current->modify_over->y = -1;
-  hashed_process_data->draw_context->current->modify_middle = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->current->modify_middle->x = -1;
-  hashed_process_data->draw_context->current->modify_middle->y = -1;
-  hashed_process_data->draw_context->current->modify_under = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->current->modify_under->x = -1;
-  hashed_process_data->draw_context->current->modify_under->y = -1;
-  hashed_process_data->draw_context->current->status = LTTV_STATE_UNNAMED;
-  hashed_process_data->draw_context->previous = g_new(DrawInfo,1);
-  hashed_process_data->draw_context->previous->over = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->previous->over->x = -1;
-  hashed_process_data->draw_context->previous->over->y = -1;
-  hashed_process_data->draw_context->previous->middle = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->previous->middle->x = -1;
-  hashed_process_data->draw_context->previous->middle->y = -1;
-  hashed_process_data->draw_context->previous->under = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->previous->under->x = -1;
-  hashed_process_data->draw_context->previous->under->y = -1;
-  hashed_process_data->draw_context->previous->modify_over = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->previous->modify_over->x = -1;
-  hashed_process_data->draw_context->previous->modify_over->y = -1;
-  hashed_process_data->draw_context->previous->modify_middle = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->previous->modify_middle->x = -1;
-  hashed_process_data->draw_context->previous->modify_middle->y = -1;
-  hashed_process_data->draw_context->previous->modify_under = g_new(ItemInfo,1);
-  hashed_process_data->draw_context->previous->modify_under->x = -1;
-  hashed_process_data->draw_context->previous->modify_under->y = -1;
-  hashed_process_data->draw_context->previous->status = LTTV_STATE_UNNAMED;
-#endif //0
-
   /* Add a new row to the model */
   gtk_list_store_append ( process_list->list_store, &iter);
   //g_critical ( "iter before : %s", gtk_tree_path_to_string (
@@ -490,6 +507,7 @@ int processlist_add(  ProcessList *process_list,
         PROCESS_COLUMN, name,
         PID_COLUMN, pid,
         PPID_COLUMN, ppid,
+        CPU_COLUMN, get_cpu_number_from_name(cpu),
         BIRTH_S_COLUMN, birth->tv_sec,
         BIRTH_NS_COLUMN, birth->tv_nsec,
         TRACE_COLUMN, trace_num,
@@ -499,7 +517,7 @@ int processlist_add(  ProcessList *process_list,
       gtk_tree_model_get_path(
         GTK_TREE_MODEL(process_list->list_store),
         &iter));
-  g_hash_table_insert(  process_list->process_hash,
+  g_hash_table_insert(process_list->process_hash,
         (gpointer)Process_Info,
         (gpointer)hashed_process_data);
   
@@ -519,6 +537,7 @@ int processlist_add(  ProcessList *process_list,
 
 int processlist_remove( ProcessList *process_list,
       guint pid,
+      guint cpu,
       LttTime *birth,
       guint trace_num)
 {
@@ -528,6 +547,7 @@ int processlist_remove( ProcessList *process_list,
   GtkTreeIter iter;
   
   Process_Info.pid = pid;
+  Process_Info.cpu = cpu;
   Process_Info.birth = *birth;
   Process_Info.trace_num = trace_num;
 
@@ -570,7 +590,7 @@ guint processlist_get_height(ProcessList *process_list)
 
 
 gint processlist_get_process_pixels(  ProcessList *process_list,
-          guint pid, LttTime *birth, guint trace_num,
+          guint pid, guint cpu, LttTime *birth, guint trace_num,
           guint *y,
           guint *height,
           HashedProcessData **pm_hashed_process_data)
@@ -581,6 +601,7 @@ gint processlist_get_process_pixels(  ProcessList *process_list,
   HashedProcessData *hashed_process_data = NULL;
 
   Process_Info.pid = pid;
+  Process_Info.cpu = cpu;
   Process_Info.birth = *birth;
   Process_Info.trace_num = trace_num;
 
@@ -629,3 +650,23 @@ gint processlist_get_pixels_from_data(  ProcessList *process_list,
   return 0; 
 
 }
+
+static guint get_cpu_number_from_name(GQuark name)
+{
+  /* remember / */
+  const gchar *string;
+  char *begin;
+  guint cpu;
+
+  string = g_quark_to_string(name);
+
+  begin = strrchr(string, '/');
+  begin++;
+
+  g_assert(begin != '\0');
+
+  cpu = strtoul(begin, NULL, 10);
+
+  return cpu;
+}
+
index 33e6b1dff045e76ab0d27173ce8b5457f1faaffd..cc03e7cf399db0125f24db9c611bdeffda4573b3 100644 (file)
@@ -44,6 +44,7 @@
 typedef struct _ProcessInfo {
   
   guint pid;
+  GQuark cpu; /* only for PID 0 */
   guint ppid;
   LttTime birth;
   guint trace_num;
@@ -83,18 +84,19 @@ GtkWidget *processlist_get_widget(ProcessList *process_list);
 void processlist_clear(ProcessList *process_list);
 
 // out : success (0) and height
-int processlist_add(ProcessList *process_list, guint pid, guint ppid,
+/* CPU num is only used for PID 0 */
+int processlist_add(ProcessList *process_list, guint pid, guint cpu, guint ppid,
     LttTime *birth, guint trace_num, const gchar *name, guint *height,
     HashedProcessData **hashed_process_data);
 // out : success (0) and height
-int processlist_remove(ProcessList *process_list, guint pid, LttTime *birth,
-    guint trace_num);
+int processlist_remove(ProcessList *process_list, guint pid, guint cpu, 
+    LttTime *birth, guint trace_num);
 
 guint processlist_get_height(ProcessList *process_list);
 
 // Returns 0 on success
 gint processlist_get_process_pixels(ProcessList *process_list,
-        guint pid, LttTime *birth, guint trace_num,
+        guint pid, guint cpu, LttTime *birth, guint trace_num,
         guint *y, guint *height,
         HashedProcessData **hashed_process_data);
 
This page took 0.030437 seconds and 4 git commands to generate.