summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-19 15:02:18 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-20 15:31:48 +0000
commit295f1608b050af3bf73b3cd6eaadb9a52a6b4822 (patch)
treef937737e21cdf50bb10d28e593dc46ccea333daa /scripts
parent6e6dcbe340c9ee4a4a23318ace3335a004a8d31b (diff)
downloadpoky-295f1608b050af3bf73b3cd6eaadb9a52a6b4822.tar.gz
scripts/pybootchart: Fix missing entries bug
If two entries have the same start time, the data store used will cause all but one of the entries to be lost. This patch enhances the data storage structure to avoid this problem and allow more than one event to start at the same time. (From OE-Core rev: 220b071fd8d1cc6bdbca58f75489e3c9b34921ca) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/pybootchartgui/pybootchartgui/draw.py53
-rw-r--r--scripts/pybootchartgui/pybootchartgui/parsing.py29
2 files changed, 48 insertions, 34 deletions
diff --git a/scripts/pybootchartgui/pybootchartgui/draw.py b/scripts/pybootchartgui/pybootchartgui/draw.py
index 16830fa456..1b872de75e 100644
--- a/scripts/pybootchartgui/pybootchartgui/draw.py
+++ b/scripts/pybootchartgui/pybootchartgui/draw.py
@@ -287,32 +287,33 @@ def render(ctx, res):
287 287
288 offset = min(res.start.keys()) 288 offset = min(res.start.keys())
289 for s in sorted(res.start.keys()): 289 for s in sorted(res.start.keys()):
290 task = res.start[s].split(":")[1] 290 for val in sorted(res.start[s]):
291 #print res.start[s] 291 task = val.split(":")[1]
292 #print res.processes[res.start[s]][1] 292 #print val
293 #print s 293 #print res.processes[val][1]
294 x = (s - offset) * sec_w 294 #print s
295 w = ((res.processes[res.start[s]][1] - s) * sec_w) 295 x = (s - offset) * sec_w
296 296 w = ((res.processes[val][1] - s) * sec_w)
297 #print "proc at %s %s %s %s" % (x, y, w, proc_h) 297
298 col = None 298 #print "proc at %s %s %s %s" % (x, y, w, proc_h)
299 if task == "do_compile": 299 col = None
300 col = TASK_COLOR_COMPILE 300 if task == "do_compile":
301 elif task == "do_configure": 301 col = TASK_COLOR_COMPILE
302 col = TASK_COLOR_CONFIGURE 302 elif task == "do_configure":
303 elif task == "do_install": 303 col = TASK_COLOR_CONFIGURE
304 col = TASK_COLOR_INSTALL 304 elif task == "do_install":
305 elif task == "do_package": 305 col = TASK_COLOR_INSTALL
306 col = TASK_COLOR_PACKAGE 306 elif task == "do_package":
307 elif task == "do_populate_sysroot": 307 col = TASK_COLOR_PACKAGE
308 col = TASK_COLOR_SYSROOT 308 elif task == "do_populate_sysroot":
309 309 col = TASK_COLOR_SYSROOT
310 draw_rect(ctx, PROC_BORDER_COLOR, (x, y, w, proc_h)) 310
311 if col: 311 draw_rect(ctx, PROC_BORDER_COLOR, (x, y, w, proc_h))
312 draw_fill_rect(ctx, col, (x, y, w, proc_h)) 312 if col:
313 313 draw_fill_rect(ctx, col, (x, y, w, proc_h))
314 draw_label_in_box(ctx, PROC_TEXT_COLOR, res.start[s], x, y + proc_h - 4, w, proc_h) 314
315 y = y + proc_h 315 draw_label_in_box(ctx, PROC_TEXT_COLOR, val, x, y + proc_h - 4, w, proc_h)
316 y = y + proc_h
316 317
317 # draw process boxes 318 # draw process boxes
318 #draw_process_bar_chart(ctx, proc_tree, curr_y + bar_h, w, h) 319 #draw_process_bar_chart(ctx, proc_tree, curr_y + bar_h, w, h)
diff --git a/scripts/pybootchartgui/pybootchartgui/parsing.py b/scripts/pybootchartgui/pybootchartgui/parsing.py
index c64eba0a4d..a0f6e8e0eb 100644
--- a/scripts/pybootchartgui/pybootchartgui/parsing.py
+++ b/scripts/pybootchartgui/pybootchartgui/parsing.py
@@ -184,9 +184,16 @@ def _do_parse(state, filename, file):
184 elif line.startswith("Ended:"): 184 elif line.startswith("Ended:"):
185 end = int(float(line.split()[-1])) 185 end = int(float(line.split()[-1]))
186 if start and end and (end - start) > 8: 186 if start and end and (end - start) > 8:
187 k = pn + ":" + task
187 state.processes[pn + ":" + task] = [start, end] 188 state.processes[pn + ":" + task] = [start, end]
188 state.start[start] = pn + ":" + task 189 if start not in state.start:
189 state.end[end] = pn + ":" + task 190 state.start[start] = []
191 if k not in state.start[start]:
192 state.start[start].append(pn + ":" + task)
193 if end not in state.end:
194 state.end[end] = []
195 if k not in state.end[end]:
196 state.end[end].append(pn + ":" + task)
190 return state 197 return state
191 198
192def parse_file(state, filename): 199def parse_file(state, filename):
@@ -248,12 +255,18 @@ def split_res(res, n):
248 #state.processes[pn + ":" + task] = [start, end] 255 #state.processes[pn + ":" + task] = [start, end]
249 #state.start[start] = pn + ":" + task 256 #state.start[start] = pn + ":" + task
250 #state.end[end] = pn + ":" + task 257 #state.end[end] = pn + ":" + task
251 p = res.start[s_list[i]] 258 for p in res.start[s_list[i]]:
252 s = s_list[i] 259 s = s_list[i]
253 e = res.processes[p][1] 260 e = res.processes[p][1]
254 state.processes[p] = [s, e] 261 state.processes[p] = [s, e]
255 state.start[s] = p 262 if s not in state.start:
256 state.end[e] = p 263 state.start[s] = []
264 if p not in state.start[s]:
265 state.start[s].append(p)
266 if e not in state.end:
267 state.end[e] = []
268 if p not in state.end[e]:
269 state.end[e].append(p)
257 start = end 270 start = end
258 end = end + frag_size 271 end = end + frag_size
259 if end > len(s_list): 272 if end > len(s_list):