Skip to content

Commit 07cdf63

Browse files
committed
use logs_event_pairs in logs_to_chrome_trace
1 parent 40a5cf2 commit 07cdf63

File tree

1 file changed

+42
-55
lines changed

1 file changed

+42
-55
lines changed

ext/JSON3Ext.jl

Lines changed: 42 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -13,69 +13,56 @@ function logs_to_chrome_trace(logs::Dict)
1313
tid_to_uid = Dict{Int,UInt}()
1414
uid_to_name = Dict{UInt,String}()
1515
add_unknown_procs_metadata = false
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
16+
Dagger.logs_event_pairs(logs) do w, start_idx, finish_idx
17+
category = logs[w][:core][start_idx].category
18+
if category == :compute
19+
tid = logs[w][:id][start_idx].thunk_id # thunk id
20+
if !haskey(execution_logs, tid)
21+
execution_logs[tid] = Dict{Symbol,Any}()
22+
end
23+
t_start = logs[w][:core][start_idx].timestamp / 1e3 # us
24+
t_stop = logs[w][:core][finish_idx].timestamp / 1e3 # us
25+
execution_logs[tid][:ts] = t_start
26+
execution_logs[tid][:dur] = t_stop - t_start
27+
proc = logs[w][:id][start_idx].processor
28+
if proc isa Dagger.ThreadProc
29+
execution_logs[tid][:pid] = proc.owner
30+
execution_logs[tid][:tid] = proc.tid # thread id
31+
else
32+
@warn "Compute event for [$tid] executed on non-Dagger.ThreadProc processor. Assigning unknown pid and tid"
33+
execution_logs[tid][:pid] = -1
34+
execution_logs[tid][:tid] = -1
35+
add_unknown_procs_metadata = true
36+
end
37+
elseif category == :add_thunk
38+
tid = logs[w][:id][start_idx].thunk_id
39+
if !haskey(execution_logs, tid)
40+
execution_logs[tid] = Dict{Symbol,Any}()
41+
end
42+
# auto name
43+
fname = logs[w][:taskfuncnames][start_idx]
44+
execution_logs[tid][:name] = fname
45+
# uid-tid mapping for user task name
46+
if haskey(logs[w], :taskuidtotid)
47+
uid_tid = logs[w][:taskuidtotid][start_idx]
48+
if uid_tid !== nothing
49+
uid, tid = uid_tid::Pair{UInt,Int}
50+
tid_to_uid[tid] = uid
5751
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
6552
end
53+
elseif category == :data_annotation
54+
# user task name
55+
id = logs[w][:id][start_idx]::NamedTuple
56+
name = String(id.name)
57+
obj = id.objectid::Dagger.LoggedMutableObject
58+
objid = obj.objid
59+
uid_to_name[objid] = name
6660
end
6761
end
6862
events = Vector{Dict{Symbol,Any}}()
6963
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-
7664
v[:ph] = "X"
7765
v[:cat] = "compute"
78-
7966
# replace auto name with user task name if present
8067
if haskey(tid_to_uid, tid)
8168
uid = tid_to_uid[tid]

0 commit comments

Comments
 (0)