You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							78 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							78 lines
						
					
					
						
							2.3 KiB
						
					
					
				
								// Timing tools.
							 | 
						|
								
							 | 
						|
								#ifndef _CL_TIMING_H
							 | 
						|
								#define _CL_TIMING_H
							 | 
						|
								
							 | 
						|
								#include "cln/config.h"
							 | 
						|
								#include "cln/intparam.h"
							 | 
						|
								#include "cln/types.h"
							 | 
						|
								
							 | 
						|
								#include "cln/io.h"
							 | 
						|
								
							 | 
						|
								namespace cln {
							 | 
						|
								
							 | 
						|
								struct cl_timespec {
							 | 
						|
									uintL tv_sec;	// seconds since 1970-01-01
							 | 
						|
									sintL tv_nsec;	// nanoseconds, >= 0, < 1000000000
							 | 
						|
									// Constructors.
							 | 
						|
									cl_timespec () {}
							 | 
						|
									cl_timespec (uintL sec, sintL nsec)
							 | 
						|
										: tv_sec (sec), tv_nsec (nsec) {}
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								struct cl_time_duration {
							 | 
						|
									uintL tv_sec;	// seconds
							 | 
						|
									uintL tv_nsec;	// nanoseconds
							 | 
						|
									// Constructors.
							 | 
						|
									cl_time_duration () {}
							 | 
						|
									cl_time_duration (uintL sec)
							 | 
						|
										: tv_sec (sec), tv_nsec (0) {}
							 | 
						|
									cl_time_duration (uintL sec, uintL nsec)
							 | 
						|
										: tv_sec (sec), tv_nsec (nsec) {}
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								struct cl_time_consumption {
							 | 
						|
									cl_time_duration realtime;	// elapsed time
							 | 
						|
									cl_time_duration usertime;	// system's notion of user time/run time
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								extern const cl_time_duration operator- (const cl_timespec&, const cl_timespec&);
							 | 
						|
								extern const cl_timespec operator+ (const cl_timespec&, const cl_time_duration&);
							 | 
						|
								extern const cl_timespec operator- (const cl_timespec&, const cl_time_duration&);
							 | 
						|
								extern const cl_time_duration operator+ (const cl_time_duration&, const cl_time_duration&);
							 | 
						|
								extern const cl_time_duration operator- (const cl_time_duration&, const cl_time_duration&);
							 | 
						|
								
							 | 
						|
								extern const cl_timespec cl_current_time ();
							 | 
						|
								extern const cl_time_consumption cl_current_time_consumption ();
							 | 
						|
								
							 | 
						|
								// Report a time consumption.
							 | 
						|
								// (Should better be a virtual member function of `cl_time_consumption').
							 | 
						|
								extern void cl_timing_report (std::ostream&, const cl_time_consumption&);
							 | 
						|
								
							 | 
						|
								struct cl_timing {
							 | 
						|
									// Constructor, starts the time interval.
							 | 
						|
									cl_timing (cl_time_consumption& accumulator);
							 | 
						|
									cl_timing (std::ostream& destination = std::cerr);
							 | 
						|
									cl_timing (const char *, std::ostream& destination = std::cerr);
							 | 
						|
									// Destructor, closes the time interval and does a report.
							 | 
						|
									~cl_timing ();	
							 | 
						|
								//private:
							 | 
						|
									cl_time_consumption tmp;
							 | 
						|
									void (*report_fn) (const cl_timing&);
							 | 
						|
									void* report_destination;
							 | 
						|
									const char * comment;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								// Macro for timing.
							 | 
						|
								// Usage:
							 | 
						|
								//     { CL_TIMING; computation(); }
							 | 
						|
								// or  { CL_TIMING(accumulator); computation(); }
							 | 
						|
								// or  { CL_TIMING(cout); computation(); }
							 | 
						|
								// The timing interval starts immediately and ends at the closing brace.
							 | 
						|
								#define CL_TIMING  CL_TIMING1(__LINE__)
							 | 
						|
								#define CL_TIMING1(line)  CL_TIMING2(line)
							 | 
						|
								#define CL_TIMING2(line)  cl_timing cl_timing_dummy_##line
							 | 
						|
								
							 | 
						|
								}  // namespace cln
							 | 
						|
								
							 | 
						|
								#endif /* _CL_TIMING_H */
							 |