Display sched_switch "in" in follow-child
[lttngtop.git] / src / lttngtop.c
index 374f3e90c8d578ec71d6502f53438fd2d194c5c6..6b41e65049615b77d242d0c36edc5026e1217990 100644 (file)
@@ -238,9 +238,28 @@ 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);
@@ -258,10 +277,17 @@ enum bt_cb_ret print_timestamp(struct bt_ctf_event *call_data, void *private_dat
                 * print the newline in this case */
                if (last_textdump_print_newline == 0)
                        printf("\n");
-               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));
+               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) {
@@ -655,7 +681,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:
@@ -735,6 +760,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,
This page took 0.023435 seconds and 4 git commands to generate.