1818#include < thread>
1919#include < unistd.h>
2020
21- unsigned long process_id () { return static_cast <unsigned long >(getpid ()); }
2221
2322namespace chrono = std::chrono;
2423
2524Writer *GWriter = nullptr ;
2625
26+ struct Measurements {
27+ size_t TID;
28+ size_t PID;
29+ size_t TimeStamp;
30+ };
31+
32+ unsigned long process_id () { return static_cast <unsigned long >(getpid ()); }
33+
34+ static Measurements measure () {
35+ size_t TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
36+ size_t PID = process_id ();
37+ auto Now = chrono::high_resolution_clock::now ();
38+ size_t TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
39+ .time_since_epoch ()
40+ .count ();
41+
42+ return Measurements{TID, PID, TS};
43+ }
44+
2745XPTI_CALLBACK_API void piBeginEndCallback (uint16_t TraceType,
2846 xpti::trace_event_data_t *,
2947 xpti::trace_event_data_t *,
@@ -51,29 +69,21 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int /*major_version*/,
5169
5270 if (std::string_view (StreamName) == " sycl.pi" ) {
5371 uint8_t StreamID = xptiRegisterStream (StreamName);
54- xptiRegisterCallback (StreamID,
55- (uint16_t )xpti::trace_point_type_t ::function_begin,
72+ xptiRegisterCallback (StreamID, xpti::trace_function_begin,
5673 piBeginEndCallback);
57- xptiRegisterCallback (StreamID,
58- (uint16_t )xpti::trace_point_type_t ::function_end,
74+ xptiRegisterCallback (StreamID, xpti::trace_function_end,
5975 piBeginEndCallback);
6076 } else if (std::string_view (StreamName) == " sycl" ) {
6177 uint8_t StreamID = xptiRegisterStream (StreamName);
62- xptiRegisterCallback (StreamID,
63- (uint16_t )xpti::trace_point_type_t ::task_begin,
78+ xptiRegisterCallback (StreamID, xpti::trace_task_begin,
6479 taskBeginEndCallback);
65- xptiRegisterCallback (StreamID, (uint16_t )xpti::trace_point_type_t ::task_end,
66- taskBeginEndCallback);
67- xptiRegisterCallback (StreamID,
68- (uint16_t )xpti::trace_point_type_t ::wait_begin,
69- waitBeginEndCallback);
70- xptiRegisterCallback (StreamID, (uint16_t )xpti::trace_point_type_t ::wait_end,
80+ xptiRegisterCallback (StreamID, xpti::trace_task_end, taskBeginEndCallback);
81+ xptiRegisterCallback (StreamID, xpti::trace_wait_begin,
7182 waitBeginEndCallback);
72- xptiRegisterCallback (StreamID,
73- ( uint16_t ) xpti::trace_point_type_t ::barrier_begin ,
83+ xptiRegisterCallback (StreamID, xpti::trace_wait_end, waitBeginEndCallback);
84+ xptiRegisterCallback (StreamID, xpti::trace_barrier_begin ,
7485 waitBeginEndCallback);
75- xptiRegisterCallback (StreamID,
76- (uint16_t )xpti::trace_point_type_t ::barrier_end,
86+ xptiRegisterCallback (StreamID, xpti::trace_barrier_end,
7787 waitBeginEndCallback);
7888 }
7989}
@@ -85,13 +95,8 @@ XPTI_CALLBACK_API void piBeginEndCallback(uint16_t TraceType,
8595 xpti::trace_event_data_t *,
8696 uint64_t /* Instance*/ ,
8797 const void *UserData) {
88- unsigned long TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
89- unsigned long PID = process_id ();
90- auto Now = chrono::high_resolution_clock::now ();
91- auto TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
92- .time_since_epoch ()
93- .count ();
94- if (TraceType == (uint16_t )xpti::trace_point_type_t ::function_begin) {
98+ auto [TID, PID, TS] = measure ();
99+ if (TraceType == xpti::trace_function_begin) {
95100 GWriter->writeBegin (static_cast <const char *>(UserData), " Plugin" , PID, TID,
96101 TS);
97102 } else {
@@ -105,9 +110,6 @@ XPTI_CALLBACK_API void taskBeginEndCallback(uint16_t TraceType,
105110 xpti::trace_event_data_t *Event,
106111 uint64_t /* Instance*/ ,
107112 const void *) {
108- unsigned long TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
109- unsigned long PID = process_id ();
110-
111113 std::string_view Name = " unknown" ;
112114
113115 xpti::metadata_t *Metadata = xptiQueryMetadata (Event);
@@ -118,12 +120,8 @@ XPTI_CALLBACK_API void taskBeginEndCallback(uint16_t TraceType,
118120 }
119121 }
120122
121- auto Now = chrono::high_resolution_clock::now ();
122- auto TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
123- .time_since_epoch ()
124- .count ();
125-
126- if (TraceType == (uint16_t )xpti::trace_point_type_t ::task_begin) {
123+ auto [TID, PID, TS] = measure ();
124+ if (TraceType == xpti::trace_task_begin) {
127125 GWriter->writeBegin (Name, " SYCL" , PID, TID, TS);
128126 } else {
129127 GWriter->writeEnd (Name, " SYCL" , PID, TID, TS);
@@ -135,14 +133,9 @@ XPTI_CALLBACK_API void waitBeginEndCallback(uint16_t TraceType,
135133 xpti::trace_event_data_t *,
136134 uint64_t /* Instance*/ ,
137135 const void *UserData) {
138- unsigned long TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
139- unsigned long PID = process_id ();
140- auto Now = chrono::high_resolution_clock::now ();
141- auto TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
142- .time_since_epoch ()
143- .count ();
144- if (TraceType == (uint16_t )xpti::trace_point_type_t ::wait_begin ||
145- TraceType == (uint16_t )xpti::trace_point_type_t ::barrier_begin) {
136+ auto [TID, PID, TS] = measure ();
137+ if (TraceType == xpti::trace_wait_begin ||
138+ TraceType == xpti::trace_barrier_begin) {
146139 GWriter->writeBegin (static_cast <const char *>(UserData), " SYCL" , PID, TID,
147140 TS);
148141 } else {
0 commit comments