diff options
author | Jonathan <hermanjl@hermanjl-Aspire-5553G.(none)> | 2012-03-08 21:55:37 -0500 |
---|---|---|
committer | Jonathan <hermanjl@hermanjl-Aspire-5553G.(none)> | 2012-03-08 21:55:37 -0500 |
commit | 70441ec3cb97aa058fe44f1918172ee989aee245 (patch) | |
tree | 2f3f362b80320bfa58bc73ad08233da38f9ef44d | |
parent | 0afbf80728003d445305e32b3174ff149890dd77 (diff) |
rt-graph: cleanup of graph display
-rw-r--r-- | rt-plot-cpu.c | 74 | ||||
-rw-r--r-- | rt-plot-task.c | 25 | ||||
-rw-r--r-- | trace-graph.c | 14 | ||||
-rw-r--r-- | trace-graph.h | 1 | ||||
-rw-r--r-- | trace-plot.c | 1 |
5 files changed, 85 insertions, 30 deletions
diff --git a/rt-plot-cpu.c b/rt-plot-cpu.c index bc37df7..82d03e6 100644 --- a/rt-plot-cpu.c +++ b/rt-plot-cpu.c | |||
@@ -44,20 +44,53 @@ next_sa_record(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | |||
44 | return ret; | 44 | return ret; |
45 | } | 45 | } |
46 | 46 | ||
47 | static inline int | ||
48 | is_displayed(struct graph_info *ginfo, int eid) | ||
49 | { | ||
50 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | ||
51 | return !(eid == rtg_info->switch_away_id || | ||
52 | eid == rtg_info->switch_to_id || | ||
53 | eid == rtg_info->task_completion_id || | ||
54 | eid == rtg_info->task_block_id || | ||
55 | eid == rtg_info->task_resume_id || | ||
56 | eid == rtg_info->task_release_id || | ||
57 | eid == ginfo->event_sched_switch_id); | ||
58 | } | ||
59 | |||
47 | static struct record* | 60 | static struct record* |
48 | find_record(struct graph_info *ginfo, int cpu, unsigned long long time) | 61 | __find_record(struct graph_info *ginfo, int cpu, unsigned long long time, |
62 | int display) | ||
49 | { | 63 | { |
50 | struct record *record = NULL; | 64 | struct record *record; |
65 | int eid, ignored; | ||
66 | |||
51 | set_cpu_to_rts(ginfo, time, cpu); | 67 | set_cpu_to_rts(ginfo, time, cpu); |
52 | 68 | ||
53 | while ((record = tracecmd_read_data(ginfo->handle, cpu))) { | 69 | while ((record = tracecmd_read_data(ginfo->handle, cpu))) { |
54 | if (get_rts(ginfo, record) >= time) | 70 | ignored = 0; |
71 | if (display) { | ||
72 | eid = pevent_data_type(ginfo->pevent, record); | ||
73 | ignored = !is_displayed(ginfo, eid); | ||
74 | } | ||
75 | if (get_rts(ginfo, record) >= time && !ignored) | ||
55 | break; | 76 | break; |
56 | free_record(record); | 77 | free_record(record); |
57 | } | 78 | } |
58 | return record; | 79 | return record; |
59 | } | 80 | } |
60 | 81 | ||
82 | static inline struct record* | ||
83 | find_record(struct graph_info *ginfo, int cpu, guint64 time) | ||
84 | { | ||
85 | return __find_record(ginfo, cpu, time, 0); | ||
86 | } | ||
87 | |||
88 | static inline struct record* | ||
89 | find_display_record(struct graph_info *ginfo, int cpu, guint64 time) | ||
90 | { | ||
91 | return __find_record(ginfo, cpu, time, 1); | ||
92 | } | ||
93 | |||
61 | 94 | ||
62 | static void update_pid(struct rt_cpu_info *rtc_info, int pid) | 95 | static void update_pid(struct rt_cpu_info *rtc_info, int pid) |
63 | { | 96 | { |
@@ -79,7 +112,8 @@ try_switch_away(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | |||
79 | record, &pid, &job, &ts); | 112 | record, &pid, &job, &ts); |
80 | if (match) { | 113 | if (match) { |
81 | update_pid(rtc_info, pid); | 114 | update_pid(rtc_info, pid); |
82 | if (rtc_info->rt_run_time && rtc_info->rt_run_time < ts) { | 115 | if (rtc_info->rt_run_time && rtc_info->rt_run_time < ts && |
116 | job != 1) { | ||
83 | info->box = TRUE; | 117 | info->box = TRUE; |
84 | info->bcolor = hash_pid(rtc_info->run_pid); | 118 | info->bcolor = hash_pid(rtc_info->run_pid); |
85 | info->bfill = TRUE; | 119 | info->bfill = TRUE; |
@@ -220,8 +254,8 @@ static void rt_cpu_plot_start(struct graph_info *ginfo, struct graph_plot *plot, | |||
220 | static int rt_cpu_plot_event(struct graph_info *ginfo, struct graph_plot *plot, | 254 | static int rt_cpu_plot_event(struct graph_info *ginfo, struct graph_plot *plot, |
221 | struct record *record, struct plot_info *info) | 255 | struct record *record, struct plot_info *info) |
222 | { | 256 | { |
223 | int pid, eid, match; | 257 | int pid, eid, match, dint; |
224 | unsigned long long ts; | 258 | unsigned long long ts, dull; |
225 | struct rt_cpu_info *rtc_info = plot->private; | 259 | struct rt_cpu_info *rtc_info = plot->private; |
226 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | 260 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; |
227 | 261 | ||
@@ -239,11 +273,20 @@ static int rt_cpu_plot_event(struct graph_info *ginfo, struct graph_plot *plot, | |||
239 | try_sched_switch(ginfo, rtc_info, record, info); | 273 | try_sched_switch(ginfo, rtc_info, record, info); |
240 | 274 | ||
241 | if (!match) { | 275 | if (!match) { |
242 | rt_graph_check_any(rtg_info, ginfo->pevent, record, | 276 | /* Have to call checks to ensure ids are loaded. Otherwise, |
243 | &pid, &eid, &ts); | 277 | * is_displayed will not work in any methods. |
244 | info->line = TRUE; | 278 | */ |
245 | info->lcolor = hash_pid(pid); | 279 | #define ARG rtg_info, ginfo->pevent, record, &pid |
246 | info->ltime = ts; | 280 | rt_graph_check_task_release(ARG, &dint, &dull, &dull); |
281 | rt_graph_check_task_block(ARG, &dull); | ||
282 | rt_graph_check_task_resume(ARG, &dull); | ||
283 | rt_graph_check_any(ARG, &eid, &ts); | ||
284 | #undef ARG | ||
285 | if (is_displayed(ginfo, eid)) { | ||
286 | info->line = TRUE; | ||
287 | info->lcolor = hash_pid(pid); | ||
288 | info->ltime = ts; | ||
289 | } | ||
247 | } | 290 | } |
248 | return 1; | 291 | return 1; |
249 | } | 292 | } |
@@ -263,7 +306,7 @@ rt_cpu_plot_display_last_event(struct graph_info *ginfo, struct graph_plot *plot | |||
263 | if (record) | 306 | if (record) |
264 | offset = record->offset; | 307 | offset = record->offset; |
265 | 308 | ||
266 | record = find_record(ginfo, cpu, time); | 309 | record = find_display_record(ginfo, cpu, time); |
267 | 310 | ||
268 | if (offset) | 311 | if (offset) |
269 | tracecmd_set_cursor(ginfo->handle, cpu, offset); | 312 | tracecmd_set_cursor(ginfo->handle, cpu, offset); |
@@ -351,7 +394,7 @@ rt_cpu_plot_display_info(struct graph_info *ginfo, struct graph_plot *plot, | |||
351 | 394 | ||
352 | if (is_running) { | 395 | if (is_running) { |
353 | comm = pevent_data_comm_from_pid(ginfo->pevent, pid); | 396 | comm = pevent_data_comm_from_pid(ginfo->pevent, pid); |
354 | trace_seq_printf(s, "%s-%d:%d\n", comm, pid, job); | 397 | trace_seq_printf(s, "%s-%d:%d\n\n", comm, pid, job); |
355 | } | 398 | } |
356 | 399 | ||
357 | if (record) { | 400 | if (record) { |
@@ -360,16 +403,15 @@ rt_cpu_plot_display_info(struct graph_info *ginfo, struct graph_plot *plot, | |||
360 | eid = pevent_data_type(ginfo->pevent, record); | 403 | eid = pevent_data_type(ginfo->pevent, record); |
361 | event = pevent_data_event_from_type(ginfo->pevent, eid); | 404 | event = pevent_data_event_from_type(ginfo->pevent, eid); |
362 | if (event) { | 405 | if (event) { |
363 | trace_seq_putc(s, '\n'); | ||
364 | trace_seq_puts(s, event->name); | 406 | trace_seq_puts(s, event->name); |
365 | trace_seq_putc(s, '\n'); | 407 | trace_seq_putc(s, '\n'); |
366 | pevent_event_info(s, event, record); | 408 | pevent_event_info(s, event, record); |
409 | trace_seq_putc(s, '\n'); | ||
367 | } else | 410 | } else |
368 | trace_seq_printf(s, "\nUNKNOWN EVENT %d\n", eid); | 411 | trace_seq_printf(s, "UNKNOWN EVENT %d\n", eid); |
369 | } | 412 | } |
370 | free_record(record); | 413 | free_record(record); |
371 | } | 414 | } |
372 | trace_seq_putc(s, '\n'); | ||
373 | nano_to_milli(time, &msec, &nsec); | 415 | nano_to_milli(time, &msec, &nsec); |
374 | trace_seq_printf(s, "%llu.%06llu ms CPU: %03d", | 416 | trace_seq_printf(s, "%llu.%06llu ms CPU: %03d", |
375 | msec, nsec, rtc_info->cpu); | 417 | msec, nsec, rtc_info->cpu); |
diff --git a/rt-plot-task.c b/rt-plot-task.c index f8d29ed..947e2e9 100644 --- a/rt-plot-task.c +++ b/rt-plot-task.c | |||
@@ -83,18 +83,18 @@ next_box_record(struct graph_info *ginfo, struct rt_task_info *rtt_info, | |||
83 | 83 | ||
84 | /* | 84 | /* |
85 | * Return first relevant record after @time. | 85 | * Return first relevant record after @time. |
86 | * @display: If set, only considers records which are plotted in some way | 86 | * @display: If set, only considers records which aren't plotted |
87 | */ | 87 | */ |
88 | static struct record* | 88 | static struct record* |
89 | __find_record(struct graph_info *ginfo, gint pid, guint64 time, int display) | 89 | __find_record(struct graph_info *ginfo, gint pid, guint64 time, int display) |
90 | { | 90 | { |
91 | int next_cpu, match, eid, ignored= 0; | 91 | int next_cpu, match, eid, ignored; |
92 | struct record *record = NULL; | 92 | struct record *record; |
93 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | 93 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; |
94 | 94 | ||
95 | set_cpus_to_rts(ginfo, time); | 95 | set_cpus_to_rts(ginfo, time); |
96 | while ((record = tracecmd_read_next_data(ginfo->handle, &next_cpu))) { | 96 | while ((record = tracecmd_read_next_data(ginfo->handle, &next_cpu))) { |
97 | free_record(record); | 97 | ignored = 0; |
98 | match = record_matches_pid(ginfo, record, pid); | 98 | match = record_matches_pid(ginfo, record, pid); |
99 | if (display) { | 99 | if (display) { |
100 | eid = pevent_data_type(ginfo->pevent, record); | 100 | eid = pevent_data_type(ginfo->pevent, record); |
@@ -105,9 +105,10 @@ __find_record(struct graph_info *ginfo, gint pid, guint64 time, int display) | |||
105 | eid == rtg_info->task_resume_id || | 105 | eid == rtg_info->task_resume_id || |
106 | eid == rtg_info->task_release_id); | 106 | eid == rtg_info->task_release_id); |
107 | } | 107 | } |
108 | ignored = ignored && eid == ginfo->event_sched_switch_id; | 108 | ignored = ignored || eid == ginfo->event_sched_switch_id; |
109 | if (get_rts(ginfo, record) >= time && match && !ignored) | 109 | if (get_rts(ginfo, record) >= time && match && !ignored) |
110 | break; | 110 | break; |
111 | free_record(record); | ||
111 | }; | 112 | }; |
112 | 113 | ||
113 | return record; | 114 | return record; |
@@ -318,9 +319,11 @@ static int try_completion(struct graph_info *ginfo, | |||
318 | match = rt_graph_check_task_completion(&ginfo->rtg_info, ginfo->pevent, | 319 | match = rt_graph_check_task_completion(&ginfo->rtg_info, ginfo->pevent, |
319 | record, &pid, &job, &ts); | 320 | record, &pid, &job, &ts); |
320 | if (match && pid == rtt_info->pid) { | 321 | if (match && pid == rtt_info->pid) { |
321 | update_job(rtt_info, job); | 322 | |
322 | info->completion = TRUE; | 323 | info->completion = TRUE; |
323 | info->ctime = ts; | 324 | info->ctime = ts; |
325 | update_job(rtt_info, job); | ||
326 | |||
324 | dprintf(3, "Completion for %d:%d on %d at %llu\n", | 327 | dprintf(3, "Completion for %d:%d on %d at %llu\n", |
325 | pid, job, record->cpu, ts); | 328 | pid, job, record->cpu, ts); |
326 | ret = 1; | 329 | ret = 1; |
@@ -386,7 +389,8 @@ try_switch_away(struct graph_info *ginfo, struct rt_task_info *rtt_info, | |||
386 | if (match && pid == rtt_info->pid) { | 389 | if (match && pid == rtt_info->pid) { |
387 | update_job(rtt_info, job); | 390 | update_job(rtt_info, job); |
388 | 391 | ||
389 | if (rtt_info->run_time && rtt_info->run_time < ts) { | 392 | if (rtt_info->run_time && rtt_info->run_time < ts && |
393 | job != 1) { | ||
390 | dprintf(3, "Box for %d:%d, %llu to %llu on CPU %d\n", | 394 | dprintf(3, "Box for %d:%d, %llu to %llu on CPU %d\n", |
391 | rtt_info->pid, rtt_info->last_job, | 395 | rtt_info->pid, rtt_info->last_job, |
392 | rtt_info->run_time, ts, record->cpu); | 396 | rtt_info->run_time, ts, record->cpu); |
@@ -430,7 +434,7 @@ static int try_switch_to(struct graph_info *ginfo, struct rt_task_info *rtt_info | |||
430 | static int try_other(struct graph_info *ginfo, struct rt_task_info *rtt_info, | 434 | static int try_other(struct graph_info *ginfo, struct rt_task_info *rtt_info, |
431 | struct record *record, struct plot_info *info) | 435 | struct record *record, struct plot_info *info) |
432 | { | 436 | { |
433 | int pid, eid, epid, my_pid, my_cpu, not_sa, ret = 0; | 437 | int pid, eid, epid, my_pid, my_cpu, not_sa, not_ss, ret = 0; |
434 | unsigned long long ts; | 438 | unsigned long long ts; |
435 | 439 | ||
436 | pid = rtt_info->pid; | 440 | pid = rtt_info->pid; |
@@ -440,8 +444,9 @@ static int try_other(struct graph_info *ginfo, struct rt_task_info *rtt_info, | |||
440 | my_pid = (pid == epid); | 444 | my_pid = (pid == epid); |
441 | my_cpu = (rtt_info->run_time && record->cpu == rtt_info->run_cpu); | 445 | my_cpu = (rtt_info->run_time && record->cpu == rtt_info->run_cpu); |
442 | not_sa = (eid != ginfo->rtg_info.switch_away_id); | 446 | not_sa = (eid != ginfo->rtg_info.switch_away_id); |
443 | if (not_sa && (my_pid || my_cpu) && | 447 | not_ss = (eid != ginfo->event_sched_switch_id); |
444 | eid != ginfo->event_sched_switch_id) { | 448 | |
449 | if ((my_pid || my_cpu) && not_ss && not_sa) { | ||
445 | info->line = TRUE; | 450 | info->line = TRUE; |
446 | info->lcolor = hash_pid(record->cpu); | 451 | info->lcolor = hash_pid(record->cpu); |
447 | info->ltime = ts; | 452 | info->ltime = ts; |
diff --git a/trace-graph.c b/trace-graph.c index 9ce0853..42a0b27 100644 --- a/trace-graph.c +++ b/trace-graph.c | |||
@@ -1632,14 +1632,20 @@ static gint draw_event_label(struct graph_info *ginfo, gint i, | |||
1632 | } | 1632 | } |
1633 | 1633 | ||
1634 | static gint draw_plot_line(struct graph_info *ginfo, int i, | 1634 | static gint draw_plot_line(struct graph_info *ginfo, int i, |
1635 | unsigned long long time, GdkGC *gc) | 1635 | unsigned long long time, gboolean small, |
1636 | GdkGC *gc) | ||
1636 | { | 1637 | { |
1637 | gint x; | 1638 | gint x; |
1639 | gint y; | ||
1638 | 1640 | ||
1639 | x = convert_time_to_x(ginfo, time); | 1641 | x = convert_time_to_x(ginfo, time); |
1642 | /* y = (small) ? PLOT_BOX_TOP(i) : PLOT_TOP(i); */ | ||
1643 | y = PLOT_TOP(i); | ||
1640 | 1644 | ||
1641 | gdk_draw_line(ginfo->curr_pixmap, gc, | 1645 | if (!small || convert_dist_to_time(ginfo, PLOT_TRI_SIZE) < MAX_TRI_TIME) { |
1642 | x, PLOT_TOP(i), x, PLOT_BOTTOM(i)); | 1646 | gdk_draw_line(ginfo->curr_pixmap, gc, |
1647 | x, y, x, PLOT_BOTTOM(i)); | ||
1648 | } | ||
1643 | 1649 | ||
1644 | return x; | 1650 | return x; |
1645 | } | 1651 | } |
@@ -1815,7 +1821,7 @@ static void draw_plot(struct graph_info *ginfo, struct graph_plot *plot, | |||
1815 | set_color(ginfo->draw, plot->gc, plot->last_color); | 1821 | set_color(ginfo->draw, plot->gc, plot->last_color); |
1816 | } | 1822 | } |
1817 | 1823 | ||
1818 | x = draw_plot_line(ginfo, plot->pos, info.ltime, plot->gc); | 1824 | x = draw_plot_line(ginfo, plot->pos, info.ltime, info.lsmall, plot->gc); |
1819 | 1825 | ||
1820 | /* Figure out if we can show the text for the previous record */ | 1826 | /* Figure out if we can show the text for the previous record */ |
1821 | 1827 | ||
diff --git a/trace-graph.h b/trace-graph.h index d3d4cba..4bfef4d 100644 --- a/trace-graph.h +++ b/trace-graph.h | |||
@@ -58,6 +58,7 @@ struct graph_plot; | |||
58 | 58 | ||
59 | struct plot_info { | 59 | struct plot_info { |
60 | gboolean line; | 60 | gboolean line; |
61 | gboolean lsmall; | ||
61 | int lcolor; | 62 | int lcolor; |
62 | unsigned long long ltime; | 63 | unsigned long long ltime; |
63 | 64 | ||
diff --git a/trace-plot.c b/trace-plot.c index 5629e47..8551a34 100644 --- a/trace-plot.c +++ b/trace-plot.c | |||
@@ -348,6 +348,7 @@ int trace_graph_plot_event(struct graph_info *ginfo, | |||
348 | info->line = FALSE; | 348 | info->line = FALSE; |
349 | info->box = FALSE; | 349 | info->box = FALSE; |
350 | info->bfill = TRUE; | 350 | info->bfill = TRUE; |
351 | info->lsmall = FALSE; | ||
351 | 352 | ||
352 | info->blabel = NULL; | 353 | info->blabel = NULL; |
353 | info->bthin = FALSE; | 354 | info->bthin = FALSE; |