X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcputop.c;h=4596f28b674ddd3b0b0c4a2e43ccc2c45bdeb11b;hb=54645d5cab414bb3391837ef7acb919cf106c71f;hp=65cafb5fdb992703a01c0d72422207be724caa45;hpb=1d2391b4818d470a92437e77892b0c5d7c10a466;p=lttngtop.git diff --git a/src/cputop.c b/src/cputop.c index 65cafb5..4596f28 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) @@ -129,6 +130,9 @@ enum bt_cb_ret handle_sched_process_free(struct bt_ctf_event *call_data, fprintf(stderr, "Missing tid field\n"); goto error; } + if (tid == opt_exec_pid) { + quit = 1; + } death_proc(<tngtop, tid, comm, timestamp); @@ -139,3 +143,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; + +} +