From 6e11e0d0eebdfe842bc7153ad9e28947b3cb3365 Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Fri, 7 Feb 2014 15:21:46 -0500 Subject: [PATCH] follow child working textdump and gui Signed-off-by: Julien Desfossez --- src/cputop.c | 53 +++++++++++++++++++++++++++++++++++ src/cputop.h | 2 ++ src/lttngtop.c | 5 +++- utils/lttngtop-live-simple.sh | 2 +- 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/cputop.c b/src/cputop.c index 65cafb5..a2e5af9 100644 --- a/src/cputop.c +++ b/src/cputop.c @@ -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(<tngtop, 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; + +} + diff --git a/src/cputop.h b/src/cputop.h index c146644..4d5a125 100644 --- a/src/cputop.h +++ b/src/cputop.h @@ -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 */ diff --git a/src/lttngtop.c b/src/lttngtop.c index 554406a..e9beb0d 100644 --- a/src/lttngtop.c +++ b/src/lttngtop.c @@ -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, diff --git a/utils/lttngtop-live-simple.sh b/utils/lttngtop-live-simple.sh index 652ae7a..6d1f6ed 100755 --- a/utils/lttngtop-live-simple.sh +++ b/utils/lttngtop-live-simple.sh @@ -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 -- 2.34.1