X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Flttngtop.c;h=b024c9a5ed70c33d08dcf34393157b60a2596554;hp=554406aba21582b6d61dff59ae9de5154377c86c;hb=7c15d14a187496b734e553138a7b0ca0fda7ec66;hpb=113c1cacb39413f0449af5ad78a29f203def1b5e diff --git a/src/lttngtop.c b/src/lttngtop.c index 554406a..b024c9a 100644 --- a/src/lttngtop.c +++ b/src/lttngtop.c @@ -217,7 +217,6 @@ enum bt_cb_ret print_timestamp(struct bt_ctf_event *call_data, void *private_dat struct tm start; uint64_t ts_nsec_start; int pid, cpu_id; - int64_t syscall_ret; const struct bt_definition *scope; const char *hostname, *procname; @@ -238,46 +237,45 @@ enum bt_cb_ret print_timestamp(struct bt_ctf_event *call_data, void *private_dat } hostname = get_context_hostname(call_data); - if (opt_tid || opt_hostname) - if (!lookup_filter_tid_list(pid)) - goto end; + if (opt_tid || opt_hostname) { + if (!lookup_filter_tid_list(pid)) { + /* To display when a process of ours in getting scheduled in */ + if (strcmp(bt_ctf_event_name(call_data), "sched_switch") == 0) { + int next_tid; + + scope = bt_ctf_get_top_level_scope(call_data, + BT_EVENT_FIELDS); + next_tid = bt_ctf_get_int64(bt_ctf_get_field(call_data, + scope, "_next_tid")); + if (bt_ctf_field_get_error()) { + fprintf(stderr, "Missing next_tid field\n"); + goto error; + } + if (!lookup_filter_tid_list(next_tid)) { + goto end; + } + } else { + goto end; + } + } + } cpu_id = get_cpu_id(call_data); procname = get_context_comm(call_data); - if ((strcmp(bt_ctf_event_name(call_data), "exit_syscall") == 0) && - !last_textdump_print_newline) { - scope = bt_ctf_get_top_level_scope(call_data, - BT_EVENT_FIELDS); - syscall_ret = bt_ctf_get_int64(bt_ctf_get_field(call_data, - scope, "_ret")); - printf("= %ld\n", syscall_ret); - last_textdump_print_newline = 1; + if (hostname) { + printf("%02d:%02d:%02d.%09" PRIu64 " (%s) (cpu %d) [%s (%d)] %s (", + start.tm_hour, start.tm_min, start.tm_sec, + ts_nsec_start, hostname, cpu_id, procname, pid, + bt_ctf_event_name(call_data)); } else { - /* we might have lost the exit_syscall event, so need to - * print the newline in this case */ - if (last_textdump_print_newline == 0) - printf("\n"); - if (hostname) { - printf("%02d:%02d:%02d.%09" PRIu64 " (%s) (cpu %d) [%s (%d)] %s (", - start.tm_hour, start.tm_min, start.tm_sec, - ts_nsec_start, hostname, cpu_id, procname, pid, - bt_ctf_event_name(call_data)); - } else { - printf("%02d:%02d:%02d.%09" PRIu64 " (cpu %d) [%s (%d)] %s (", - start.tm_hour, start.tm_min, start.tm_sec, - ts_nsec_start, cpu_id, procname, pid, - bt_ctf_event_name(call_data)); - } - print_fields(call_data); - printf(") "); - if (strncmp(bt_ctf_event_name(call_data), "sys_", 4) != 0) { - printf("\n"); - last_textdump_print_newline = 1; - } else { - last_textdump_print_newline = 0; - } + printf("%02d:%02d:%02d.%09" PRIu64 " (cpu %d) [%s (%d)] %s (", + start.tm_hour, start.tm_min, start.tm_sec, + ts_nsec_start, cpu_id, procname, pid, + bt_ctf_event_name(call_data)); } + print_fields(call_data); + printf(")\n"); end: return BT_CB_OK; @@ -662,7 +660,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 +739,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,