follow child working textdump and gui
authorJulien Desfossez <jdesfossez@efficios.com>
Fri, 7 Feb 2014 20:21:46 +0000 (15:21 -0500)
committerJulien Desfossez <jdesfossez@efficios.com>
Fri, 7 Feb 2014 20:21:46 +0000 (15:21 -0500)
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
src/cputop.c
src/cputop.h
src/lttngtop.c
utils/lttngtop-live-simple.sh

index 65cafb5fdb992703a01c0d72422207be724caa45..a2e5af9505afad7d0c6d31435ea76fb241f09e78 100644 (file)
@@ -20,6 +20,7 @@
 #include "lttngtoptypes.h"
 #include "common.h"
 #include "cputop.h"
+#include "lttngtop.h"
 
 void update_cputop_data(unsigned long timestamp, int64_t cpu, int prev_pid,
                int next_pid, char *prev_comm, char *next_comm, char *hostname)
@@ -139,3 +140,55 @@ error:
 
 }
 
+enum bt_cb_ret handle_sched_process_fork(struct bt_ctf_event *call_data,
+               void *private_data)
+{
+       const struct bt_definition *scope;
+       struct processtop *tmp;
+       int tid, *hash_tid, parent_pid;
+       unsigned long timestamp;
+       char *comm;
+
+       timestamp = bt_ctf_get_timestamp(call_data);
+       if (timestamp == -1ULL)
+               goto error;
+
+       scope = bt_ctf_get_top_level_scope(call_data,
+                       BT_EVENT_FIELDS);
+       comm = bt_ctf_get_char_array(bt_ctf_get_field(call_data,
+                               scope, "_child_comm"));
+       if (bt_ctf_field_get_error()) {
+               fprintf(stderr, "Missing procname context info\n");
+               goto error;
+       }
+
+       tid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+                               scope, "_child_tid"));
+       if (bt_ctf_field_get_error()) {
+               fprintf(stderr, "Missing child_tid field\n");
+               goto error;
+       }
+
+       parent_pid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+                               scope, "_parent_pid"));
+       if (bt_ctf_field_get_error()) {
+               fprintf(stderr, "Missing parent_pid field\n");
+               goto error;
+       }
+
+       tmp = get_proc(&lttngtop, tid, comm, timestamp, NULL);
+
+       if (opt_child) {
+               hash_tid = lookup_filter_tid_list(parent_pid);
+               if (hash_tid) {
+                       add_filter_tid_list(tmp);
+               }
+       }
+
+       return BT_CB_OK;
+
+error:
+       return BT_CB_ERROR_STOP;
+
+}
+
index c1466446b5704ad9d36bc07b532a0065d5eec501..4d5a1256094da347a7d5ec52595d6b8e197a16f1 100644 (file)
@@ -28,5 +28,7 @@ enum bt_cb_ret handle_sched_switch(struct bt_ctf_event *hook_data,
 
 enum bt_cb_ret handle_sched_process_free(struct bt_ctf_event *call_data,
                void *private_data);
+enum bt_cb_ret handle_sched_process_fork(struct bt_ctf_event *call_data,
+               void *private_data);
 
 #endif /* _LTTNGTOP_H */
index 554406aba21582b6d61dff59ae9de5154377c86c..e9beb0d0aab082dec131fec1422359d6495f769f 100644 (file)
@@ -662,7 +662,6 @@ static int parse_options(int argc, char **argv)
                                opt_textdump = 1;
                                break;
                        case OPT_CHILD:
-                               opt_textdump = 1;
                                opt_child = 1;
                                break;
                        case OPT_PID:
@@ -742,6 +741,10 @@ void iter_trace(struct bt_context *bt_ctx)
        bt_ctf_iter_add_callback(iter, 0, NULL, 0,
                        fix_process_table,
                        NULL, NULL, NULL);
+       /* to handle the follow child option */
+       bt_ctf_iter_add_callback(iter,
+                       g_quark_from_static_string("sched_process_fork"),
+                       NULL, 0, handle_sched_process_fork, NULL, NULL, NULL);
        if (opt_textdump) {
                bt_ctf_iter_add_callback(iter, 0, NULL, 0,
                                print_timestamp,
index 652ae7a6e4ca2e6f76708c2fad9304401d3934a0..6d1f6edc6f44df01be01c42967c0ab8b9597e68a 100755 (executable)
@@ -44,7 +44,7 @@ fi
 
 lttng create $SESSION_NAME --live 1000000 -U net://localhost >/dev/null
 [[ $? != 0 ]] && exit 2
-lttng enable-event -s $SESSION_NAME -k lttng_statedump_start,lttng_statedump_end,lttng_statedump_process_state,lttng_statedump_file_descriptor,lttng_statedump_vm_map,lttng_statedump_network_interface,lttng_statedump_interrupt,sched_process_free,sched_switch >/dev/null
+lttng enable-event -s $SESSION_NAME -k lttng_statedump_start,lttng_statedump_end,lttng_statedump_process_state,lttng_statedump_file_descriptor,lttng_statedump_vm_map,lttng_statedump_network_interface,lttng_statedump_interrupt,sched_process_free,sched_switch,sched_process_fork >/dev/null
 [[ $? != 0 ]] && exit 2
 lttng enable-event -s $SESSION_NAME -k --syscall -a >/dev/null
 [[ $? != 0 ]] && exit 2
This page took 0.025504 seconds and 4 git commands to generate.