int trace_parse_common_pid(struct pevent *pevent, void *data) { struct pevent_record record; record.data = data; return pevent_data_pid(pevent, &record); }
static const char * get_comm(struct event_format *event, struct pevent_record *record) { const char *comm; int pid; pid = pevent_data_pid(event->pevent, record); comm = pevent_data_comm_from_pid(event->pevent, pid); return comm; }
void print_event(struct pevent *pevent, int cpu, void *data, int size, unsigned long long nsecs, char *comm) { struct pevent_record record; struct trace_seq s; int pid; pevent->latency_format = latency_format; record.ts = nsecs; record.cpu = cpu; record.size = size; record.data = data; pid = pevent_data_pid(pevent, &record); if (!pevent_pid_is_registered(pevent, pid)) pevent_register_comm(pevent, comm, pid); trace_seq_init(&s); pevent_print_event(pevent, &s, &record); trace_seq_do_printf(&s); printf("\n"); }
void trace_view_store_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value) { TraceViewRecord *record; TraceViewStore *trace_view_store; struct trace_seq s; struct pevent *pevent; struct event_format *event; struct record *data; const gchar *comm; gchar *str; guint64 secs, usecs; gint val; int cpu; g_return_if_fail (TRACE_VIEW_IS_LIST (tree_model)); g_return_if_fail (iter != NULL); g_return_if_fail (column < TRACE_VIEW_STORE(tree_model)->n_columns); g_value_init (value, TRACE_VIEW_STORE(tree_model)->column_types[column]); trace_view_store = TRACE_VIEW_STORE(tree_model); pevent = tracecmd_get_pevent(trace_view_store->handle); record = (TraceViewRecord*)iter->user_data; g_return_if_fail ( record != NULL ); column = get_visible_column(TRACE_VIEW_STORE(tree_model), column); switch(column) { case TRACE_VIEW_STORE_COL_INDEX: g_value_set_uint(value, record->pos); break; case TRACE_VIEW_STORE_COL_CPU: g_value_set_uint(value, record->cpu); break; case TRACE_VIEW_STORE_COL_TS: usecs = record->timestamp; usecs /= 1000; secs = usecs / 1000000ULL; usecs -= secs * 1000000ULL; str = g_strdup_printf("%llu.%06llu", (long long)secs, (long long)usecs); g_value_set_string(value, str); g_free(str); break; case TRACE_VIEW_STORE_COL_COMM: case TRACE_VIEW_STORE_COL_PID: case TRACE_VIEW_STORE_COL_LAT: case TRACE_VIEW_STORE_COL_EVENT: case TRACE_VIEW_STORE_COL_INFO: data = tracecmd_read_at(trace_view_store->handle, record->offset, &cpu); g_assert(data != NULL); if (cpu != record->cpu) { free_record(data); return; } switch (column) { case TRACE_VIEW_STORE_COL_COMM: case TRACE_VIEW_STORE_COL_PID: val = pevent_data_pid(pevent, data); if (column == TRACE_VIEW_STORE_COL_PID) g_value_set_uint(value, val); else { comm = pevent_data_comm_from_pid(pevent, val); g_value_set_string(value, comm); } break; case TRACE_VIEW_STORE_COL_LAT: trace_seq_init(&s); pevent_data_lat_fmt(pevent, &s, data); g_value_set_string(value, s.buffer); trace_seq_destroy(&s); break; case TRACE_VIEW_STORE_COL_EVENT: case TRACE_VIEW_STORE_COL_INFO: val = pevent_data_type(pevent, data); event = pevent_data_event_from_type(pevent, val); if (!event) { if (column == TRACE_VIEW_STORE_COL_EVENT) g_value_set_string(value, "[UNKNOWN EVENT]"); break; } if (column == TRACE_VIEW_STORE_COL_EVENT) { g_value_set_string(value, event->name); break; } trace_seq_init(&s); pevent_event_info(&s, event, data); g_value_set_string(value, s.buffer); trace_seq_destroy(&s); break; } free_record(data); } }
static void update_filter_tasks(TraceViewStore *store) { struct tracecmd_input *handle; struct pevent *pevent; struct record *record; gint pid; gint cpu; gint i; handle = store->handle; pevent = tracecmd_get_pevent(store->handle); if (!store->sched_switch_event) { store->sched_switch_event = pevent_find_event_by_name(pevent, "sched", "sched_switch"); if (store->sched_switch_event) store->sched_switch_next_field = pevent_find_any_field(store->sched_switch_event, "next_pid"); store->sched_wakeup_event = pevent_find_event_by_name(pevent, "sched", "sched_wakeup"); if (store->sched_wakeup_event) store->sched_wakeup_pid_field = pevent_find_any_field(store->sched_wakeup_event, "pid"); store->sched_wakeup_new_event = pevent_find_event_by_name(pevent, "sched", "sched_wakeup"); if (store->sched_wakeup_new_event) store->sched_wakeup_new_pid_field = pevent_find_any_field(store->sched_wakeup_new_event, "pid"); } for (cpu = 0; cpu < store->cpus; cpu++) { record = tracecmd_read_cpu_first(handle, cpu); for (i = 0; i < store->cpu_items[cpu]; i++) { g_assert(record->offset == store->cpu_list[cpu][i].offset); /* The record may be filtered by the events */ if (!store->all_events) { int ret; ret = pevent_filter_match(store->event_filter, record); if (ret != FILTER_MATCH) { store->cpu_list[cpu][i].visible = 0; goto skip; } } pid = pevent_data_pid(pevent, record); if (show_task(store, pevent, record, pid)) store->cpu_list[cpu][i].visible = 1; else store->cpu_list[cpu][i].visible = 0; skip: free_record(record); record = tracecmd_read_data(handle, cpu); } g_assert(record == NULL); } merge_sort_rows_ts(store); }