Skip to content

Commit c0781fe

Browse files
committed
PlotsExt: Add legend
1 parent 7ec746d commit c0781fe

File tree

1 file changed

+27
-20
lines changed

1 file changed

+27
-20
lines changed

ext/PlotsExt.jl

+27-20
Original file line numberDiff line numberDiff line change
@@ -18,46 +18,43 @@ _name_to_color(name::AbstractString, ::Nothing) = "black"
1818
_default_colors = ["red", "orange", "green", "blue", "purple", "pink", "silver"]
1919

2020
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"
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...)
126133
end
127134

128135
end # module PlotsExt

0 commit comments

Comments
 (0)