diff options
author | rizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-04-12 20:40:46 +0000 |
---|---|---|
committer | rizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-04-12 20:40:46 +0000 |
commit | 08c77ea86d932596542a63a1a67cb3e6a1229135 (patch) | |
tree | 0b296463204ccd97d57e585d6659dd75d15280fc /include/asterisk.h | |
parent | db922028c05355324c33e3a08ce427ed0a16b45f (diff) |
add 'show threads' and 'show profile' commands.
These are momstly debugging tools for developers,
a bit documented in the header files (utils.h),
although more documentation is definitely necessary.
The performance impact is close to zero(*) so there is no
need to compile it conditionally.
(*) not completely true - thread destruction still needs
to search a list _but_ this can be easily optimized if we
end up with hundreds of active threads (in which case, though,
the problem is clearly elsewhere).
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@19544 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk.h')
-rw-r--r-- | include/asterisk.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/include/asterisk.h b/include/asterisk.h index 38b0f67ab..7e63f608c 100644 --- a/include/asterisk.h +++ b/include/asterisk.h @@ -15,6 +15,8 @@ * \brief Asterisk main include file. File version handling, generic pbx functions. */ +#include "asterisk/compat.h" + #ifndef _ASTERISK_H #define _ASTERISK_H @@ -108,6 +110,24 @@ void ast_register_file_version(const char *file, const char *version); void ast_unregister_file_version(const char *file); /*! + * \brief support for event profiling + * (note, this must be documented a lot more) + * ast_add_profile allocates a generic 'counter' with a given name, + * which can be shown with the command 'show profile <name>' + * + * The counter accumulates positive or negative values supplied by + * ast_add_profile(), dividing them by the 'scale' value passed in the + * create call, and also counts the number of 'events'. + * Values can also be taked by the TSC counter on ia32 architectures, + * in which case you can mark the start of an event calling ast_mark(id, 1) + * and then the end of the event with ast_mark(id, 0). + * For non-i386 architectures, these two calls return 0. + */ +int ast_add_profile(const char *, uint64_t scale); +int64_t ast_profile(int, int64_t); +int64_t ast_mark(int, int start1_stop0); + +/*! * \brief Register/unregister a source code file with the core. * \param file the source file name * \param version the version string (typically a CVS revision keyword string) @@ -129,6 +149,20 @@ void ast_unregister_file_version(const char *file); * revision number. */ #if defined(__GNUC__) && !defined(LOW_MEMORY) +#ifdef MTX_PROFILE +#define HAVE_MTX_PROFILE /* used in lock.h */ +#define ASTERISK_FILE_VERSION(file, version) \ + static int mtx_prof = -1; /* profile mutex */ \ + static void __attribute__((constructor)) __register_file_version(void) \ + { \ + mtx_prof = ast_add_profile("mtx_lock_" file, 0); \ + ast_register_file_version(file, version); \ + } \ + static void __attribute__((destructor)) __unregister_file_version(void) \ + { \ + ast_unregister_file_version(file); \ + } +#else #define ASTERISK_FILE_VERSION(file, version) \ static void __attribute__((constructor)) __register_file_version(void) \ { \ @@ -138,6 +172,7 @@ void ast_unregister_file_version(const char *file); { \ ast_unregister_file_version(file); \ } +#endif #elif !defined(LOW_MEMORY) /* ! __GNUC__ && ! LOW_MEMORY*/ #define ASTERISK_FILE_VERSION(file, x) static const char __file_version[] = x; #else /* LOW_MEMORY */ |