Skip to content

Commit 93bc622

Browse files
Add new formatted metadata ITT API (#174)
* add support of formatted metadata * add Rust bindings * change versions and add wchar_t string support * add comment that the format string for formatted metadata is in printf-style * add new formatted metadata call into reference collector * address review comments for formatted metadata changes * address review questions and prevent potential performance issues --------- Signed-off-by: Kireev, Alexey <alexey.kireev@intel.com>
1 parent d505e4b commit 93bc622

7 files changed

Lines changed: 137 additions & 6 deletions

File tree

include/ittnotify.h

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ The same ID may not be reused for different instances, unless a previous
262262
#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a) (d == NULL) ? (void)0 : (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a)
263263
#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b) (d == NULL) ? (void)0 : (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b)
264264
#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (d == NULL) ? (void)0 : (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c)
265+
#define ITTNOTIFY_VOID_D2_VA(n,d,x,...) (d == NULL) ? (void)0 : (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,__VA_ARGS__)
266+
#define ITTNOTIFY_VOID_D3_VA(n,d,x,y,...) (d == NULL) ? (void)0 : (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,__VA_ARGS__)
265267
#define ITTNOTIFY_DATA_D0(n,d) (d == NULL) ? 0 : (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d)
266268
#define ITTNOTIFY_DATA_D1(n,d,x) (d == NULL) ? 0 : (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x)
267269
#define ITTNOTIFY_DATA_D2(n,d,x,y) (d == NULL) ? 0 : (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y)
@@ -2454,9 +2456,58 @@ typedef enum {
24542456
__itt_metadata_u16, /**< Unsigned 16-bit integer */
24552457
__itt_metadata_s16, /**< Signed 16-bit integer */
24562458
__itt_metadata_float, /**< Signed 32-bit floating-point */
2457-
__itt_metadata_double /**< SIgned 64-bit floating-point */
2459+
__itt_metadata_double /**< Signed 64-bit floating-point */
24582460
} __itt_metadata_type;
24592461

2462+
/**
2463+
* @ingroup parameters
2464+
* @brief Add metadata to an instance of a named entity.
2465+
* @param[in] domain The domain controlling the call
2466+
* @param[in] format The printf-style format of the metadata
2467+
* @param[in] ... The metadata itself as multiple arguments
2468+
*/
2469+
void ITTAPI __itt_formatted_metadata_add(const __itt_domain *domain, __itt_string_handle *format, ...);
2470+
2471+
/** @cond exclude_from_documentation */
2472+
#ifndef INTEL_NO_MACRO_BODY
2473+
#ifndef INTEL_NO_ITTNOTIFY_API
2474+
ITT_STUBV(ITTAPI, void, formatted_metadata_add, (const __itt_domain *domain, __itt_string_handle *format, ...))
2475+
#define __itt_formatted_metadata_add(d,x, ...) ITTNOTIFY_VOID_D2_VA(formatted_metadata_add,d,x,__VA_ARGS__)
2476+
#define __itt_formatted_metadata_add_ptr ITTNOTIFY_NAME(formatted_metadata_add)
2477+
#else /* INTEL_NO_ITTNOTIFY_API */
2478+
#define __itt_formatted_metadata_add(domain, format, metadata)
2479+
#define __itt_formatted_metadata_add_ptr 0
2480+
#endif /* INTEL_NO_ITTNOTIFY_API */
2481+
#else /* INTEL_NO_MACRO_BODY */
2482+
#define __itt_formatted_metadata_add_ptr 0
2483+
#endif /* INTEL_NO_MACRO_BODY */
2484+
/** @endcond */
2485+
2486+
/**
2487+
* @ingroup parameters
2488+
* @brief Add metadata to an instance of a named entity.
2489+
* @param[in] domain The domain controlling the call
2490+
* @param[in] taskid The identifier for this task instance, *cannot* be __itt_null.
2491+
* @param[in] format The printf-style format of the metadata
2492+
* @param[in] ... The metadata itself as multiple arguments
2493+
*/
2494+
void ITTAPI __itt_formatted_metadata_add_overlapped(const __itt_domain *domain, __itt_id taskid, __itt_string_handle *format, ...);
2495+
2496+
/** @cond exclude_from_documentation */
2497+
#ifndef INTEL_NO_MACRO_BODY
2498+
#ifndef INTEL_NO_ITTNOTIFY_API
2499+
ITT_STUBV(ITTAPI, void, formatted_metadata_add_overlapped, (const __itt_domain *domain, __itt_id taskid, __itt_string_handle *format, ...))
2500+
#define __itt_formatted_metadata_add_overlapped(d,x,y, ...) ITTNOTIFY_VOID_D3_VA(formatted_metadata_add_overlapped,d,x,y,__VA_ARGS__)
2501+
#define __itt_formatted_metadata_add_overlapped_ptr ITTNOTIFY_NAME(formatted_metadata_add_overlapped)
2502+
#else /* INTEL_NO_ITTNOTIFY_API */
2503+
#define __itt_formatted_metadata_add_overlapped(domain, taskid, format, metadata)
2504+
#define __itt_formatted_metadata_add_overlapped_ptr 0
2505+
#endif /* INTEL_NO_ITTNOTIFY_API */
2506+
#else /* INTEL_NO_MACRO_BODY */
2507+
#define __itt_formatted_metadata_add_overlapped_ptr 0
2508+
#endif /* INTEL_NO_MACRO_BODY */
2509+
/** @endcond */
2510+
24602511
/**
24612512
* @ingroup parameters
24622513
* @brief Add metadata to an instance of a named entity.

rust/ittapi-sys/src/linux/ittnotify_bindings.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,10 +796,28 @@ pub const __itt_metadata_type___itt_metadata_u16: __itt_metadata_type = 5;
796796
pub const __itt_metadata_type___itt_metadata_s16: __itt_metadata_type = 6;
797797
#[doc = "< Signed 32-bit floating-point"]
798798
pub const __itt_metadata_type___itt_metadata_float: __itt_metadata_type = 7;
799-
#[doc = "< SIgned 64-bit floating-point"]
799+
#[doc = "< Signed 64-bit floating-point"]
800800
pub const __itt_metadata_type___itt_metadata_double: __itt_metadata_type = 8;
801801
#[doc = " @ingroup parameters\n @brief describes the type of metadata"]
802802
pub type __itt_metadata_type = ::std::os::raw::c_uint;
803+
pub type __itt_formatted_metadata_add_ptr__3_0_t = ::std::option::Option<
804+
unsafe extern "C" fn(domain: *const __itt_domain, format: *mut __itt_string_handle, ...),
805+
>;
806+
extern "C" {
807+
pub static mut __itt_formatted_metadata_add_ptr__3_0: __itt_formatted_metadata_add_ptr__3_0_t;
808+
}
809+
pub type __itt_formatted_metadata_add_overlapped_ptr__3_0_t = ::std::option::Option<
810+
unsafe extern "C" fn(
811+
domain: *const __itt_domain,
812+
taskid: __itt_id,
813+
format: *mut __itt_string_handle,
814+
...
815+
),
816+
>;
817+
extern "C" {
818+
pub static mut __itt_formatted_metadata_add_overlapped_ptr__3_0:
819+
__itt_formatted_metadata_add_overlapped_ptr__3_0_t;
820+
}
803821
pub type __itt_metadata_add_ptr__3_0_t = ::std::option::Option<
804822
unsafe extern "C" fn(
805823
domain: *const __itt_domain,

rust/ittapi-sys/src/macos/ittnotify_bindings.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,10 +796,28 @@ pub const __itt_metadata_type___itt_metadata_u16: __itt_metadata_type = 5;
796796
pub const __itt_metadata_type___itt_metadata_s16: __itt_metadata_type = 6;
797797
#[doc = "< Signed 32-bit floating-point"]
798798
pub const __itt_metadata_type___itt_metadata_float: __itt_metadata_type = 7;
799-
#[doc = "< SIgned 64-bit floating-point"]
799+
#[doc = "< Signed 64-bit floating-point"]
800800
pub const __itt_metadata_type___itt_metadata_double: __itt_metadata_type = 8;
801801
#[doc = " @ingroup parameters\n @brief describes the type of metadata"]
802802
pub type __itt_metadata_type = ::std::os::raw::c_uint;
803+
pub type __itt_formatted_metadata_add_ptr__3_0_t = ::std::option::Option<
804+
unsafe extern "C" fn(domain: *const __itt_domain, format: *mut __itt_string_handle, ...),
805+
>;
806+
extern "C" {
807+
pub static mut __itt_formatted_metadata_add_ptr__3_0: __itt_formatted_metadata_add_ptr__3_0_t;
808+
}
809+
pub type __itt_formatted_metadata_add_overlapped_ptr__3_0_t = ::std::option::Option<
810+
unsafe extern "C" fn(
811+
domain: *const __itt_domain,
812+
taskid: __itt_id,
813+
format: *mut __itt_string_handle,
814+
...
815+
),
816+
>;
817+
extern "C" {
818+
pub static mut __itt_formatted_metadata_add_overlapped_ptr__3_0:
819+
__itt_formatted_metadata_add_overlapped_ptr__3_0_t;
820+
}
803821
pub type __itt_metadata_add_ptr__3_0_t = ::std::option::Option<
804822
unsafe extern "C" fn(
805823
domain: *const __itt_domain,

rust/ittapi-sys/src/windows/ittnotify_bindings.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,10 +855,28 @@ pub const __itt_metadata_type___itt_metadata_u16: __itt_metadata_type = 5;
855855
pub const __itt_metadata_type___itt_metadata_s16: __itt_metadata_type = 6;
856856
#[doc = "< Signed 32-bit floating-point"]
857857
pub const __itt_metadata_type___itt_metadata_float: __itt_metadata_type = 7;
858-
#[doc = "< SIgned 64-bit floating-point"]
858+
#[doc = "< Signed 64-bit floating-point"]
859859
pub const __itt_metadata_type___itt_metadata_double: __itt_metadata_type = 8;
860860
#[doc = " @ingroup parameters\n @brief describes the type of metadata"]
861861
pub type __itt_metadata_type = ::std::os::raw::c_int;
862+
pub type __itt_formatted_metadata_add_ptr__3_0_t = ::std::option::Option<
863+
unsafe extern "C" fn(domain: *const __itt_domain, format: *mut __itt_string_handle, ...),
864+
>;
865+
extern "C" {
866+
pub static mut __itt_formatted_metadata_add_ptr__3_0: __itt_formatted_metadata_add_ptr__3_0_t;
867+
}
868+
pub type __itt_formatted_metadata_add_overlapped_ptr__3_0_t = ::std::option::Option<
869+
unsafe extern "C" fn(
870+
domain: *const __itt_domain,
871+
taskid: __itt_id,
872+
format: *mut __itt_string_handle,
873+
...
874+
),
875+
>;
876+
extern "C" {
877+
pub static mut __itt_formatted_metadata_add_overlapped_ptr__3_0:
878+
__itt_formatted_metadata_add_overlapped_ptr__3_0_t;
879+
}
862880
pub type __itt_metadata_add_ptr__3_0_t = ::std::option::Option<
863881
unsafe extern "C" fn(
864882
domain: *const __itt_domain,

src/ittnotify/ittnotify_config.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@
208208
#define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
209209

210210
/* Replace with snapshot date YYYYMMDD for promotion build. */
211-
#define API_VERSION_BUILD 20250113
211+
#define API_VERSION_BUILD 20250429
212212

213213
#ifndef API_VERSION_NUM
214-
#define API_VERSION_NUM 3.25.4
214+
#define API_VERSION_NUM 3.26.0
215215
#endif /* API_VERSION_NUM */
216216

217217
#define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) \

src/ittnotify/ittnotify_static.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@ ITT_STUBV(ITTAPI, void, counter_dec_delta_v3, (const __itt_domain *domain, __itt
207207

208208
ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, id, name, scope), marker, __itt_group_structure, "%p, %lu, %p, %d")
209209

210+
ITT_STUBV(ITTAPI, void, formatted_metadata_add, (const __itt_domain *domain, __itt_string_handle *format, ...), \
211+
(ITT_FORMAT domain, format), formatted_metadata_add, __itt_group_structure, "%p, %p")
212+
213+
ITT_STUBV(ITTAPI, void, formatted_metadata_add_overlapped, (const __itt_domain *domain, __itt_id id, __itt_string_handle *format, ...), \
214+
(ITT_FORMAT domain, id, format), formatted_metadata_add_overlapped, __itt_group_structure, "%p, %lu, %p")
215+
210216
ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, id, key, type, count, data), metadata_add, __itt_group_structure, "%p, %lu, %p, %d, %lu, %p")
211217
#if ITT_PLATFORM==ITT_PLATFORM_WIN
212218
ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addA, __itt_group_structure, "%p, %lu, %p, %p, %lu")

src/ittnotify_refcol/itt_refcol_impl.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,26 @@ ITT_EXTERN_C void __itt_metadata_add(const __itt_domain *domain, __itt_id id,
334334
}
335335
}
336336

337+
ITT_EXTERN_C void __itt_formatted_metadata_add(const __itt_domain *domain, __itt_string_handle *format, ...)
338+
{
339+
if (domain == NULL || format == NULL)
340+
{
341+
LOG_FUNC_CALL_WARN("Incorrect function call");
342+
return;
343+
}
344+
345+
va_list args;
346+
va_start(args, format);
347+
348+
char formatted_metadata[LOG_BUFFER_MAX_SIZE];
349+
vsnprintf(formatted_metadata, LOG_BUFFER_MAX_SIZE, format->strA, args);
350+
351+
LOG_FUNC_CALL_INFO("functions args: domain=%s formatted_metadata=%s",
352+
domain->nameA, formatted_metadata);
353+
354+
va_end(args);
355+
}
356+
337357
ITT_EXTERN_C void __itt_histogram_submit(__itt_histogram* hist, size_t length, void* x_data, void* y_data)
338358
{
339359
if (hist == NULL)

0 commit comments

Comments
 (0)