forked from enlightenment/efl
eina_log optimization: allow to compile out some debug messages.
Users may opt to set EINA_LOG_LEVEL_MAXIMUM to some integer and macro will then evaluate to check for that value before actually call eina_log_print() macro. By using optimizations compilers will effectivelly compile out the code if it is never reached, thus saving the check and function call in possible critical paths. SVN revision: 42269
This commit is contained in:
parent
e229b25826
commit
b5397eea63
|
@ -94,6 +94,23 @@ if test "x$have_safety_checks" = "xyes"; then
|
||||||
fi
|
fi
|
||||||
AC_SUBST(EINA_CONFIGURE_SAFETY_CHECKS)
|
AC_SUBST(EINA_CONFIGURE_SAFETY_CHECKS)
|
||||||
|
|
||||||
|
with_max_log_level="<unset>"
|
||||||
|
AC_ARG_WITH(internal-maximum-log-level,
|
||||||
|
[AC_HELP_STRING([--with-internal-maximum-log-level=NUMBER],
|
||||||
|
[limit eina internal log level to the given number, any call to EINA_LOG() with values greater than this will be compiled out, ignoring runtime settings, but saving function calls.])],
|
||||||
|
[
|
||||||
|
if test "x${withval}" != "xno"; then
|
||||||
|
if echo "${withval}" | grep '^[[0-9]]\+$' >/dev/null 2>/dev/null; then
|
||||||
|
AC_MSG_NOTICE([ignoring any EINA_LOG() with level greater than ${withval}])
|
||||||
|
AC_DEFINE_UNQUOTED(EINA_LOG_LEVEL_MAXIMUM, ${withval}, [if set, logging is limited to this amount.])
|
||||||
|
with_max_log_level="${withval}"
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([--with-internal-maximum-log-level takes a decimal number, got "${withval}" instead.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
], [:])
|
||||||
|
|
||||||
|
|
||||||
# Choose best memory pool
|
# Choose best memory pool
|
||||||
AC_ARG_ENABLE([default-mempool],
|
AC_ARG_ENABLE([default-mempool],
|
||||||
[AC_HELP_STRING([--enable-default-mempool], [Default memory allocator could be faster for some computer. @<:@default=disabled@:>@])],
|
[AC_HELP_STRING([--enable-default-mempool], [Default memory allocator could be faster for some computer. @<:@default=disabled@:>@])],
|
||||||
|
@ -409,6 +426,7 @@ echo "Configuration Options Summary:"
|
||||||
echo
|
echo
|
||||||
echo " Magic debug..........: ${have_magic_debug}"
|
echo " Magic debug..........: ${have_magic_debug}"
|
||||||
echo " Safety checks........: ${have_safety_checks}"
|
echo " Safety checks........: ${have_safety_checks}"
|
||||||
|
echo " Maximum log level....: ${with_max_log_level}"
|
||||||
echo " Report string usage..: ${have_stringshare_usage}"
|
echo " Report string usage..: ${have_stringshare_usage}"
|
||||||
echo " Default mempool......: ${have_default_mempool}"
|
echo " Default mempool......: ${have_default_mempool}"
|
||||||
echo " Thread Support.......: ${have_pthread}"
|
echo " Thread Support.......: ${have_pthread}"
|
||||||
|
|
|
@ -52,9 +52,28 @@ EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
|
||||||
/**
|
/**
|
||||||
* @def EINA_LOG(DOM, LEVEL, fmt, ...)
|
* @def EINA_LOG(DOM, LEVEL, fmt, ...)
|
||||||
* Logs a message on the specified domain, level and format.
|
* Logs a message on the specified domain, level and format.
|
||||||
|
*
|
||||||
|
* @note if @c EINA_LOG_LEVEL_MAXIMUM is defined, then messages larger
|
||||||
|
* than this value will be ignored regardless of current domain
|
||||||
|
* level, the eina_log_print() is not even called! Most
|
||||||
|
* compilers will just detect the two integers make the branch
|
||||||
|
* impossible and remove the branch and function call all
|
||||||
|
* together. Take this as optimization tip and possible remove
|
||||||
|
* debug messages from binaries to be deployed, saving on hot
|
||||||
|
* paths. Never define @c EINA_LOG_LEVEL_MAXIMUM on public
|
||||||
|
* header files.
|
||||||
*/
|
*/
|
||||||
|
#ifdef EINA_LOG_LEVEL_MAXIMUM
|
||||||
|
#define EINA_LOG(DOM, LEVEL, fmt, ...) \
|
||||||
|
do { \
|
||||||
|
if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) \
|
||||||
|
eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
fmt, ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
#define EINA_LOG(DOM, LEVEL, fmt, ...) \
|
#define EINA_LOG(DOM, LEVEL, fmt, ...) \
|
||||||
eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
|
eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @def EINA_LOG_DOM_CRIT(DOM, fmt, ...)
|
* @def EINA_LOG_DOM_CRIT(DOM, fmt, ...)
|
||||||
|
|
Loading…
Reference in New Issue