aboutsummaryrefslogtreecommitdiffstats
path: root/include/asterisk.h
diff options
context:
space:
mode:
authorrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2006-04-12 20:40:46 +0000
committerrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2006-04-12 20:40:46 +0000
commit08c77ea86d932596542a63a1a67cb3e6a1229135 (patch)
tree0b296463204ccd97d57e585d6659dd75d15280fc /include/asterisk.h
parentdb922028c05355324c33e3a08ce427ed0a16b45f (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.h35
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 */