<!-- Module Developer's Guide -->

<chapter>
	
	<title>&develguide;</title>

	<para>
	The benchmark module provides an internal <acronym>API</acronym> to be used by 
	other &osips; modules. The available functions are identical to the user exported
	functions.
	</para>
	<para>
	Please note that this module is intended mainly for developers. It should
	be used with caution in production environments.
	</para>

	<section>
	<title>Available Functions</title>

	<section>
		<title>
		<function moreinfo="none">bm_register(name, mode, id)</function>
		</title>
		<para>
		This function register a new timer and/or returns the internal ID
		associated with the timer. mode controls the creation of new timer
		if not found. id is to be used by start and log timer functions.
		</para>
	</section>

	<section>
		<title>
		<function moreinfo="none">bm_start(id)</function>
		</title>
		<para>
		This function equals the user-exported function bm_start_timer. The
		id is passed as an integer, though.
		</para>
	</section>

	<section>
		<title>
		<function moreinfo="none">bm_log(id)</function>
		</title>
		<para>
		This function equals the user-exported function bm_log_timer. The id
		is passed as an integer, though.
		</para>
	</section>
	</section>


	<section>
		<title>Benchmark API Example</title>
		<example>
			<title>Using the benchmark module's API from another module</title>
			<programlisting format="linespecific">
...
#include "../benchmark/benchmark.h"
...
struct bm_binds bmb;
...
...
/* load the benchmarking API */
if (load_bm_api( &amp;bmb )!=0) {
    LM_ERR("can't load benchmark API\n");
    goto error;
}
...
...
/* Start/log timers during a (usually user-exported) module function */
bmb.bm_register("test", 1, &amp;id)
bmb.bm_start(id);
do_something();
bmb.bm_log(id);
...
</programlisting>
		</example>
	</section>

</chapter>

