diff options
| author | Jonathan <hermanjl@hermanjl-Aspire-5553G.(none)> | 2012-03-08 20:56:54 -0500 |
|---|---|---|
| committer | Jonathan <hermanjl@hermanjl-Aspire-5553G.(none)> | 2012-03-08 20:56:54 -0500 |
| commit | 0afbf80728003d445305e32b3174ff149890dd77 (patch) | |
| tree | 0938356830db7b2230dcc0695cb4a54caae144d1 | |
| parent | 11c9b6cac9c5cfb72ecaa88d6f5ab0c6cd0034ae (diff) | |
rt-graph: RT cpus show a thin black line when non-rt tasks run
| -rw-r--r-- | rt-plot-cpu.c | 56 | ||||
| -rw-r--r-- | rt-plot-cpu.h | 3 | ||||
| -rw-r--r-- | trace-graph.c | 1 | ||||
| -rw-r--r-- | trace-graph.h | 4 |
4 files changed, 51 insertions, 13 deletions
diff --git a/rt-plot-cpu.c b/rt-plot-cpu.c index 6884286..bc37df7 100644 --- a/rt-plot-cpu.c +++ b/rt-plot-cpu.c | |||
| @@ -79,16 +79,17 @@ try_switch_away(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | |||
| 79 | record, &pid, &job, &ts); | 79 | record, &pid, &job, &ts); |
| 80 | if (match) { | 80 | if (match) { |
| 81 | update_pid(rtc_info, pid); | 81 | update_pid(rtc_info, pid); |
| 82 | if (rtc_info->run_time && rtc_info->run_time < ts) { | 82 | if (rtc_info->rt_run_time && rtc_info->rt_run_time < ts) { |
| 83 | info->box = TRUE; | 83 | info->box = TRUE; |
| 84 | info->bcolor = hash_pid(rtc_info->run_pid); | 84 | info->bcolor = hash_pid(rtc_info->run_pid); |
| 85 | info->bfill = TRUE; | 85 | info->bfill = TRUE; |
| 86 | info->bstart = rtc_info->run_time; | 86 | info->bstart = rtc_info->rt_run_time; |
| 87 | info->bend = ts; | 87 | info->bend = ts; |
| 88 | info->blabel = rtc_info->label; | 88 | info->blabel = rtc_info->label; |
| 89 | } | 89 | } |
| 90 | rtc_info->run_pid = 0; | 90 | rtc_info->run_pid = 0; |
| 91 | rtc_info->run_time = 0Ull; | 91 | rtc_info->rt_run_time = 0Ull; |
| 92 | rtc_info->reg_run_time = 0ULL; | ||
| 92 | } | 93 | } |
| 93 | return match; | 94 | return match; |
| 94 | } | 95 | } |
| @@ -104,7 +105,8 @@ try_switch_to(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | |||
| 104 | record, &pid, &job, &ts); | 105 | record, &pid, &job, &ts); |
| 105 | if (match) { | 106 | if (match) { |
| 106 | update_pid(rtc_info, pid); | 107 | update_pid(rtc_info, pid); |
| 107 | rtc_info->run_time = ts; | 108 | rtc_info->rt_run_time = ts; |
| 109 | rtc_info->reg_run_time = 0ULL; | ||
| 108 | } | 110 | } |
| 109 | return match; | 111 | return match; |
| 110 | } | 112 | } |
| @@ -125,17 +127,49 @@ try_completion(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | |||
| 125 | return match; | 127 | return match; |
| 126 | } | 128 | } |
| 127 | 129 | ||
| 130 | static int | ||
| 131 | try_sched_switch(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | ||
| 132 | struct record *record, struct plot_info *info) | ||
| 133 | { | ||
| 134 | const char *comm; | ||
| 135 | int from_pid, to_pid, match; | ||
| 136 | |||
| 137 | match = trace_graph_check_sched_switch(ginfo, record, &to_pid, &comm); | ||
| 138 | if (match) { | ||
| 139 | from_pid = pevent_data_pid(ginfo->pevent, record); | ||
| 140 | /* Only draw if no real-time task is running */ | ||
| 141 | if (!rtc_info->rt_run_time) { | ||
| 142 | if (rtc_info->reg_run_time && | ||
| 143 | rtc_info->reg_run_time < get_rts(ginfo, record)) { | ||
| 144 | /* A non-rt task was running */ | ||
| 145 | info->box = TRUE; | ||
| 146 | info->bthin = TRUE; | ||
| 147 | info->bcolor = 0x0; | ||
| 148 | /* info->blabel = rtc_info->label; */ | ||
| 149 | info->bstart = rtc_info->reg_run_time; | ||
| 150 | info->bend = get_rts(ginfo, record); | ||
| 151 | } | ||
| 152 | if (to_pid) | ||
| 153 | rtc_info->reg_run_time = get_rts(ginfo, record); | ||
| 154 | else | ||
| 155 | rtc_info->reg_run_time = 0ULL; | ||
| 156 | } | ||
| 157 | update_pid(rtc_info, to_pid); | ||
| 158 | } | ||
| 159 | return match; | ||
| 160 | } | ||
| 161 | |||
| 128 | static void do_plot_end(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, | 162 | static void do_plot_end(struct graph_info *ginfo, struct rt_cpu_info *rtc_info, |
| 129 | struct plot_info *info) | 163 | struct plot_info *info) |
| 130 | { | 164 | { |
| 131 | int pid; | 165 | int pid; |
| 132 | struct record *record; | 166 | struct record *record; |
| 133 | 167 | ||
| 134 | if (rtc_info->run_time && rtc_info->run_pid) { | 168 | if (rtc_info->rt_run_time && rtc_info->run_pid) { |
| 135 | info->box = TRUE; | 169 | info->box = TRUE; |
| 136 | info->bcolor = hash_pid(rtc_info->run_pid); | 170 | info->bcolor = hash_pid(rtc_info->run_pid); |
| 137 | info->bfill = TRUE; | 171 | info->bfill = TRUE; |
| 138 | info->bstart = rtc_info->run_time; | 172 | info->bstart = rtc_info->rt_run_time; |
| 139 | info->bend = ginfo->view_end_time; | 173 | info->bend = ginfo->view_end_time; |
| 140 | info->blabel = rtc_info->label; | 174 | info->blabel = rtc_info->label; |
| 141 | rtc_info->fresh = FALSE; | 175 | rtc_info->fresh = FALSE; |
| @@ -163,7 +197,7 @@ static int rt_cpu_plot_match_time(struct graph_info *ginfo, | |||
| 163 | { | 197 | { |
| 164 | int ret = 0; | 198 | int ret = 0; |
| 165 | struct rt_cpu_info *rtc_info = plot->private; | 199 | struct rt_cpu_info *rtc_info = plot->private; |
| 166 | struct record = find_record(ginfo, rtc_info->cpu, time); | 200 | struct record *record = find_record(ginfo, rtc_info->cpu, time); |
| 167 | 201 | ||
| 168 | if (record && get_rts(ginfo, record) == time) | 202 | if (record && get_rts(ginfo, record) == time) |
| 169 | ret = 1; | 203 | ret = 1; |
| @@ -177,7 +211,8 @@ static void rt_cpu_plot_start(struct graph_info *ginfo, struct graph_plot *plot, | |||
| 177 | { | 211 | { |
| 178 | struct rt_cpu_info *rtc_info = plot->private; | 212 | struct rt_cpu_info *rtc_info = plot->private; |
| 179 | 213 | ||
| 180 | rtc_info->run_time = time; | 214 | rtc_info->rt_run_time = time; |
| 215 | rtc_info->reg_run_time = time; | ||
| 181 | rtc_info->run_pid = 0; | 216 | rtc_info->run_pid = 0; |
| 182 | rtc_info->fresh = TRUE; | 217 | rtc_info->fresh = TRUE; |
| 183 | } | 218 | } |
| @@ -189,7 +224,6 @@ static int rt_cpu_plot_event(struct graph_info *ginfo, struct graph_plot *plot, | |||
| 189 | unsigned long long ts; | 224 | unsigned long long ts; |
| 190 | struct rt_cpu_info *rtc_info = plot->private; | 225 | struct rt_cpu_info *rtc_info = plot->private; |
| 191 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | 226 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; |
| 192 | const char *comm; | ||
| 193 | 227 | ||
| 194 | if (!record) { | 228 | if (!record) { |
| 195 | do_plot_end(ginfo, rtc_info, info); | 229 | do_plot_end(ginfo, rtc_info, info); |
| @@ -202,8 +236,8 @@ static int rt_cpu_plot_event(struct graph_info *ginfo, struct graph_plot *plot, | |||
| 202 | match = try_switch_away(ginfo, rtc_info, record, info) || | 236 | match = try_switch_away(ginfo, rtc_info, record, info) || |
| 203 | try_switch_to(ginfo, rtc_info, record, info) || | 237 | try_switch_to(ginfo, rtc_info, record, info) || |
| 204 | try_completion(ginfo, rtc_info, record, info) || | 238 | try_completion(ginfo, rtc_info, record, info) || |
| 205 | trace_graph_check_sched_switch(ginfo, record, | 239 | try_sched_switch(ginfo, rtc_info, record, info); |
| 206 | &pid, &comm); | 240 | |
| 207 | if (!match) { | 241 | if (!match) { |
| 208 | rt_graph_check_any(rtg_info, ginfo->pevent, record, | 242 | rt_graph_check_any(rtg_info, ginfo->pevent, record, |
| 209 | &pid, &eid, &ts); | 243 | &pid, &eid, &ts); |
diff --git a/rt-plot-cpu.h b/rt-plot-cpu.h index 320bf53..eb63167 100644 --- a/rt-plot-cpu.h +++ b/rt-plot-cpu.h | |||
| @@ -3,8 +3,9 @@ | |||
| 3 | 3 | ||
| 4 | struct rt_cpu_info { | 4 | struct rt_cpu_info { |
| 5 | int cpu; | 5 | int cpu; |
| 6 | unsigned long long run_time; | ||
| 7 | int run_pid; | 6 | int run_pid; |
| 7 | unsigned long long rt_run_time; | ||
| 8 | unsigned long long reg_run_time; | ||
| 8 | gboolean fresh; | 9 | gboolean fresh; |
| 9 | char *label; | 10 | char *label; |
| 10 | }; | 11 | }; |
diff --git a/trace-graph.c b/trace-graph.c index 5c364e4..9ce0853 100644 --- a/trace-graph.c +++ b/trace-graph.c | |||
| @@ -1875,7 +1875,6 @@ static void draw_ft_plots(struct graph_info *ginfo) | |||
| 1875 | draw_plot(ginfo, list->plot, record); | 1875 | draw_plot(ginfo, list->plot, record); |
| 1876 | } | 1876 | } |
| 1877 | } | 1877 | } |
| 1878 | int stuff = 0; | ||
| 1879 | for (list = ginfo->all_recs; list; list = list->next) { | 1878 | for (list = ginfo->all_recs; list; list = list->next) { |
| 1880 | if (list->plot->time != TIME_TYPE_FT) | 1879 | if (list->plot->time != TIME_TYPE_FT) |
| 1881 | continue; | 1880 | continue; |
diff --git a/trace-graph.h b/trace-graph.h index 33bdde2..d3d4cba 100644 --- a/trace-graph.h +++ b/trace-graph.h | |||
| @@ -29,6 +29,10 @@ | |||
| 29 | #include "rt-graph.h" | 29 | #include "rt-graph.h" |
| 30 | #include "trace-plot-task.h" | 30 | #include "trace-plot-task.h" |
| 31 | 31 | ||
| 32 | |||
| 33 | #define RED 0xff | ||
| 34 | #define GREEN (0xff<<16) | ||
| 35 | |||
| 32 | struct graph_info; | 36 | struct graph_info; |
| 33 | 37 | ||
| 34 | typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time); | 38 | typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time); |
