special cases and other things in wxPython, and since I plan on making several more, I've decided to put the SWIG sources in wxPython's CVS instead of relying on maintaining patches. This effectivly becomes a fork of an obsolete version of SWIG, :-( but since SWIG 1.3 still doesn't have some things I rely on in 1.1, not to mention that my custom patches would all have to be redone, I felt that this is the easier road to take. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15307 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			181 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
//
 | 
						|
// $Header$
 | 
						|
//
 | 
						|
// timers.i
 | 
						|
// A SWIG file for adding various timing functions. 
 | 
						|
// Really, this is modeled after the timers in the CMMD
 | 
						|
// message passing library for the CM-5.
 | 
						|
// 
 | 
						|
// Dave Beazley
 | 
						|
// April 2, 1996
 | 
						|
//
 | 
						|
/* Revision history 
 | 
						|
 * $Log$
 | 
						|
 * Revision 1.1  2002/04/29 19:56:49  RD
 | 
						|
 * Since I have made several changes to SWIG over the years to accomodate
 | 
						|
 * special cases and other things in wxPython, and since I plan on making
 | 
						|
 * several more, I've decided to put the SWIG sources in wxPython's CVS
 | 
						|
 * instead of relying on maintaining patches.  This effectivly becomes a
 | 
						|
 * fork of an obsolete version of SWIG, :-( but since SWIG 1.3 still
 | 
						|
 * doesn't have some things I rely on in 1.1, not to mention that my
 | 
						|
 * custom patches would all have to be redone, I felt that this is the
 | 
						|
 * easier road to take.
 | 
						|
 *
 | 
						|
 * Revision 1.1.1.1  1999/02/28 02:00:53  beazley
 | 
						|
 * Swig1.1
 | 
						|
 *
 | 
						|
 * Revision 1.1  1996/05/22 17:27:01  beazley
 | 
						|
 * Initial revision
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
%module timers
 | 
						|
%{
 | 
						|
 | 
						|
#include <time.h>
 | 
						|
#define  SWIG_NTIMERS     64
 | 
						|
 | 
						|
static clock_t  telapsed[SWIG_NTIMERS];
 | 
						|
static clock_t  tstart[SWIG_NTIMERS];
 | 
						|
static clock_t  tend[SWIG_NTIMERS];
 | 
						|
 | 
						|
/*-----------------------------------------------------------------
 | 
						|
 * SWIG_timer_clear(int i)
 | 
						|
 *
 | 
						|
 * Clears timer i.
 | 
						|
 *----------------------------------------------------------------- */
 | 
						|
 | 
						|
void
 | 
						|
SWIG_timer_clear(int i)
 | 
						|
{
 | 
						|
  if ((i >= 0) && (i < SWIG_NTIMERS))
 | 
						|
   telapsed[i] = 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------
 | 
						|
 * SWIG_timer_start(int i)
 | 
						|
 *
 | 
						|
 * Starts timer i
 | 
						|
 *----------------------------------------------------------------- */
 | 
						|
 | 
						|
void
 | 
						|
SWIG_timer_start(int i)
 | 
						|
{
 | 
						|
  if ((i >= 0) && (i < SWIG_NTIMERS))
 | 
						|
    tstart[i] = clock();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------
 | 
						|
 * SWIG_timer_stop(int i)
 | 
						|
 *
 | 
						|
 * Stops timer i and accumulates elapsed time
 | 
						|
 *----------------------------------------------------------------- */
 | 
						|
 | 
						|
void
 | 
						|
SWIG_timer_stop(int i)
 | 
						|
{
 | 
						|
  if ((i >= 0) && (i < SWIG_NTIMERS)) {
 | 
						|
    tend[i] = clock();
 | 
						|
    telapsed[i] += (tend[i] - tstart[i]);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/*-----------------------------------------------------------------
 | 
						|
 * SWIG_timer_elapsed(int i)
 | 
						|
 *
 | 
						|
 * Returns the time elapsed on timer i in seconds.
 | 
						|
 *----------------------------------------------------------------- */
 | 
						|
 | 
						|
double
 | 
						|
SWIG_timer_elapsed(int i)
 | 
						|
{
 | 
						|
  double   t;
 | 
						|
  if ((i >= 0) && (i < SWIG_NTIMERS)) {
 | 
						|
    t = (double) telapsed[i]/(double) CLOCKS_PER_SEC;
 | 
						|
    return(t);
 | 
						|
  } else {
 | 
						|
    return 0;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
%}
 | 
						|
 | 
						|
%section "Timer Functions",pre,after,chop_left=3,nosort,info,chop_right = 0, chop_top=0,chop_bottom=0
 | 
						|
 | 
						|
%text %{
 | 
						|
%include timers.i
 | 
						|
 | 
						|
This module provides a collection of timing functions designed for
 | 
						|
performance analysis and benchmarking of different code fragments. 
 | 
						|
 | 
						|
A total of 64 different timers are available.   Each timer can be
 | 
						|
managed independently using four functions :
 | 
						|
 | 
						|
    timer_clear(int n)          Clears timer n
 | 
						|
    timer_start(int n)          Start timer n
 | 
						|
    timer_stop(int n)           Stop timer n
 | 
						|
    timer_elapsed(int n)        Return elapsed time (in seconds)
 | 
						|
 | 
						|
All timers measure CPU time.
 | 
						|
 | 
						|
Since each timer can be accessed independently, it is possible
 | 
						|
to use groups of timers for measuring different aspects of code
 | 
						|
performance.   To use a timer, simply use code like this :
 | 
						|
%}
 | 
						|
 | 
						|
#if defined(SWIGTCL)
 | 
						|
%text %{
 | 
						|
      timer_clear 0
 | 
						|
      timer_start 0
 | 
						|
      .. a bunch of Tcl code ...
 | 
						|
      timer_stop 0
 | 
						|
      puts "[timer_elapsed 0] seconds of CPU time"
 | 
						|
%}
 | 
						|
#elif defined(SWIGPERL)
 | 
						|
%text %{
 | 
						|
      timer_clear(0);
 | 
						|
      timer_start(0);
 | 
						|
      .. a bunch of Perl code ...
 | 
						|
      timer_stop(0);
 | 
						|
      print timer_elapsed(0)," seconds of CPU time\n";
 | 
						|
%}
 | 
						|
#elif defined(SWIGPYTHON)
 | 
						|
%text %{
 | 
						|
      timer_clear(0)
 | 
						|
      timer_start(0)
 | 
						|
      ... a bunch of Python code ...
 | 
						|
      timer_stop(0)
 | 
						|
      print timer_elapsed(0)," seconds of CPU time"
 | 
						|
%}      
 | 
						|
#endif
 | 
						|
 | 
						|
%text %{
 | 
						|
A single timer can be stopped and started repeatedly to provide
 | 
						|
a cummulative timing effect.
 | 
						|
 | 
						|
As a general performance note, making frequent calls to the timing
 | 
						|
functions can severely degrade performance (due to operating system
 | 
						|
overhead).   The resolution of the timers may be poor for extremely
 | 
						|
short code fragments.   Therefore, the timers work best for
 | 
						|
computationally intensive operations.
 | 
						|
%}
 | 
						|
 | 
						|
 | 
						|
%name(timer_clear)   void SWIG_timer_clear(int n);   
 | 
						|
/* Clears timer n. */
 | 
						|
 | 
						|
%name(timer_start)   void SWIG_timer_start(int n);   
 | 
						|
/* Starts timer n. */
 | 
						|
 | 
						|
%name(timer_stop)    void SWIG_timer_stop(int n);    
 | 
						|
/* Stops timer n. */
 | 
						|
 | 
						|
%name(timer_elapsed) double SWIG_timer_elapsed(int n); 
 | 
						|
/* Return the elapsed time (in seconds) of timer n */
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |