fix compat with babeltrace API change at commit 03798a93f959f6c694fe98f5647481947607c604
[lttngtop.git] / src / common.c
index d4f89f3e8970e69e5ef60cf81beebb540727f6fe..5cc9bca14aff3342fa33baefb88f26599acaafb0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Julien Desfossez
+ * Copyright (C) 2011-2012 Julien Desfossez
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License Version 2 as
@@ -21,7 +21,7 @@
 #include <string.h>
 #include "common.h"
 
-uint64_t get_cpu_id(const struct ctf_event_definition *event)
+uint64_t get_cpu_id(const struct bt_ctf_event *event)
 {
        const struct definition *scope;
        uint64_t cpu_id;
@@ -36,7 +36,7 @@ uint64_t get_cpu_id(const struct ctf_event_definition *event)
        return cpu_id;
 }
 
-uint64_t get_context_tid(const struct ctf_event_definition *event)
+uint64_t get_context_tid(const struct bt_ctf_event *event)
 {
        const struct definition *scope;
        uint64_t tid;
@@ -52,7 +52,7 @@ uint64_t get_context_tid(const struct ctf_event_definition *event)
        return tid;
 }
 
-uint64_t get_context_pid(const struct ctf_event_definition *event)
+uint64_t get_context_pid(const struct bt_ctf_event *event)
 {
        const struct definition *scope;
        uint64_t pid;
@@ -68,7 +68,7 @@ uint64_t get_context_pid(const struct ctf_event_definition *event)
        return pid;
 }
 
-uint64_t get_context_ppid(const struct ctf_event_definition *event)
+uint64_t get_context_ppid(const struct bt_ctf_event *event)
 {
        const struct definition *scope;
        uint64_t ppid;
@@ -84,7 +84,7 @@ uint64_t get_context_ppid(const struct ctf_event_definition *event)
        return ppid;
 }
 
-char *get_context_comm(const struct ctf_event_definition *event)
+char *get_context_comm(const struct bt_ctf_event *event)
 {
        const struct definition *scope;
        char *comm;
@@ -360,11 +360,9 @@ struct lttngtop* get_copy_lttngtop(unsigned long start, unsigned long end)
        dst->process_table = g_ptr_array_new();
        dst->files_table = g_ptr_array_new();
        dst->cpu_table = g_ptr_array_new();
-       dst->perf_list = g_hash_table_new(g_str_hash, g_str_equal);
 
        rotate_cputime(end);
 
-       g_hash_table_foreach(lttngtop.perf_list, copy_perf_counter, dst->perf_list);
        for (i = 0; i < lttngtop.process_table->len; i++) {
                tmp = g_ptr_array_index(lttngtop.process_table, i);
                new = g_new0(struct processtop, 1);
@@ -462,3 +460,72 @@ struct lttngtop* get_copy_lttngtop(unsigned long start, unsigned long end)
        return dst;
 }
 
+
+enum bt_cb_ret handle_statedump_process_state(struct bt_ctf_event *call_data,
+               void *private_data)
+{
+       const struct definition *scope;
+       struct processtop *proc;
+       unsigned long timestamp;
+       int64_t pid, tid;
+       char *procname;
+
+       timestamp = bt_ctf_get_real_timestamp(call_data);
+       if (timestamp == -1ULL)
+               goto error;
+
+       scope = bt_ctf_get_top_level_scope(call_data,
+                        BT_EVENT_FIELDS);
+       pid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+                            scope, "_pid"));
+       if (bt_ctf_field_get_error()) {
+               fprintf(stderr, "Missing pid context info\n");
+               goto error;
+       }
+
+       scope = bt_ctf_get_top_level_scope(call_data,
+                       BT_EVENT_FIELDS);
+       tid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+                               scope, "_tid"));
+       if (bt_ctf_field_get_error()) {
+               fprintf(stderr, "Missing tid context info\n");
+               goto error;
+       }
+
+       /*
+        * FIXME
+        * I first tried with bt_ctf_get_string but doesn`t work at all
+        * It couldn`t find the field _name because it is an integer in
+        * the metadata and not a string like _filename for the
+        * statedump_file_descriptor
+        */
+       scope = bt_ctf_get_top_level_scope(call_data,
+                       BT_EVENT_FIELDS);
+       procname = bt_ctf_get_char_array(bt_ctf_get_field(call_data,
+                               scope, "_name"));
+       if (bt_ctf_field_get_error()) {
+               fprintf(stderr, "Missing process name context info\n");
+               goto error;
+       }
+
+       proc = find_process_tid(&lttngtop, tid, procname);
+       if (proc == NULL)
+               proc = add_proc(&lttngtop, tid, procname, timestamp);
+
+       free(proc->comm);
+       proc->comm = strdup(procname);
+       proc->pid = pid;
+
+       /*
+        * FIXME
+        * I would like to free procname because it is duplicated
+        * when the process is created but it segfaults...
+        *
+        * free(procname);
+        */
+
+       return BT_CB_OK;
+
+error:
+       return BT_CB_ERROR_STOP;
+}
This page took 0.023749 seconds and 4 git commands to generate.