Skip to content

Commit 7678217

Browse files
committed
Add call to urSetLoggerCallback to loader mako template, and add adapter implementations.
Modified logger constructor to also take a CallbackSink pointer. Added new unit test to verify urSetLoggerCallbackLevel. Updated description of urSetLoggerCallback to say the callback must be made thread safe by creator of callback. Added a logger level enum to spec to replace logger::level.
1 parent 1481b22 commit 7678217

36 files changed

+670
-199
lines changed

include/ur_api.h

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ typedef enum ur_function_t {
227227
UR_FUNCTION_BINDLESS_IMAGES_IMPORT_EXTERNAL_SEMAPHORE_EXP = 227, ///< Enumerator for ::urBindlessImagesImportExternalSemaphoreExp
228228
UR_FUNCTION_ENQUEUE_NATIVE_COMMAND_EXP = 228, ///< Enumerator for ::urEnqueueNativeCommandExp
229229
UR_FUNCTION_SET_LOGGER_CALLBACK = 230, ///< Enumerator for ::urSetLoggerCallback
230+
UR_FUNCTION_SET_LOGGER_CALLBACK_LEVEL = 231, ///< Enumerator for ::urSetLoggerCallbackLevel
230231
/// @cond
231232
UR_FUNCTION_FORCE_UINT32 = 0x7fffffff
232233
/// @endcond
@@ -987,16 +988,32 @@ typedef enum ur_adapter_backend_t {
987988

988989
} ur_adapter_backend_t;
989990

991+
///////////////////////////////////////////////////////////////////////////////
992+
/// @brief Minimum level of messages to be processed by the logger.
993+
typedef enum ur_logger_level_t {
994+
UR_LOGGER_LEVEL_DEBUG = 0, ///< Debugging messages used for development purposes.
995+
UR_LOGGER_LEVEL_INFO = 1, ///< General messages not related to debugging, warnings or errors.
996+
UR_LOGGER_LEVEL_WARN = 2, ///< Used to warn users about potential problems.
997+
UR_LOGGER_LEVEL_ERR = 3, ///< Used when an error has occurred.
998+
UR_LOGGER_LEVEL_QUIET = 4, ///< Restrict logger processing any messages.
999+
/// @cond
1000+
UR_LOGGER_LEVEL_FORCE_UINT32 = 0x7fffffff
1001+
/// @endcond
1002+
1003+
} ur_logger_level_t;
1004+
9901005
///////////////////////////////////////////////////////////////////////////////
9911006
/// @brief Callback function to retrieve output from the logger.
9921007
typedef void (*ur_logger_output_callback_t)(
993-
const char *pLoggerMsg, ///< [in][out] pointer to data to be passed to callback
994-
void *pUserData ///< [in][out] pointer to data to be passed to callback
1008+
ur_logger_level_t level, ///< [out] Minimum level of messages to be processed by the logger.
1009+
const char *pLoggerMsg, ///< [in][out] pointer to data to be passed to callback
1010+
void *pUserData ///< [in][out] pointer to data to be passed to callback
9951011
);
9961012

9971013
///////////////////////////////////////////////////////////////////////////////
998-
/// @brief Set a callback function for use by the logger to retrieve logging
999-
/// output.
1014+
/// @brief Set a callback function for use by the logger to retrieve logging output.
1015+
/// It is a requirement that the callback function is thread safe and the
1016+
/// creator of the function will be responsible for this.
10001017
///
10011018
/// @returns
10021019
/// - ::UR_RESULT_SUCCESS
@@ -1007,11 +1024,32 @@ typedef void (*ur_logger_output_callback_t)(
10071024
/// + `NULL == hAdapter`
10081025
/// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER
10091026
/// + `NULL == pfnLoggerCallback`
1027+
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
1028+
/// + `::UR_LOGGER_LEVEL_QUIET < level`
10101029
UR_APIEXPORT ur_result_t UR_APICALL
10111030
urSetLoggerCallback(
10121031
ur_adapter_handle_t hAdapter, ///< [in] handle of the adapter
10131032
ur_logger_output_callback_t pfnLoggerCallback, ///< [in] Function pointer to callback from the logger.
1014-
void *pUserData ///< [in][out][optional] pointer to data to be passed to callback
1033+
void *pUserData, ///< [in][out][optional] pointer to data to be passed to callback
1034+
ur_logger_level_t level ///< [in] logging level
1035+
);
1036+
1037+
///////////////////////////////////////////////////////////////////////////////
1038+
/// @brief Set the minimum logging level for the logger Callback function.
1039+
///
1040+
/// @returns
1041+
/// - ::UR_RESULT_SUCCESS
1042+
/// - ::UR_RESULT_ERROR_UNINITIALIZED
1043+
/// - ::UR_RESULT_ERROR_DEVICE_LOST
1044+
/// - ::UR_RESULT_ERROR_ADAPTER_SPECIFIC
1045+
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
1046+
/// + `NULL == hAdapter`
1047+
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
1048+
/// + `::UR_LOGGER_LEVEL_QUIET < level`
1049+
UR_APIEXPORT ur_result_t UR_APICALL
1050+
urSetLoggerCallbackLevel(
1051+
ur_adapter_handle_t hAdapter, ///< [in] handle of the adapter
1052+
ur_logger_level_t level ///< [in] logging level
10151053
);
10161054

10171055
#if !defined(__GNUC__)
@@ -10587,8 +10625,18 @@ typedef struct ur_set_logger_callback_params_t {
1058710625
ur_adapter_handle_t *phAdapter;
1058810626
ur_logger_output_callback_t *ppfnLoggerCallback;
1058910627
void **ppUserData;
10628+
ur_logger_level_t *plevel;
1059010629
} ur_set_logger_callback_params_t;
1059110630

10631+
///////////////////////////////////////////////////////////////////////////////
10632+
/// @brief Function parameters for urSetLoggerCallbackLevel
10633+
/// @details Each entry is a pointer to the parameter passed to the function;
10634+
/// allowing the callback the ability to modify the parameter's value
10635+
typedef struct ur_set_logger_callback_level_params_t {
10636+
ur_adapter_handle_t *phAdapter;
10637+
ur_logger_level_t *plevel;
10638+
} ur_set_logger_callback_level_params_t;
10639+
1059210640
///////////////////////////////////////////////////////////////////////////////
1059310641
/// @brief Function parameters for urEnqueueKernelLaunch
1059410642
/// @details Each entry is a pointer to the parameter passed to the function;

include/ur_ddi.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,14 @@ typedef ur_result_t(UR_APICALL *ur_pfnAdapterGetInfo_t)(
10421042
typedef ur_result_t(UR_APICALL *ur_pfnSetLoggerCallback_t)(
10431043
ur_adapter_handle_t,
10441044
ur_logger_output_callback_t,
1045-
void *);
1045+
void *,
1046+
ur_logger_level_t);
1047+
1048+
///////////////////////////////////////////////////////////////////////////////
1049+
/// @brief Function-pointer for urSetLoggerCallbackLevel
1050+
typedef ur_result_t(UR_APICALL *ur_pfnSetLoggerCallbackLevel_t)(
1051+
ur_adapter_handle_t,
1052+
ur_logger_level_t);
10461053

10471054
///////////////////////////////////////////////////////////////////////////////
10481055
/// @brief Table of Global functions pointers
@@ -1053,6 +1060,7 @@ typedef struct ur_global_dditable_t {
10531060
ur_pfnAdapterGetLastError_t pfnAdapterGetLastError;
10541061
ur_pfnAdapterGetInfo_t pfnAdapterGetInfo;
10551062
ur_pfnSetLoggerCallback_t pfnSetLoggerCallback;
1063+
ur_pfnSetLoggerCallbackLevel_t pfnSetLoggerCallbackLevel;
10561064
} ur_global_dditable_t;
10571065

10581066
///////////////////////////////////////////////////////////////////////////////

include/ur_print.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urPrintAdapterInfo(enum ur_adapter_info_t va
114114
/// - `buff_size < out_size`
115115
UR_APIEXPORT ur_result_t UR_APICALL urPrintAdapterBackend(enum ur_adapter_backend_t value, char *buffer, const size_t buff_size, size_t *out_size);
116116

117+
///////////////////////////////////////////////////////////////////////////////
118+
/// @brief Print ur_logger_level_t enum
119+
/// @returns
120+
/// - ::UR_RESULT_SUCCESS
121+
/// - ::UR_RESULT_ERROR_INVALID_SIZE
122+
/// - `buff_size < out_size`
123+
UR_APIEXPORT ur_result_t UR_APICALL urPrintLoggerLevel(enum ur_logger_level_t value, char *buffer, const size_t buff_size, size_t *out_size);
124+
117125
///////////////////////////////////////////////////////////////////////////////
118126
/// @brief Print ur_platform_info_t enum
119127
/// @returns
@@ -1810,6 +1818,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urPrintAdapterGetInfoParams(const struct ur_
18101818
/// - `buff_size < out_size`
18111819
UR_APIEXPORT ur_result_t UR_APICALL urPrintSetLoggerCallbackParams(const struct ur_set_logger_callback_params_t *params, char *buffer, const size_t buff_size, size_t *out_size);
18121820

1821+
///////////////////////////////////////////////////////////////////////////////
1822+
/// @brief Print ur_set_logger_callback_level_params_t struct
1823+
/// @returns
1824+
/// - ::UR_RESULT_SUCCESS
1825+
/// - ::UR_RESULT_ERROR_INVALID_SIZE
1826+
/// - `buff_size < out_size`
1827+
UR_APIEXPORT ur_result_t UR_APICALL urPrintSetLoggerCallbackLevelParams(const struct ur_set_logger_callback_level_params_t *params, char *buffer, const size_t buff_size, size_t *out_size);
1828+
18131829
///////////////////////////////////////////////////////////////////////////////
18141830
/// @brief Print ur_enqueue_kernel_launch_params_t struct
18151831
/// @returns

include/ur_print.hpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_loader_config_info_t v
232232
inline std::ostream &operator<<(std::ostream &os, [[maybe_unused]] const struct ur_code_location_t params);
233233
inline std::ostream &operator<<(std::ostream &os, enum ur_adapter_info_t value);
234234
inline std::ostream &operator<<(std::ostream &os, enum ur_adapter_backend_t value);
235+
inline std::ostream &operator<<(std::ostream &os, enum ur_logger_level_t value);
235236
inline std::ostream &operator<<(std::ostream &os, enum ur_platform_info_t value);
236237
inline std::ostream &operator<<(std::ostream &os, enum ur_api_version_t value);
237238
inline std::ostream &operator<<(std::ostream &os, [[maybe_unused]] const struct ur_platform_native_properties_t params);
@@ -945,6 +946,9 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_function_t value) {
945946
case UR_FUNCTION_SET_LOGGER_CALLBACK:
946947
os << "UR_FUNCTION_SET_LOGGER_CALLBACK";
947948
break;
949+
case UR_FUNCTION_SET_LOGGER_CALLBACK_LEVEL:
950+
os << "UR_FUNCTION_SET_LOGGER_CALLBACK_LEVEL";
951+
break;
948952
default:
949953
os << "unknown enumerator";
950954
break;
@@ -1961,6 +1965,33 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_adapter_backend_t valu
19611965
return os;
19621966
}
19631967
///////////////////////////////////////////////////////////////////////////////
1968+
/// @brief Print operator for the ur_logger_level_t type
1969+
/// @returns
1970+
/// std::ostream &
1971+
inline std::ostream &operator<<(std::ostream &os, enum ur_logger_level_t value) {
1972+
switch (value) {
1973+
case UR_LOGGER_LEVEL_DEBUG:
1974+
os << "UR_LOGGER_LEVEL_DEBUG";
1975+
break;
1976+
case UR_LOGGER_LEVEL_INFO:
1977+
os << "UR_LOGGER_LEVEL_INFO";
1978+
break;
1979+
case UR_LOGGER_LEVEL_WARN:
1980+
os << "UR_LOGGER_LEVEL_WARN";
1981+
break;
1982+
case UR_LOGGER_LEVEL_ERR:
1983+
os << "UR_LOGGER_LEVEL_ERR";
1984+
break;
1985+
case UR_LOGGER_LEVEL_QUIET:
1986+
os << "UR_LOGGER_LEVEL_QUIET";
1987+
break;
1988+
default:
1989+
os << "unknown enumerator";
1990+
break;
1991+
}
1992+
return os;
1993+
}
1994+
///////////////////////////////////////////////////////////////////////////////
19641995
/// @brief Print operator for the ur_platform_info_t type
19651996
/// @returns
19661997
/// std::ostream &
@@ -12770,6 +12801,30 @@ inline std::ostream &operator<<(std::ostream &os, [[maybe_unused]] const struct
1277012801
ur::details::printPtr(os,
1277112802
*(params->ppUserData));
1277212803

12804+
os << ", ";
12805+
os << ".level = ";
12806+
12807+
os << *(params->plevel);
12808+
12809+
return os;
12810+
}
12811+
12812+
///////////////////////////////////////////////////////////////////////////////
12813+
/// @brief Print operator for the ur_set_logger_callback_level_params_t type
12814+
/// @returns
12815+
/// std::ostream &
12816+
inline std::ostream &operator<<(std::ostream &os, [[maybe_unused]] const struct ur_set_logger_callback_level_params_t *params) {
12817+
12818+
os << ".hAdapter = ";
12819+
12820+
ur::details::printPtr(os,
12821+
*(params->phAdapter));
12822+
12823+
os << ", ";
12824+
os << ".level = ";
12825+
12826+
os << *(params->plevel);
12827+
1277312828
return os;
1277412829
}
1277512830

@@ -17608,6 +17663,9 @@ inline ur_result_t UR_APICALL printFunctionParams(std::ostream &os, ur_function_
1760817663
case UR_FUNCTION_SET_LOGGER_CALLBACK: {
1760917664
os << (const struct ur_set_logger_callback_params_t *)params;
1761017665
} break;
17666+
case UR_FUNCTION_SET_LOGGER_CALLBACK_LEVEL: {
17667+
os << (const struct ur_set_logger_callback_level_params_t *)params;
17668+
} break;
1761117669
case UR_FUNCTION_ENQUEUE_KERNEL_LAUNCH: {
1761217670
os << (const struct ur_enqueue_kernel_launch_params_t *)params;
1761317671
} break;

scripts/core/INTRO.rst

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,10 @@ By default, there is a guarantee that *error* messages are flushed immediately.
204204

205205
Loggers redirect messages to *stdout*, *stderr*, a file or a user configurable callback function (default: *stderr*).
206206

207-
All of these logging options can be set with **UR_LOG_LOADER** and **UR_LOG_NULL** environment variables described in the **Environment Variables** section below.
207+
All of these logging options (except the callback) can be set with **UR_LOG_LOADER** and **UR_LOG_NULL** environment variables described in the **Environment Variables** section below.
208208
Both of these environment variables have the same syntax for setting logger options:
209209

210-
"[level:debug|info|warning|error];[flush:<debug|info|warning|error>];[output:stdout|stderr|file,<path>|callback]"
210+
"[level:debug|info|warning|error];[flush:<debug|info|warning|error>];[output:stdout|stderr|file,<path>]"
211211

212212
* level - a log level, meaning that only messages from this level and above are printed,
213213
possible values, from the lowest level to the highest one: *debug*, *info*, *warning*, *error*,
@@ -232,6 +232,10 @@ An example of an environment variable for setting up the null adapter library wi
232232

233233
UR_LOG_NULL="level:warning;output:stdout"
234234

235+
Logging callback
236+
^^^^^^^^^^^^^^^^^^^^^
237+
An API is available to configure the logging callback function :ref:`urSetLoggerCallback`. Additionally, the logging level can be set using :ref:`urSetLoggerCallbackLevel`.
238+
235239
Adapter Discovery
236240
---------------------
237241
UR is capable of discovering adapter libraries in the following ways in the listed order:

scripts/core/adapter.yml

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,36 @@ etors:
201201
value: "5"
202202
desc: "The backend is Native CPU"
203203
--- #--------------------------------------------------------------------------
204+
type: enum
205+
desc: "Minimum level of messages to be processed by the logger."
206+
class: $x
207+
name: $x_logger_level_t
208+
etors:
209+
- name: DEBUG
210+
value: "0"
211+
desc: "Debugging messages used for development purposes."
212+
- name: INFO
213+
value: "1"
214+
desc: "General messages not related to debugging, warnings or errors."
215+
- name: WARN
216+
value: "2"
217+
desc: "Used to warn users about potential problems."
218+
- name: ERR
219+
value: "3"
220+
desc: "Used when an error has occurred."
221+
- name: QUIET
222+
value: "4"
223+
desc: "Restrict logger processing any messages."
224+
--- #--------------------------------------------------------------------------
204225
type: fptr_typedef
205226
desc: "Callback function to retrieve output from the logger."
206227
name: $x_logger_output_callback_t
207228
return: "void"
208229
params:
230+
- type: $x_logger_level_t
231+
name: level
232+
desc: "[out] Minimum level of messages to be processed by the logger."
233+
init: DEBUG
209234
- type: const char*
210235
name: pLoggerMsg
211236
desc: "[in][out] pointer to data to be passed to callback"
@@ -214,7 +239,10 @@ params:
214239
desc: "[in][out] pointer to data to be passed to callback"
215240
--- #--------------------------------------------------------------------------
216241
type: function
217-
desc: "Set a callback function for use by the logger to retrieve logging output."
242+
desc: |
243+
Set a callback function for use by the logger to retrieve logging output.
244+
It is a requirement that the callback function is thread safe and the
245+
creator of the function will be responsible for this.
218246
class: $x
219247
name: SetLoggerCallback
220248
decl: static
@@ -228,3 +256,20 @@ params:
228256
- type: void*
229257
name: pUserData
230258
desc: "[in][out][optional] pointer to data to be passed to callback"
259+
- type: $x_logger_level_t
260+
name: level
261+
desc: "[in] logging level"
262+
init: 0
263+
--- #--------------------------------------------------------------------------
264+
type: function
265+
desc: "Set the minimum logging level for the logger Callback function."
266+
class: $x
267+
name: SetLoggerCallbackLevel
268+
decl: static
269+
params:
270+
- type: $x_adapter_handle_t
271+
name: hAdapter
272+
desc: "[in] handle of the adapter"
273+
- type: $x_logger_level_t
274+
name: level
275+
desc: "[in] logging level"

scripts/core/registry.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,9 @@ etors:
595595
- name: SET_LOGGER_CALLBACK
596596
desc: Enumerator for $xSetLoggerCallback
597597
value: '230'
598+
- name: SET_LOGGER_CALLBACK_LEVEL
599+
desc: Enumerator for $xSetLoggerCallbackLevel
600+
value: '231'
598601
---
599602
type: enum
600603
desc: Defines structure types

scripts/templates/ldrddi.cpp.mako

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,6 @@ namespace ur_loader
5151
add_local = False
5252
%>
5353

54-
%if re.match(r"\w+SetLoggerCallback$", th.make_func_name(n, tags, obj)):
55-
56-
ur_loader::urSetLoggerCallback(${obj['params'][0]['name']}, ${obj['params'][1]['name']}, ${obj['params'][2]['name']});
57-
58-
%endif
59-
6054
%if re.match(r"\w+AdapterGet$", th.make_func_name(n, tags, obj)):
6155

6256
size_t adapterIndex = 0;

0 commit comments

Comments
 (0)