@@ -18,46 +18,43 @@ _name_to_color(name::AbstractString, ::Nothing) = "black"
1818_default_colors = [" red" , " orange" , " green" , " blue" , " purple" , " pink" , " silver" ]
1919
2020function 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"
3634 end
3735 end
3836 end
3937 end
4038
4139 # 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[])
4341 Dagger. logs_event_pairs (logs) do w, start_idx, finish_idx
4442 category = logs[w][:core ][start_idx]. category
4543 if category == :compute
4644 proc = logs[w][:id ][start_idx]. processor:: Processor
4745 proc_name = Dagger. short_name (proc)
4846 tid = logs[w][:id ][start_idx]. thunk_id:: Int
49- fn_name = get ( fn_names, tid, " unknown " )
47+ fn_name = fn_names[ tid]
5048 t_start = logs[w][:core ][start_idx]. timestamp:: UInt64
5149 t_end = logs[w][:core ][finish_idx]. timestamp:: UInt64
5250 if color_by == :fn
53- fn_name = fn_names[tid]
5451 color = name_to_color (fn_name, colors)
5552 elseif color_by == :proc
5653 color = name_to_color (proc_name, colors)
5754 else
5855 throw (ArgumentError (" Invalid color_by value: $(repr (color_by)) " ))
5956 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))
6158 end
6259 end
6360 return df
@@ -121,8 +118,18 @@ function Dagger.render_logs(logs::Dict, ::Val{:plots_gantt};
121118 u = unique (df. proc_name)
122119 dy = Dict (u .=> 1 : length (u))
123120 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
124128
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... )
126133end
127134
128135end # module PlotsExt
0 commit comments