Skip to content

Commit ce853ee

Browse files
committed
use user given task names in chrome trace
1 parent 1a317c3 commit ce853ee

File tree

1 file changed

+66
-28
lines changed

1 file changed

+66
-28
lines changed

ext/JSON3Ext.jl

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,41 +10,79 @@ using Dagger
1010

1111
function logs_to_chrome_trace(logs::Dict)
1212
execution_logs = Dict{Int,Any}()
13+
tid_to_uid = Dict{Int,UInt}()
14+
uid_to_name = Dict{UInt,String}()
1315
add_unknown_procs_metadata = false
14-
Dagger.logs_event_pairs(logs) do w, start_idx, finish_idx
15-
category = logs[w][:core][start_idx].category
16-
if category == :compute
17-
tid = logs[w][:id][start_idx].thunk_id # thunk id
18-
if !haskey(execution_logs, tid)
19-
execution_logs[tid] = Dict{Symbol,Any}()
16+
for w in keys(logs)
17+
for idx in 1:length(logs[w][:core])
18+
category = logs[w][:core][idx].category
19+
kind = logs[w][:core][idx].kind
20+
if category == :compute
21+
tid = logs[w][:id][idx].thunk_id # thunk id
22+
if !haskey(execution_logs, tid)
23+
execution_logs[tid] = Dict{Symbol,Any}()
24+
end
25+
if kind == :start
26+
#start time
27+
execution_logs[tid][:ts] = logs[w][:core][idx].timestamp / 1e3 # us
28+
# proc
29+
proc = logs[w][:id][idx].processor
30+
if proc isa Dagger.ThreadProc
31+
execution_logs[tid][:pid] = proc.owner
32+
execution_logs[tid][:tid] = proc.tid # thread id
33+
else
34+
@warn "Compute event for [$tid] executed on non-Dagger.ThreadProc processor. Assigning unknown pid and tid"
35+
execution_logs[tid][:pid] = -1
36+
execution_logs[tid][:tid] = -1
37+
add_unknown_procs_metadata = true
38+
end
39+
else
40+
# stop time (temporary as duration is used in the trace format)
41+
execution_logs[tid][:_stop] = logs[w][:core][idx].timestamp / 1e3 # us
42+
end
43+
elseif category == :add_thunk && kind == :start
44+
tid = logs[w][:id][idx].thunk_id
45+
if !haskey(execution_logs, tid)
46+
execution_logs[tid] = Dict{Symbol,Any}()
47+
end
48+
# auto name
49+
execution_logs[tid][:name] = logs[w][:taskfuncnames][idx]
50+
# uid-tid mapping for user task name
51+
if haskey(logs[w], :taskuidtotid)
52+
uid_tid = logs[w][:taskuidtotid][idx]
53+
if uid_tid !== nothing
54+
uid, tid = uid_tid::Pair{UInt,Int}
55+
tid_to_uid[tid] = uid
56+
end
57+
end
58+
elseif category == :data_annotation && kind == :start
59+
# user task name
60+
id = logs[w][:id][idx]::NamedTuple
61+
name = String(id.name)
62+
obj = id.objectid::Dagger.LoggedMutableObject
63+
objid = obj.objid
64+
uid_to_name[objid] = name
2065
end
21-
t_start = logs[w][:core][start_idx].timestamp / 1e3 # us
22-
t_stop = logs[w][:core][finish_idx].timestamp / 1e3 # us
23-
proc = logs[w][:id][start_idx].processor
24-
execution_logs[tid][:ts] = t_start
25-
execution_logs[tid][:dur] = t_stop - t_start
26-
if proc isa Dagger.ThreadProc
27-
execution_logs[tid][:pid] = proc.owner
28-
execution_logs[tid][:tid] = proc.tid # thread id
29-
else
30-
@warn "Compute event for [$tid] executed on non-Dagger.ThreadProc processor. Assigning unknown pid and tid"
31-
execution_logs[tid][:pid] = -1
32-
execution_logs[tid][:tid] = -1
33-
add_unknown_procs_metadata = true
34-
end
35-
elseif category == :add_thunk
36-
tid = logs[w][:id][start_idx].thunk_id
37-
if !haskey(execution_logs, tid)
38-
execution_logs[tid] = Dict{Symbol,Any}()
39-
end
40-
fname = logs[w][:taskfuncnames][start_idx]
41-
execution_logs[tid][:name] = fname
4266
end
4367
end
4468
events = Vector{Dict{Symbol,Any}}()
45-
for (_, v) in execution_logs
69+
for (tid, v) in execution_logs
70+
if !haskey(v, :ts) || !haskey(v, :_stop)
71+
continue
72+
end
73+
v[:dur] = v[:_stop] - v[:ts]
74+
delete!(v, :_stop)
75+
4676
v[:ph] = "X"
4777
v[:cat] = "compute"
78+
79+
# replace auto name with user task name if present
80+
if haskey(tid_to_uid, tid)
81+
uid = tid_to_uid[tid]
82+
if haskey(uid_to_name, uid)
83+
v[:name] = uid_to_name[uid]
84+
end
85+
end
4886
push!(events, v)
4987
end
5088
if add_unknown_procs_metadata

0 commit comments

Comments
 (0)