1 
2 //===----------------------------------------------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef _LEGACY_ITTNOTIFY_H_
11 #define _LEGACY_ITTNOTIFY_H_
12 
13 /**
14  * @file
15  * @brief Legacy User API functions and types
16  */
17 
18 /** @cond exclude_from_documentation */
19 #ifndef ITT_OS_WIN
20 #define ITT_OS_WIN 1
21 #endif /* ITT_OS_WIN */
22 
23 #ifndef ITT_OS_LINUX
24 #define ITT_OS_LINUX 2
25 #endif /* ITT_OS_LINUX */
26 
27 #ifndef ITT_OS_MAC
28 #define ITT_OS_MAC 3
29 #endif /* ITT_OS_MAC */
30 
31 #ifndef ITT_OS_FREEBSD
32 #define ITT_OS_FREEBSD 4
33 #endif /* ITT_OS_FREEBSD */
34 
35 #ifndef ITT_OS
36 #if defined WIN32 || defined _WIN32
37 #define ITT_OS ITT_OS_WIN
38 #elif defined(__APPLE__) && defined(__MACH__)
39 #define ITT_OS ITT_OS_MAC
40 #elif defined(__FreeBSD__)
41 #define ITT_OS ITT_OS_FREEBSD
42 #else
43 #define ITT_OS ITT_OS_LINUX
44 #endif
45 #endif /* ITT_OS */
46 
47 #ifndef ITT_PLATFORM_WIN
48 #define ITT_PLATFORM_WIN 1
49 #endif /* ITT_PLATFORM_WIN */
50 
51 #ifndef ITT_PLATFORM_POSIX
52 #define ITT_PLATFORM_POSIX 2
53 #endif /* ITT_PLATFORM_POSIX */
54 
55 #ifndef ITT_PLATFORM_MAC
56 #define ITT_PLATFORM_MAC 3
57 #endif /* ITT_PLATFORM_MAC */
58 
59 #ifndef ITT_PLATFORM_FREEBSD
60 #define ITT_PLATFORM_FREEBSD 4
61 #endif /* ITT_PLATFORM_FREEBSD */
62 
63 #ifndef ITT_PLATFORM
64 #if ITT_OS == ITT_OS_WIN
65 #define ITT_PLATFORM ITT_PLATFORM_WIN
66 #elif ITT_OS == ITT_OS_MAC
67 #define ITT_PLATFORM ITT_PLATFORM_MAC
68 #elif ITT_OS == ITT_OS_FREEBSD
69 #define ITT_PLATFORM ITT_PLATFORM_FREEBSD
70 #else
71 #define ITT_PLATFORM ITT_PLATFORM_POSIX
72 #endif
73 #endif /* ITT_PLATFORM */
74 
75 #if defined(_UNICODE) && !defined(UNICODE)
76 #define UNICODE
77 #endif
78 
79 #include <stddef.h>
80 #if ITT_PLATFORM == ITT_PLATFORM_WIN
81 #include <tchar.h>
82 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
83 #include <stdint.h>
84 #if defined(UNICODE) || defined(_UNICODE)
85 #include <wchar.h>
86 #endif /* UNICODE || _UNICODE */
87 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
88 
89 #ifndef ITTAPI_CDECL
90 #if ITT_PLATFORM == ITT_PLATFORM_WIN
91 #define ITTAPI_CDECL __cdecl
92 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
93 #if defined _M_IX86 || defined __i386__
94 #define ITTAPI_CDECL __attribute__((cdecl))
95 #else /* _M_IX86 || __i386__ */
96 #define ITTAPI_CDECL /* actual only on x86 platform */
97 #endif /* _M_IX86 || __i386__ */
98 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
99 #endif /* ITTAPI_CDECL */
100 
101 #ifndef STDCALL
102 #if ITT_PLATFORM == ITT_PLATFORM_WIN
103 #define STDCALL __stdcall
104 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
105 #if defined _M_IX86 || defined __i386__
106 #define STDCALL __attribute__((stdcall))
107 #else /* _M_IX86 || __i386__ */
108 #define STDCALL /* supported only on x86 platform */
109 #endif /* _M_IX86 || __i386__ */
110 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
111 #endif /* STDCALL */
112 
113 #define ITTAPI ITTAPI_CDECL
114 #define LIBITTAPI ITTAPI_CDECL
115 
116 /* TODO: Temporary for compatibility! */
117 #define ITTAPI_CALL ITTAPI_CDECL
118 #define LIBITTAPI_CALL ITTAPI_CDECL
119 
120 #if ITT_PLATFORM == ITT_PLATFORM_WIN
121 /* use __forceinline (VC++ specific) */
122 #if defined(__MINGW32__) && !defined(__cplusplus)
123 #define ITT_INLINE                                                             \
124   static __inline__ __attribute__((__always_inline__, __gnu_inline__))
125 #else
126 #define ITT_INLINE static __forceinline
127 #endif /* __MINGW32__ */
128 
129 #define ITT_INLINE_ATTRIBUTE /* nothing */
130 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
131 /*
132  * Generally, functions are not inlined unless optimization is specified.
133  * For functions declared inline, this attribute inlines the function even
134  * if no optimization level was specified.
135  */
136 #ifdef __STRICT_ANSI__
137 #define ITT_INLINE static
138 #define ITT_INLINE_ATTRIBUTE __attribute__((unused))
139 #else /* __STRICT_ANSI__ */
140 #define ITT_INLINE static inline
141 #define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
142 #endif /* __STRICT_ANSI__ */
143 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
144 /** @endcond */
145 
146 /** @cond exclude_from_documentation */
147 /* Helper macro for joining tokens */
148 #define ITT_JOIN_AUX(p, n) p##n
149 #define ITT_JOIN(p, n) ITT_JOIN_AUX(p, n)
150 
151 #ifdef ITT_MAJOR
152 #undef ITT_MAJOR
153 #endif
154 #ifdef ITT_MINOR
155 #undef ITT_MINOR
156 #endif
157 #define ITT_MAJOR 3
158 #define ITT_MINOR 0
159 
160 /* Standard versioning of a token with major and minor version numbers */
161 #define ITT_VERSIONIZE(x)                                                      \
162   ITT_JOIN(x, ITT_JOIN(_, ITT_JOIN(ITT_MAJOR, ITT_JOIN(_, ITT_MINOR))))
163 
164 #ifndef INTEL_ITTNOTIFY_PREFIX
165 #define INTEL_ITTNOTIFY_PREFIX __itt_
166 #endif /* INTEL_ITTNOTIFY_PREFIX */
167 #ifndef INTEL_ITTNOTIFY_POSTFIX
168 #define INTEL_ITTNOTIFY_POSTFIX _ptr_
169 #endif /* INTEL_ITTNOTIFY_POSTFIX */
170 
171 #define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, n)
172 #define ITTNOTIFY_NAME(n)                                                      \
173   ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n, INTEL_ITTNOTIFY_POSTFIX)))
174 
175 #define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)
176 #define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)
177 
178 #define ITTNOTIFY_VOID_D0(n, d)                                                \
179   (!(d)->flags)          ? (void)0                                             \
180   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
181                          : ITTNOTIFY_NAME(n)(d)
182 #define ITTNOTIFY_VOID_D1(n, d, x)                                             \
183   (!(d)->flags)          ? (void)0                                             \
184   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
185                          : ITTNOTIFY_NAME(n)(d, x)
186 #define ITTNOTIFY_VOID_D2(n, d, x, y)                                          \
187   (!(d)->flags)          ? (void)0                                             \
188   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
189                          : ITTNOTIFY_NAME(n)(d, x, y)
190 #define ITTNOTIFY_VOID_D3(n, d, x, y, z)                                       \
191   (!(d)->flags)          ? (void)0                                             \
192   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
193                          : ITTNOTIFY_NAME(n)(d, x, y, z)
194 #define ITTNOTIFY_VOID_D4(n, d, x, y, z, a)                                    \
195   (!(d)->flags)          ? (void)0                                             \
196   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
197                          : ITTNOTIFY_NAME(n)(d, x, y, z, a)
198 #define ITTNOTIFY_VOID_D5(n, d, x, y, z, a, b)                                 \
199   (!(d)->flags)          ? (void)0                                             \
200   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
201                          : ITTNOTIFY_NAME(n)(d, x, y, z, a, b)
202 #define ITTNOTIFY_VOID_D6(n, d, x, y, z, a, b, c)                              \
203   (!(d)->flags)          ? (void)0                                             \
204   : (!ITTNOTIFY_NAME(n)) ? (void)0                                             \
205                          : ITTNOTIFY_NAME(n)(d, x, y, z, a, b, c)
206 #define ITTNOTIFY_DATA_D0(n, d)                                                \
207   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d)
208 #define ITTNOTIFY_DATA_D1(n, d, x)                                             \
209   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d, x)
210 #define ITTNOTIFY_DATA_D2(n, d, x, y)                                          \
211   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d, x, y)
212 #define ITTNOTIFY_DATA_D3(n, d, x, y, z)                                       \
213   (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d, x, y, z)
214 #define ITTNOTIFY_DATA_D4(n, d, x, y, z, a)                                    \
215   (!(d)->flags)          ? 0                                                   \
216   : (!ITTNOTIFY_NAME(n)) ? 0                                                   \
217                          : ITTNOTIFY_NAME(n)(d, x, y, z, a)
218 #define ITTNOTIFY_DATA_D5(n, d, x, y, z, a, b)                                 \
219   (!(d)->flags)          ? 0                                                   \
220   : (!ITTNOTIFY_NAME(n)) ? 0                                                   \
221                          : ITTNOTIFY_NAME(n)(d, x, y, z, a, b)
222 #define ITTNOTIFY_DATA_D6(n, d, x, y, z, a, b, c)                              \
223   (!(d)->flags)          ? 0                                                   \
224   : (!ITTNOTIFY_NAME(n)) ? 0                                                   \
225                          : ITTNOTIFY_NAME(n)(d, x, y, z, a, b, c)
226 
227 #ifdef ITT_STUB
228 #undef ITT_STUB
229 #endif
230 #ifdef ITT_STUBV
231 #undef ITT_STUBV
232 #endif
233 #define ITT_STUBV(api, type, name, args)                                       \
234   typedef type(api *ITT_JOIN(ITTNOTIFY_NAME(name), _t)) args;                  \
235   extern ITT_JOIN(ITTNOTIFY_NAME(name), _t) ITTNOTIFY_NAME(name);
236 #define ITT_STUB ITT_STUBV
237 /** @endcond */
238 
239 #ifdef __cplusplus
240 extern "C" {
241 #endif /* __cplusplus */
242 
243 /**
244  * @defgroup legacy Legacy API
245  * @{
246  * @}
247  */
248 
249 /**
250  * @defgroup legacy_control Collection Control
251  * @ingroup legacy
252  * General behavior: application continues to run, but no profiling information
253  * is being collected
254  *
255  * Pausing occurs not only for the current thread but for all process as well as
256  * spawned processes
257  * - Intel(R) Parallel Inspector and Intel(R) Inspector XE:
258  *   - Does not analyze or report errors that involve memory access.
259  *   - Other errors are reported as usual. Pausing data collection in
260  *     Intel(R) Parallel Inspector and Intel(R) Inspector XE
261  *     only pauses tracing and analyzing memory access.
262  *     It does not pause tracing or analyzing threading APIs.
263  *   .
264  * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE:
265  *   - Does continue to record when new threads are started.
266  *   .
267  * - Other effects:
268  *   - Possible reduction of runtime overhead.
269  *   .
270  * @{
271  */
272 #ifndef _ITTNOTIFY_H_
273 /** @brief Pause collection */
274 void ITTAPI __itt_pause(void);
275 /** @brief Resume collection */
276 void ITTAPI __itt_resume(void);
277 /** @brief Detach collection */
278 void ITTAPI __itt_detach(void);
279 
280 /** @cond exclude_from_documentation */
281 #ifndef INTEL_NO_MACRO_BODY
282 #ifndef INTEL_NO_ITTNOTIFY_API
283 ITT_STUBV(ITTAPI, void, pause, (void))
284 ITT_STUBV(ITTAPI, void, resume, (void))
285 ITT_STUBV(ITTAPI, void, detach, (void))
286 #define __itt_pause ITTNOTIFY_VOID(pause)
287 #define __itt_pause_ptr ITTNOTIFY_NAME(pause)
288 #define __itt_resume ITTNOTIFY_VOID(resume)
289 #define __itt_resume_ptr ITTNOTIFY_NAME(resume)
290 #define __itt_detach ITTNOTIFY_VOID(detach)
291 #define __itt_detach_ptr ITTNOTIFY_NAME(detach)
292 #else /* INTEL_NO_ITTNOTIFY_API */
293 #define __itt_pause()
294 #define __itt_pause_ptr 0
295 #define __itt_resume()
296 #define __itt_resume_ptr 0
297 #define __itt_detach()
298 #define __itt_detach_ptr 0
299 #endif /* INTEL_NO_ITTNOTIFY_API */
300 #else /* INTEL_NO_MACRO_BODY */
301 #define __itt_pause_ptr 0
302 #define __itt_resume_ptr 0
303 #define __itt_detach_ptr 0
304 #endif /* INTEL_NO_MACRO_BODY */
305 /** @endcond */
306 #endif /* _ITTNOTIFY_H_ */
307 /** @} legacy_control group */
308 
309 /**
310  * @defgroup legacy_threads Threads
311  * @ingroup legacy
312  * Threads group
313  * @warning Legacy API
314  * @{
315  */
316 /**
317  * @deprecated Legacy API
318  * @brief Set name to be associated with thread in analysis GUI.
319  * @return __itt_err upon failure (name or namelen being null,name and namelen
320  * mismatched)
321  */
322 #if ITT_PLATFORM == ITT_PLATFORM_WIN
323 int LIBITTAPI __itt_thr_name_setA(const char *name, int namelen);
324 int LIBITTAPI __itt_thr_name_setW(const wchar_t *name, int namelen);
325 #if defined(UNICODE) || defined(_UNICODE)
326 #define __itt_thr_name_set __itt_thr_name_setW
327 #define __itt_thr_name_set_ptr __itt_thr_name_setW_ptr
328 #else
329 #define __itt_thr_name_set __itt_thr_name_setA
330 #define __itt_thr_name_set_ptr __itt_thr_name_setA_ptr
331 #endif /* UNICODE */
332 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
333 int LIBITTAPI __itt_thr_name_set(const char *name, int namelen);
334 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
335 
336 /** @cond exclude_from_documentation */
337 #ifndef INTEL_NO_MACRO_BODY
338 #ifndef INTEL_NO_ITTNOTIFY_API
339 #if ITT_PLATFORM == ITT_PLATFORM_WIN
340 ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char *name, int namelen))
341 ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen))
342 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
343 ITT_STUB(LIBITTAPI, int, thr_name_set, (const char *name, int namelen))
344 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
345 #if ITT_PLATFORM == ITT_PLATFORM_WIN
346 #define __itt_thr_name_setA ITTNOTIFY_DATA(thr_name_setA)
347 #define __itt_thr_name_setA_ptr ITTNOTIFY_NAME(thr_name_setA)
348 #define __itt_thr_name_setW ITTNOTIFY_DATA(thr_name_setW)
349 #define __itt_thr_name_setW_ptr ITTNOTIFY_NAME(thr_name_setW)
350 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
351 #define __itt_thr_name_set ITTNOTIFY_DATA(thr_name_set)
352 #define __itt_thr_name_set_ptr ITTNOTIFY_NAME(thr_name_set)
353 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
354 #else /* INTEL_NO_ITTNOTIFY_API */
355 #if ITT_PLATFORM == ITT_PLATFORM_WIN
356 #define __itt_thr_name_setA(name, namelen)
357 #define __itt_thr_name_setA_ptr 0
358 #define __itt_thr_name_setW(name, namelen)
359 #define __itt_thr_name_setW_ptr 0
360 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
361 #define __itt_thr_name_set(name, namelen)
362 #define __itt_thr_name_set_ptr 0
363 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
364 #endif /* INTEL_NO_ITTNOTIFY_API */
365 #else /* INTEL_NO_MACRO_BODY */
366 #if ITT_PLATFORM == ITT_PLATFORM_WIN
367 #define __itt_thr_name_setA_ptr 0
368 #define __itt_thr_name_setW_ptr 0
369 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
370 #define __itt_thr_name_set_ptr 0
371 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
372 #endif /* INTEL_NO_MACRO_BODY */
373 /** @endcond */
374 
375 /**
376  * @deprecated Legacy API
377  * @brief Mark current thread as ignored from this point on, for the duration of
378  * its existence.
379  */
380 void LIBITTAPI __itt_thr_ignore(void);
381 
382 /** @cond exclude_from_documentation */
383 #ifndef INTEL_NO_MACRO_BODY
384 #ifndef INTEL_NO_ITTNOTIFY_API
385 ITT_STUBV(LIBITTAPI, void, thr_ignore, (void))
386 #define __itt_thr_ignore ITTNOTIFY_VOID(thr_ignore)
387 #define __itt_thr_ignore_ptr ITTNOTIFY_NAME(thr_ignore)
388 #else /* INTEL_NO_ITTNOTIFY_API */
389 #define __itt_thr_ignore()
390 #define __itt_thr_ignore_ptr 0
391 #endif /* INTEL_NO_ITTNOTIFY_API */
392 #else /* INTEL_NO_MACRO_BODY */
393 #define __itt_thr_ignore_ptr 0
394 #endif /* INTEL_NO_MACRO_BODY */
395 /** @endcond */
396 /** @} legacy_threads group */
397 
398 /**
399  * @defgroup legacy_sync Synchronization
400  * @ingroup legacy
401  * Synchronization group
402  * @warning Legacy API
403  * @{
404  */
405 /**
406  * @hideinitializer
407  * @brief possible value of attribute argument for sync object type
408  */
409 #define __itt_attr_barrier 1
410 
411 /**
412  * @hideinitializer
413  * @brief possible value of attribute argument for sync object type
414  */
415 #define __itt_attr_mutex 2
416 
417 /**
418  * @deprecated Legacy API
419  * @brief Assign a name to a sync object using char or Unicode string
420  * @param[in] addr    - pointer to the sync object. You should use a real
421  * pointer to your object to make sure that the values don't clash with other
422  * object addresses
423  * @param[in] objtype - null-terminated object type string. If NULL is passed,
424  * the object will be assumed to be of generic "User Synchronization" type
425  * @param[in] objname - null-terminated object name string. If NULL, no name
426  * will be assigned to the object -- you can use the __itt_sync_rename call
427  * later to assign the name
428  * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values
429  * which defines the exact semantics of how prepare/acquired/releasing calls
430  * work.
431  */
432 #if ITT_PLATFORM == ITT_PLATFORM_WIN
433 void ITTAPI __itt_sync_set_nameA(void *addr, const char *objtype,
434                                  const char *objname, int attribute);
435 void ITTAPI __itt_sync_set_nameW(void *addr, const wchar_t *objtype,
436                                  const wchar_t *objname, int attribute);
437 #if defined(UNICODE) || defined(_UNICODE)
438 #define __itt_sync_set_name __itt_sync_set_nameW
439 #define __itt_sync_set_name_ptr __itt_sync_set_nameW_ptr
440 #else /* UNICODE */
441 #define __itt_sync_set_name __itt_sync_set_nameA
442 #define __itt_sync_set_name_ptr __itt_sync_set_nameA_ptr
443 #endif /* UNICODE */
444 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
445 void ITTAPI __itt_sync_set_name(void *addr, const char *objtype,
446                                 const char *objname, int attribute);
447 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
448 
449 /** @cond exclude_from_documentation */
450 #ifndef INTEL_NO_MACRO_BODY
451 #ifndef INTEL_NO_ITTNOTIFY_API
452 #if ITT_PLATFORM == ITT_PLATFORM_WIN
453 ITT_STUBV(ITTAPI, void, sync_set_nameA,
454           (void *addr, const char *objtype, const char *objname, int attribute))
455 ITT_STUBV(ITTAPI, void, sync_set_nameW,
456           (void *addr, const wchar_t *objtype, const wchar_t *objname,
457            int attribute))
458 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
459 ITT_STUBV(ITTAPI, void, sync_set_name,
460           (void *addr, const char *objtype, const char *objname, int attribute))
461 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
462 #if ITT_PLATFORM == ITT_PLATFORM_WIN
463 #define __itt_sync_set_nameA ITTNOTIFY_VOID(sync_set_nameA)
464 #define __itt_sync_set_nameA_ptr ITTNOTIFY_NAME(sync_set_nameA)
465 #define __itt_sync_set_nameW ITTNOTIFY_VOID(sync_set_nameW)
466 #define __itt_sync_set_nameW_ptr ITTNOTIFY_NAME(sync_set_nameW)
467 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
468 #define __itt_sync_set_name ITTNOTIFY_VOID(sync_set_name)
469 #define __itt_sync_set_name_ptr ITTNOTIFY_NAME(sync_set_name)
470 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
471 #else /* INTEL_NO_ITTNOTIFY_API */
472 #if ITT_PLATFORM == ITT_PLATFORM_WIN
473 #define __itt_sync_set_nameA(addr, objtype, objname, attribute)
474 #define __itt_sync_set_nameA_ptr 0
475 #define __itt_sync_set_nameW(addr, objtype, objname, attribute)
476 #define __itt_sync_set_nameW_ptr 0
477 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
478 #define __itt_sync_set_name(addr, objtype, objname, attribute)
479 #define __itt_sync_set_name_ptr 0
480 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
481 #endif /* INTEL_NO_ITTNOTIFY_API */
482 #else /* INTEL_NO_MACRO_BODY */
483 #if ITT_PLATFORM == ITT_PLATFORM_WIN
484 #define __itt_sync_set_nameA_ptr 0
485 #define __itt_sync_set_nameW_ptr 0
486 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
487 #define __itt_sync_set_name_ptr 0
488 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
489 #endif /* INTEL_NO_MACRO_BODY */
490 /** @endcond */
491 
492 /**
493  * @deprecated Legacy API
494  * @brief Assign a name and type to a sync object using char or Unicode string
495  * @param[in] addr -      pointer to the sync object. You should use a real
496  * pointer to your object to make sure that the values don't clash with other
497  * object addresses
498  * @param[in] objtype -   null-terminated object type string. If NULL is passed,
499  * the object will be assumed to be of generic "User Synchronization" type
500  * @param[in] objname -   null-terminated object name string. If NULL, no name
501  * will be assigned to the object -- you can use the __itt_sync_rename call
502  * later to assign the name
503  * @param[in] typelen, namelen -   a length of string for appropriate objtype
504  * and objname parameter
505  * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values
506  * which defines the exact semantics of how prepare/acquired/releasing calls
507  * work.
508  * @return __itt_err upon failure (name or namelen being null,name and namelen
509  * mismatched)
510  */
511 #if ITT_PLATFORM == ITT_PLATFORM_WIN
512 int LIBITTAPI __itt_notify_sync_nameA(void *addr, const char *objtype,
513                                       int typelen, const char *objname,
514                                       int namelen, int attribute);
515 int LIBITTAPI __itt_notify_sync_nameW(void *addr, const wchar_t *objtype,
516                                       int typelen, const wchar_t *objname,
517                                       int namelen, int attribute);
518 #if defined(UNICODE) || defined(_UNICODE)
519 #define __itt_notify_sync_name __itt_notify_sync_nameW
520 #else
521 #define __itt_notify_sync_name __itt_notify_sync_nameA
522 #endif
523 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
524 int LIBITTAPI __itt_notify_sync_name(void *addr, const char *objtype,
525                                      int typelen, const char *objname,
526                                      int namelen, int attribute);
527 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
528 
529 /** @cond exclude_from_documentation */
530 #ifndef INTEL_NO_MACRO_BODY
531 #ifndef INTEL_NO_ITTNOTIFY_API
532 #if ITT_PLATFORM == ITT_PLATFORM_WIN
533 ITT_STUB(LIBITTAPI, int, notify_sync_nameA,
534          (void *addr, const char *objtype, int typelen, const char *objname,
535           int namelen, int attribute))
536 ITT_STUB(LIBITTAPI, int, notify_sync_nameW,
537          (void *addr, const wchar_t *objtype, int typelen,
538           const wchar_t *objname, int namelen, int attribute))
539 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
540 ITT_STUB(LIBITTAPI, int, notify_sync_name,
541          (void *addr, const char *objtype, int typelen, const char *objname,
542           int namelen, int attribute))
543 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
544 #if ITT_PLATFORM == ITT_PLATFORM_WIN
545 #define __itt_notify_sync_nameA ITTNOTIFY_DATA(notify_sync_nameA)
546 #define __itt_notify_sync_nameA_ptr ITTNOTIFY_NAME(notify_sync_nameA)
547 #define __itt_notify_sync_nameW ITTNOTIFY_DATA(notify_sync_nameW)
548 #define __itt_notify_sync_nameW_ptr ITTNOTIFY_NAME(notify_sync_nameW)
549 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
550 #define __itt_notify_sync_name ITTNOTIFY_DATA(notify_sync_name)
551 #define __itt_notify_sync_name_ptr ITTNOTIFY_NAME(notify_sync_name)
552 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
553 #else /* INTEL_NO_ITTNOTIFY_API */
554 #if ITT_PLATFORM == ITT_PLATFORM_WIN
555 #define __itt_notify_sync_nameA(addr, objtype, typelen, objname, namelen,      \
556                                 attribute)
557 #define __itt_notify_sync_nameA_ptr 0
558 #define __itt_notify_sync_nameW(addr, objtype, typelen, objname, namelen,      \
559                                 attribute)
560 #define __itt_notify_sync_nameW_ptr 0
561 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
562 #define __itt_notify_sync_name(addr, objtype, typelen, objname, namelen,       \
563                                attribute)
564 #define __itt_notify_sync_name_ptr 0
565 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
566 #endif /* INTEL_NO_ITTNOTIFY_API */
567 #else /* INTEL_NO_MACRO_BODY */
568 #if ITT_PLATFORM == ITT_PLATFORM_WIN
569 #define __itt_notify_sync_nameA_ptr 0
570 #define __itt_notify_sync_nameW_ptr 0
571 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
572 #define __itt_notify_sync_name_ptr 0
573 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
574 #endif /* INTEL_NO_MACRO_BODY */
575 /** @endcond */
576 
577 /**
578  * @deprecated Legacy API
579  * @brief Enter spin loop on user-defined sync object
580  */
581 void LIBITTAPI __itt_notify_sync_prepare(void *addr);
582 
583 /** @cond exclude_from_documentation */
584 #ifndef INTEL_NO_MACRO_BODY
585 #ifndef INTEL_NO_ITTNOTIFY_API
586 ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *addr))
587 #define __itt_notify_sync_prepare ITTNOTIFY_VOID(notify_sync_prepare)
588 #define __itt_notify_sync_prepare_ptr ITTNOTIFY_NAME(notify_sync_prepare)
589 #else /* INTEL_NO_ITTNOTIFY_API */
590 #define __itt_notify_sync_prepare(addr)
591 #define __itt_notify_sync_prepare_ptr 0
592 #endif /* INTEL_NO_ITTNOTIFY_API */
593 #else /* INTEL_NO_MACRO_BODY */
594 #define __itt_notify_sync_prepare_ptr 0
595 #endif /* INTEL_NO_MACRO_BODY */
596 /** @endcond */
597 
598 /**
599  * @deprecated Legacy API
600  * @brief Quit spin loop without acquiring spin object
601  */
602 void LIBITTAPI __itt_notify_sync_cancel(void *addr);
603 
604 /** @cond exclude_from_documentation */
605 #ifndef INTEL_NO_MACRO_BODY
606 #ifndef INTEL_NO_ITTNOTIFY_API
607 ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *addr))
608 #define __itt_notify_sync_cancel ITTNOTIFY_VOID(notify_sync_cancel)
609 #define __itt_notify_sync_cancel_ptr ITTNOTIFY_NAME(notify_sync_cancel)
610 #else /* INTEL_NO_ITTNOTIFY_API */
611 #define __itt_notify_sync_cancel(addr)
612 #define __itt_notify_sync_cancel_ptr 0
613 #endif /* INTEL_NO_ITTNOTIFY_API */
614 #else /* INTEL_NO_MACRO_BODY */
615 #define __itt_notify_sync_cancel_ptr 0
616 #endif /* INTEL_NO_MACRO_BODY */
617 /** @endcond */
618 
619 /**
620  * @deprecated Legacy API
621  * @brief Successful spin loop completion (sync object acquired)
622  */
623 void LIBITTAPI __itt_notify_sync_acquired(void *addr);
624 
625 /** @cond exclude_from_documentation */
626 #ifndef INTEL_NO_MACRO_BODY
627 #ifndef INTEL_NO_ITTNOTIFY_API
628 ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *addr))
629 #define __itt_notify_sync_acquired ITTNOTIFY_VOID(notify_sync_acquired)
630 #define __itt_notify_sync_acquired_ptr ITTNOTIFY_NAME(notify_sync_acquired)
631 #else /* INTEL_NO_ITTNOTIFY_API */
632 #define __itt_notify_sync_acquired(addr)
633 #define __itt_notify_sync_acquired_ptr 0
634 #endif /* INTEL_NO_ITTNOTIFY_API */
635 #else /* INTEL_NO_MACRO_BODY */
636 #define __itt_notify_sync_acquired_ptr 0
637 #endif /* INTEL_NO_MACRO_BODY */
638 /** @endcond */
639 
640 /**
641  * @deprecated Legacy API
642  * @brief Start sync object releasing code. Is called before the lock release
643  * call.
644  */
645 void LIBITTAPI __itt_notify_sync_releasing(void *addr);
646 
647 /** @cond exclude_from_documentation */
648 #ifndef INTEL_NO_MACRO_BODY
649 #ifndef INTEL_NO_ITTNOTIFY_API
650 ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *addr))
651 #define __itt_notify_sync_releasing ITTNOTIFY_VOID(notify_sync_releasing)
652 #define __itt_notify_sync_releasing_ptr ITTNOTIFY_NAME(notify_sync_releasing)
653 #else /* INTEL_NO_ITTNOTIFY_API */
654 #define __itt_notify_sync_releasing(addr)
655 #define __itt_notify_sync_releasing_ptr 0
656 #endif /* INTEL_NO_ITTNOTIFY_API */
657 #else /* INTEL_NO_MACRO_BODY */
658 #define __itt_notify_sync_releasing_ptr 0
659 #endif /* INTEL_NO_MACRO_BODY */
660 /** @endcond */
661 /** @} legacy_sync group */
662 
663 #ifndef _ITTNOTIFY_H_
664 /**
665  * @defgroup legacy_events Events
666  * @ingroup legacy
667  * Events group
668  * @{
669  */
670 
671 /** @brief user event type */
672 typedef int __itt_event;
673 
674 /**
675  * @brief Create an event notification
676  * @note name or namelen being null/name and namelen not matching, user event
677  * feature not enabled
678  * @return non-zero event identifier upon success and __itt_err otherwise
679  */
680 #if ITT_PLATFORM == ITT_PLATFORM_WIN
681 __itt_event LIBITTAPI __itt_event_createA(const char *name, int namelen);
682 __itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen);
683 #if defined(UNICODE) || defined(_UNICODE)
684 #define __itt_event_create __itt_event_createW
685 #define __itt_event_create_ptr __itt_event_createW_ptr
686 #else
687 #define __itt_event_create __itt_event_createA
688 #define __itt_event_create_ptr __itt_event_createA_ptr
689 #endif /* UNICODE */
690 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
691 __itt_event LIBITTAPI __itt_event_create(const char *name, int namelen);
692 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
693 
694 /** @cond exclude_from_documentation */
695 #ifndef INTEL_NO_MACRO_BODY
696 #ifndef INTEL_NO_ITTNOTIFY_API
697 #if ITT_PLATFORM == ITT_PLATFORM_WIN
698 ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen))
699 ITT_STUB(LIBITTAPI, __itt_event, event_createW,
700          (const wchar_t *name, int namelen))
701 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
702 ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen))
703 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
704 #if ITT_PLATFORM == ITT_PLATFORM_WIN
705 #define __itt_event_createA ITTNOTIFY_DATA(event_createA)
706 #define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA)
707 #define __itt_event_createW ITTNOTIFY_DATA(event_createW)
708 #define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW)
709 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
710 #define __itt_event_create ITTNOTIFY_DATA(event_create)
711 #define __itt_event_create_ptr ITTNOTIFY_NAME(event_create)
712 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
713 #else /* INTEL_NO_ITTNOTIFY_API */
714 #if ITT_PLATFORM == ITT_PLATFORM_WIN
715 #define __itt_event_createA(name, namelen) (__itt_event)0
716 #define __itt_event_createA_ptr 0
717 #define __itt_event_createW(name, namelen) (__itt_event)0
718 #define __itt_event_createW_ptr 0
719 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
720 #define __itt_event_create(name, namelen) (__itt_event)0
721 #define __itt_event_create_ptr 0
722 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
723 #endif /* INTEL_NO_ITTNOTIFY_API */
724 #else /* INTEL_NO_MACRO_BODY */
725 #if ITT_PLATFORM == ITT_PLATFORM_WIN
726 #define __itt_event_createA_ptr 0
727 #define __itt_event_createW_ptr 0
728 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
729 #define __itt_event_create_ptr 0
730 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
731 #endif /* INTEL_NO_MACRO_BODY */
732 /** @endcond */
733 
734 /**
735  * @brief Record an event occurrence.
736  * @return __itt_err upon failure (invalid event id/user event feature not
737  * enabled)
738  */
739 int LIBITTAPI __itt_event_start(__itt_event event);
740 
741 /** @cond exclude_from_documentation */
742 #ifndef INTEL_NO_MACRO_BODY
743 #ifndef INTEL_NO_ITTNOTIFY_API
744 ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event))
745 #define __itt_event_start ITTNOTIFY_DATA(event_start)
746 #define __itt_event_start_ptr ITTNOTIFY_NAME(event_start)
747 #else /* INTEL_NO_ITTNOTIFY_API */
748 #define __itt_event_start(event) (int)0
749 #define __itt_event_start_ptr 0
750 #endif /* INTEL_NO_ITTNOTIFY_API */
751 #else /* INTEL_NO_MACRO_BODY */
752 #define __itt_event_start_ptr 0
753 #endif /* INTEL_NO_MACRO_BODY */
754 /** @endcond */
755 
756 /**
757  * @brief Record an event end occurrence.
758  * @note It is optional if events do not have durations.
759  * @return __itt_err upon failure (invalid event id/user event feature not
760  * enabled)
761  */
762 int LIBITTAPI __itt_event_end(__itt_event event);
763 
764 /** @cond exclude_from_documentation */
765 #ifndef INTEL_NO_MACRO_BODY
766 #ifndef INTEL_NO_ITTNOTIFY_API
767 ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event))
768 #define __itt_event_end ITTNOTIFY_DATA(event_end)
769 #define __itt_event_end_ptr ITTNOTIFY_NAME(event_end)
770 #else /* INTEL_NO_ITTNOTIFY_API */
771 #define __itt_event_end(event) (int)0
772 #define __itt_event_end_ptr 0
773 #endif /* INTEL_NO_ITTNOTIFY_API */
774 #else /* INTEL_NO_MACRO_BODY */
775 #define __itt_event_end_ptr 0
776 #endif /* INTEL_NO_MACRO_BODY */
777 /** @endcond */
778 /** @} legacy_events group */
779 #endif /* _ITTNOTIFY_H_ */
780 
781 /**
782  * @defgroup legacy_memory Memory Accesses
783  * @ingroup legacy
784  */
785 
786 /**
787  * @deprecated Legacy API
788  * @brief Inform the tool of memory accesses on reading
789  */
790 void LIBITTAPI __itt_memory_read(void *addr, size_t size);
791 
792 /** @cond exclude_from_documentation */
793 #ifndef INTEL_NO_MACRO_BODY
794 #ifndef INTEL_NO_ITTNOTIFY_API
795 ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size))
796 #define __itt_memory_read ITTNOTIFY_VOID(memory_read)
797 #define __itt_memory_read_ptr ITTNOTIFY_NAME(memory_read)
798 #else /* INTEL_NO_ITTNOTIFY_API */
799 #define __itt_memory_read(addr, size)
800 #define __itt_memory_read_ptr 0
801 #endif /* INTEL_NO_ITTNOTIFY_API */
802 #else /* INTEL_NO_MACRO_BODY */
803 #define __itt_memory_read_ptr 0
804 #endif /* INTEL_NO_MACRO_BODY */
805 /** @endcond */
806 
807 /**
808  * @deprecated Legacy API
809  * @brief Inform the tool of memory accesses on writing
810  */
811 void LIBITTAPI __itt_memory_write(void *addr, size_t size);
812 
813 /** @cond exclude_from_documentation */
814 #ifndef INTEL_NO_MACRO_BODY
815 #ifndef INTEL_NO_ITTNOTIFY_API
816 ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size))
817 #define __itt_memory_write ITTNOTIFY_VOID(memory_write)
818 #define __itt_memory_write_ptr ITTNOTIFY_NAME(memory_write)
819 #else /* INTEL_NO_ITTNOTIFY_API */
820 #define __itt_memory_write(addr, size)
821 #define __itt_memory_write_ptr 0
822 #endif /* INTEL_NO_ITTNOTIFY_API */
823 #else /* INTEL_NO_MACRO_BODY */
824 #define __itt_memory_write_ptr 0
825 #endif /* INTEL_NO_MACRO_BODY */
826 /** @endcond */
827 
828 /**
829  * @deprecated Legacy API
830  * @brief Inform the tool of memory accesses on updating
831  */
832 void LIBITTAPI __itt_memory_update(void *address, size_t size);
833 
834 /** @cond exclude_from_documentation */
835 #ifndef INTEL_NO_MACRO_BODY
836 #ifndef INTEL_NO_ITTNOTIFY_API
837 ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size))
838 #define __itt_memory_update ITTNOTIFY_VOID(memory_update)
839 #define __itt_memory_update_ptr ITTNOTIFY_NAME(memory_update)
840 #else /* INTEL_NO_ITTNOTIFY_API */
841 #define __itt_memory_update(addr, size)
842 #define __itt_memory_update_ptr 0
843 #endif /* INTEL_NO_ITTNOTIFY_API */
844 #else /* INTEL_NO_MACRO_BODY */
845 #define __itt_memory_update_ptr 0
846 #endif /* INTEL_NO_MACRO_BODY */
847 /** @endcond */
848 /** @} legacy_memory group */
849 
850 /**
851  * @defgroup legacy_state Thread and Object States
852  * @ingroup legacy
853  */
854 
855 /** @brief state type */
856 typedef int __itt_state_t;
857 
858 /** @cond exclude_from_documentation */
859 typedef enum __itt_obj_state {
860   __itt_obj_state_err = 0,
861   __itt_obj_state_clr = 1,
862   __itt_obj_state_set = 2,
863   __itt_obj_state_use = 3
864 } __itt_obj_state_t;
865 
866 typedef enum __itt_thr_state {
867   __itt_thr_state_err = 0,
868   __itt_thr_state_clr = 1,
869   __itt_thr_state_set = 2
870 } __itt_thr_state_t;
871 
872 typedef enum __itt_obj_prop {
873   __itt_obj_prop_watch = 1,
874   __itt_obj_prop_ignore = 2,
875   __itt_obj_prop_sharable = 3
876 } __itt_obj_prop_t;
877 
878 typedef enum __itt_thr_prop { __itt_thr_prop_quiet = 1 } __itt_thr_prop_t;
879 /** @endcond */
880 
881 /**
882  * @deprecated Legacy API
883  * @brief managing thread and object states
884  */
885 __itt_state_t LIBITTAPI __itt_state_get(void);
886 
887 /** @cond exclude_from_documentation */
888 #ifndef INTEL_NO_MACRO_BODY
889 #ifndef INTEL_NO_ITTNOTIFY_API
890 ITT_STUB(ITTAPI, __itt_state_t, state_get, (void))
891 #define __itt_state_get ITTNOTIFY_DATA(state_get)
892 #define __itt_state_get_ptr ITTNOTIFY_NAME(state_get)
893 #else /* INTEL_NO_ITTNOTIFY_API */
894 #define __itt_state_get(void) (__itt_state_t)0
895 #define __itt_state_get_ptr 0
896 #endif /* INTEL_NO_ITTNOTIFY_API */
897 #else /* INTEL_NO_MACRO_BODY */
898 #define __itt_state_get_ptr 0
899 #endif /* INTEL_NO_MACRO_BODY */
900 /** @endcond */
901 
902 /**
903  * @deprecated Legacy API
904  * @brief managing thread and object states
905  */
906 __itt_state_t LIBITTAPI __itt_state_set(__itt_state_t s);
907 
908 /** @cond exclude_from_documentation */
909 #ifndef INTEL_NO_MACRO_BODY
910 #ifndef INTEL_NO_ITTNOTIFY_API
911 ITT_STUB(ITTAPI, __itt_state_t, state_set, (__itt_state_t s))
912 #define __itt_state_set ITTNOTIFY_DATA(state_set)
913 #define __itt_state_set_ptr ITTNOTIFY_NAME(state_set)
914 #else /* INTEL_NO_ITTNOTIFY_API */
915 #define __itt_state_set(s) (__itt_state_t)0
916 #define __itt_state_set_ptr 0
917 #endif /* INTEL_NO_ITTNOTIFY_API */
918 #else /* INTEL_NO_MACRO_BODY */
919 #define __itt_state_set_ptr 0
920 #endif /* INTEL_NO_MACRO_BODY */
921 /** @endcond */
922 
923 /**
924  * @deprecated Legacy API
925  * @brief managing thread and object modes
926  */
927 __itt_thr_state_t LIBITTAPI __itt_thr_mode_set(__itt_thr_prop_t p,
928                                                __itt_thr_state_t s);
929 
930 /** @cond exclude_from_documentation */
931 #ifndef INTEL_NO_MACRO_BODY
932 #ifndef INTEL_NO_ITTNOTIFY_API
933 ITT_STUB(ITTAPI, __itt_thr_state_t, thr_mode_set,
934          (__itt_thr_prop_t p, __itt_thr_state_t s))
935 #define __itt_thr_mode_set ITTNOTIFY_DATA(thr_mode_set)
936 #define __itt_thr_mode_set_ptr ITTNOTIFY_NAME(thr_mode_set)
937 #else /* INTEL_NO_ITTNOTIFY_API */
938 #define __itt_thr_mode_set(p, s) (__itt_thr_state_t)0
939 #define __itt_thr_mode_set_ptr 0
940 #endif /* INTEL_NO_ITTNOTIFY_API */
941 #else /* INTEL_NO_MACRO_BODY */
942 #define __itt_thr_mode_set_ptr 0
943 #endif /* INTEL_NO_MACRO_BODY */
944 /** @endcond */
945 
946 /**
947  * @deprecated Legacy API
948  * @brief managing thread and object modes
949  */
950 __itt_obj_state_t LIBITTAPI __itt_obj_mode_set(__itt_obj_prop_t p,
951                                                __itt_obj_state_t s);
952 
953 /** @cond exclude_from_documentation */
954 #ifndef INTEL_NO_MACRO_BODY
955 #ifndef INTEL_NO_ITTNOTIFY_API
956 ITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set,
957          (__itt_obj_prop_t p, __itt_obj_state_t s))
958 #define __itt_obj_mode_set ITTNOTIFY_DATA(obj_mode_set)
959 #define __itt_obj_mode_set_ptr ITTNOTIFY_NAME(obj_mode_set)
960 #else /* INTEL_NO_ITTNOTIFY_API */
961 #define __itt_obj_mode_set(p, s) (__itt_obj_state_t)0
962 #define __itt_obj_mode_set_ptr 0
963 #endif /* INTEL_NO_ITTNOTIFY_API */
964 #else /* INTEL_NO_MACRO_BODY */
965 #define __itt_obj_mode_set_ptr 0
966 #endif /* INTEL_NO_MACRO_BODY */
967 /** @endcond */
968 /** @} legacy_state group */
969 
970 /**
971  * @defgroup frames Frames
972  * @ingroup legacy
973  * Frames group
974  * @{
975  */
976 /**
977  * @brief opaque structure for frame identification
978  */
979 typedef struct __itt_frame_t *__itt_frame;
980 
981 /**
982  * @brief Create a global frame with given domain
983  */
984 #if ITT_PLATFORM == ITT_PLATFORM_WIN
985 __itt_frame ITTAPI __itt_frame_createA(const char *domain);
986 __itt_frame ITTAPI __itt_frame_createW(const wchar_t *domain);
987 #if defined(UNICODE) || defined(_UNICODE)
988 #define __itt_frame_create __itt_frame_createW
989 #define __itt_frame_create_ptr __itt_frame_createW_ptr
990 #else /* UNICODE */
991 #define __itt_frame_create __itt_frame_createA
992 #define __itt_frame_create_ptr __itt_frame_createA_ptr
993 #endif /* UNICODE */
994 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
995 __itt_frame ITTAPI __itt_frame_create(const char *domain);
996 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
997 
998 /** @cond exclude_from_documentation */
999 #ifndef INTEL_NO_MACRO_BODY
1000 #ifndef INTEL_NO_ITTNOTIFY_API
1001 #if ITT_PLATFORM == ITT_PLATFORM_WIN
1002 ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char *domain))
1003 ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain))
1004 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1005 ITT_STUB(ITTAPI, __itt_frame, frame_create, (const char *domain))
1006 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1007 #if ITT_PLATFORM == ITT_PLATFORM_WIN
1008 #define __itt_frame_createA ITTNOTIFY_DATA(frame_createA)
1009 #define __itt_frame_createA_ptr ITTNOTIFY_NAME(frame_createA)
1010 #define __itt_frame_createW ITTNOTIFY_DATA(frame_createW)
1011 #define __itt_frame_createW_ptr ITTNOTIFY_NAME(frame_createW)
1012 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1013 #define __itt_frame_create ITTNOTIFY_DATA(frame_create)
1014 #define __itt_frame_create_ptr ITTNOTIFY_NAME(frame_create)
1015 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1016 #else /* INTEL_NO_ITTNOTIFY_API */
1017 #if ITT_PLATFORM == ITT_PLATFORM_WIN
1018 #define __itt_frame_createA(domain)
1019 #define __itt_frame_createA_ptr 0
1020 #define __itt_frame_createW(domain)
1021 #define __itt_frame_createW_ptr 0
1022 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1023 #define __itt_frame_create(domain)
1024 #define __itt_frame_create_ptr 0
1025 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1026 #endif /* INTEL_NO_ITTNOTIFY_API */
1027 #else /* INTEL_NO_MACRO_BODY */
1028 #if ITT_PLATFORM == ITT_PLATFORM_WIN
1029 #define __itt_frame_createA_ptr 0
1030 #define __itt_frame_createW_ptr 0
1031 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1032 #define __itt_frame_create_ptr 0
1033 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
1034 #endif /* INTEL_NO_MACRO_BODY */
1035 /** @endcond */
1036 
1037 /** @brief Record a frame begin occurrence. */
1038 void ITTAPI __itt_frame_begin(__itt_frame frame);
1039 /** @brief Record a frame end occurrence. */
1040 void ITTAPI __itt_frame_end(__itt_frame frame);
1041 
1042 /** @cond exclude_from_documentation */
1043 #ifndef INTEL_NO_MACRO_BODY
1044 #ifndef INTEL_NO_ITTNOTIFY_API
1045 ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame))
1046 ITT_STUBV(ITTAPI, void, frame_end, (__itt_frame frame))
1047 #define __itt_frame_begin ITTNOTIFY_VOID(frame_begin)
1048 #define __itt_frame_begin_ptr ITTNOTIFY_NAME(frame_begin)
1049 #define __itt_frame_end ITTNOTIFY_VOID(frame_end)
1050 #define __itt_frame_end_ptr ITTNOTIFY_NAME(frame_end)
1051 #else /* INTEL_NO_ITTNOTIFY_API */
1052 #define __itt_frame_begin(frame)
1053 #define __itt_frame_begin_ptr 0
1054 #define __itt_frame_end(frame)
1055 #define __itt_frame_end_ptr 0
1056 #endif /* INTEL_NO_ITTNOTIFY_API */
1057 #else /* INTEL_NO_MACRO_BODY */
1058 #define __itt_frame_begin_ptr 0
1059 #define __itt_frame_end_ptr 0
1060 #endif /* INTEL_NO_MACRO_BODY */
1061 /** @endcond */
1062 /** @} frames group */
1063 
1064 #ifdef __cplusplus
1065 }
1066 #endif /* __cplusplus */
1067 
1068 #endif /* _LEGACY_ITTNOTIFY_H_ */
1069