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