@@ -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