@@ -18,46 +18,43 @@ _name_to_color(name::AbstractString, ::Nothing) = "black"
18
18
_default_colors = [" red" , " orange" , " green" , " blue" , " purple" , " pink" , " silver" ]
19
19
20
20
function logs_to_df (logs:: Dict ; colors= _default_colors, name_to_color= _name_to_color, color_by= :fn )
21
- if color_by == :fn
22
- # Generate function names
23
- fn_names = Dict {Int, String} ()
24
- for w in keys (logs)
25
- for idx in 1 : length (logs[w][:core ])
26
- category = logs[w][:core ][idx]. category:: Symbol
27
- kind = logs[w][:core ][idx]. kind:: Symbol
28
- if category == :add_thunk && kind == :start
29
- tid = logs[w][:id ][idx]. thunk_id:: Int
30
- if haskey (logs[w], :tasknames )
31
- fn_names[tid] = first (split (logs[w][:tasknames ][idx]:: String , ' ' ))
32
- else
33
- @warn " Task names missing from logs"
34
- fn_names[tid] = " "
35
- end
21
+ # Generate function names
22
+ fn_names = Dict {Int, String} ()
23
+ for w in keys (logs)
24
+ for idx in 1 : length (logs[w][:core ])
25
+ category = logs[w][:core ][idx]. category:: Symbol
26
+ kind = logs[w][:core ][idx]. kind:: Symbol
27
+ if category == :add_thunk && kind == :start
28
+ tid = logs[w][:id ][idx]. thunk_id:: Int
29
+ if haskey (logs[w], :tasknames )
30
+ fn_names[tid] = first (split (logs[w][:tasknames ][idx]:: String , ' ' ))
31
+ else
32
+ @warn " Task names missing from logs"
33
+ fn_names[tid] = " unknown"
36
34
end
37
35
end
38
36
end
39
37
end
40
38
41
39
# FIXME : Color eltype
42
- df = DataFrame (proc= Processor[], proc_name= String[], tid= Int[], t_start= UInt64[], t_end= UInt64[], color= Any[])
40
+ df = DataFrame (proc= Processor[], proc_name= String[], fn_name = String[], tid= Int[], t_start= UInt64[], t_end= UInt64[], color= Any[])
43
41
Dagger. logs_event_pairs (logs) do w, start_idx, finish_idx
44
42
category = logs[w][:core ][start_idx]. category
45
43
if category == :compute
46
44
proc = logs[w][:id ][start_idx]. processor:: Processor
47
45
proc_name = Dagger. short_name (proc)
48
46
tid = logs[w][:id ][start_idx]. thunk_id:: Int
49
- fn_name = get ( fn_names, tid, " unknown " )
47
+ fn_name = fn_names[ tid]
50
48
t_start = logs[w][:core ][start_idx]. timestamp:: UInt64
51
49
t_end = logs[w][:core ][finish_idx]. timestamp:: UInt64
52
50
if color_by == :fn
53
- fn_name = fn_names[tid]
54
51
color = name_to_color (fn_name, colors)
55
52
elseif color_by == :proc
56
53
color = name_to_color (proc_name, colors)
57
54
else
58
55
throw (ArgumentError (" Invalid color_by value: $(repr (color_by)) " ))
59
56
end
60
- push! (df, (;proc, proc_name, tid, t_start, t_end, color))
57
+ push! (df, (;proc, proc_name, fn_name, tid, t_start, t_end, color))
61
58
end
62
59
end
63
60
return df
@@ -121,8 +118,18 @@ function Dagger.render_logs(logs::Dict, ::Val{:plots_gantt};
121
118
u = unique (df. proc_name)
122
119
dy = Dict (u .=> 1 : length (u))
123
120
r = [rect (t1, 1 , t2, dy[t3]) for (t1,t2,t3) in zip (duration, t_start, df. proc_name)]
121
+ labels = permutedims (df. fn_name)
122
+ # Deduplicate labels
123
+ for idx in 1 : length (labels)
124
+ if findfirst (other_idx-> labels[other_idx]== labels[idx], 1 : length (labels)) < idx
125
+ labels[idx] = " "
126
+ end
127
+ end
124
128
125
- return plot (r; color= permutedims (df. color), yticks= (1.5 : (nrow (df) + 0.5 ), u), xlabel= " Time (seconds)" , ylabel= " Processor" , labels= false , kwargs... )
129
+ return plot (r; color= permutedims (df. color), labels,
130
+ yticks= (1.5 : (nrow (df) + 0.5 ), u),
131
+ xlabel= " Time (seconds)" , ylabel= " Processor" ,
132
+ kwargs... )
126
133
end
127
134
128
135
end # module PlotsExt
0 commit comments