mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 00:16:35 +00:00 
			
		
		
		
	Added cl_perf_timer. Updated global trace to include timers.
This commit is contained in:
		
							parent
							
								
									f096fbf4d6
								
							
						
					
					
						commit
						9a859ef55a
					
				| @ -465,7 +465,7 @@ IF (BUILD_CLAR) | ||||
| 
 | ||||
| 	INCLUDE_DIRECTORIES(${CLAR_PATH}) | ||||
| 	FILE(GLOB_RECURSE SRC_TEST ${CLAR_PATH}/*/*.c ${CLAR_PATH}/*/*.h) | ||||
| 	SET(SRC_CLAR "${CLAR_PATH}/main.c" "${CLAR_PATH}/clar_libgit2.c" "${CLAR_PATH}/clar_libgit2_trace.c" "${CLAR_PATH}/clar.c") | ||||
| 	SET(SRC_CLAR "${CLAR_PATH}/main.c" "${CLAR_PATH}/clar_libgit2.c" "${CLAR_PATH}/clar_libgit2_trace.c" "${CLAR_PATH}/clar_libgit2_timer.c" "${CLAR_PATH}/clar.c") | ||||
| 
 | ||||
| 	ADD_CUSTOM_COMMAND( | ||||
| 		OUTPUT ${CLAR_PATH}/clar.suite | ||||
|  | ||||
							
								
								
									
										83
									
								
								tests/clar_libgit2_timer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								tests/clar_libgit2_timer.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | ||||
| #include "clar_libgit2.h" | ||||
| #include "clar_libgit2_timer.h" | ||||
| #include "buffer.h" | ||||
| 
 | ||||
| void cl_perf_timer__init(cl_perf_timer *t) | ||||
| { | ||||
| 	memset(t, 0, sizeof(cl_perf_timer)); | ||||
| } | ||||
| 
 | ||||
| #if defined(GIT_WIN32) | ||||
| 
 | ||||
| void cl_perf_timer__start(cl_perf_timer *t) | ||||
| { | ||||
| 	QueryPerformanceCounter(&t->time_started); | ||||
| } | ||||
| 
 | ||||
| void cl_perf_timer__stop(cl_perf_timer *t) | ||||
| { | ||||
| 	LARGE_INTEGER time_now; | ||||
| 	QueryPerformanceCounter(&time_now); | ||||
| 
 | ||||
| 	t->last.QuadPart = (time_now.QuadPart - t->time_started.QuadPart); | ||||
| 	t->sum.QuadPart += (time_now.QuadPart - t->time_started.QuadPart); | ||||
| } | ||||
| 
 | ||||
| double cl_perf_timer__last(const cl_perf_timer *t) | ||||
| { | ||||
| 	LARGE_INTEGER freq; | ||||
| 	double fraction; | ||||
| 
 | ||||
| 	QueryPerformanceFrequency(&freq); | ||||
| 
 | ||||
| 	fraction = ((double)t->last.QuadPart) / ((double)freq.QuadPart); | ||||
| 	return fraction; | ||||
| } | ||||
| 
 | ||||
| double cl_perf_timer__sum(const cl_perf_timer *t) | ||||
| { | ||||
| 	LARGE_INTEGER freq; | ||||
| 	double fraction; | ||||
| 
 | ||||
| 	QueryPerformanceFrequency(&freq); | ||||
| 
 | ||||
| 	fraction = ((double)t->sum.QuadPart) / ((double)freq.QuadPart); | ||||
| 	return fraction; | ||||
| } | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| #include <sys/time.h> | ||||
| 
 | ||||
| static uint32_t now_in_ms(void) | ||||
| { | ||||
| 	struct timeval now; | ||||
| 	gettimeofday(&now, NULL); | ||||
| 	return (uint32_t)((now.tv_sec * 1000) + (now.tv_usec / 1000)); | ||||
| } | ||||
| 
 | ||||
| void cl_perf_timer__start(cl_perf_timer *t) | ||||
| { | ||||
| 	t->time_started = now_in_ms(); | ||||
| } | ||||
| 
 | ||||
| void cl_perf_timer__stop(cl_perf_timer *t) | ||||
| { | ||||
| 	uint32_t now = now_in_ms(); | ||||
| 	t->last = (now - t->time_started); | ||||
| 	t->sum += (now - t->time_started); | ||||
| } | ||||
| 
 | ||||
| double cl_perf_timer__last(const cl_perf_timer *t) | ||||
| { | ||||
| 	double fraction = ((double)t->last) / 1000; | ||||
| 	return fraction; | ||||
| } | ||||
| 
 | ||||
| double cl_perf_timer__sum(const cl_perf_timer *t) | ||||
| { | ||||
| 	double fraction = ((double)t->sum) / 1000; | ||||
| 	return fraction; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										48
									
								
								tests/clar_libgit2_timer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								tests/clar_libgit2_timer.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| #ifndef __CLAR_LIBGIT2_TIMER__ | ||||
| #define __CLAR_LIBGIT2_TIMER__ | ||||
| 
 | ||||
| #if defined(GIT_WIN32) | ||||
| 
 | ||||
| struct cl_perf_timer | ||||
| { | ||||
| 	/* cummulative running time across all start..stop intervals */ | ||||
| 	LARGE_INTEGER sum; | ||||
| 	/* value of last start..stop interval */ | ||||
| 	LARGE_INTEGER last; | ||||
| 	/* clock value at start */ | ||||
| 	LARGE_INTEGER time_started; | ||||
| }; | ||||
| 
 | ||||
| #define CL_PERF_TIMER_INIT {0} | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| struct cl_perf_timer | ||||
| { | ||||
| 	uint32_t sum; | ||||
| 	uint32_t last; | ||||
| 	uint32_t time_started; | ||||
| }; | ||||
| 
 | ||||
| #define CL_PERF_TIMER_INIT {0} | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| typedef struct cl_perf_timer cl_perf_timer; | ||||
| 
 | ||||
| void cl_perf_timer__init(cl_perf_timer *t); | ||||
| void cl_perf_timer__start(cl_perf_timer *t); | ||||
| void cl_perf_timer__stop(cl_perf_timer *t); | ||||
| 
 | ||||
| /**
 | ||||
|  * return value of last start..stop interval in seconds. | ||||
|  */ | ||||
| double cl_perf_timer__last(const cl_perf_timer *t); | ||||
| 
 | ||||
| /**
 | ||||
|  * return cummulative running time across all start..stop | ||||
|  * intervals in seconds. | ||||
|  */ | ||||
| double cl_perf_timer__sum(const cl_perf_timer *t); | ||||
| 
 | ||||
| #endif /* __CLAR_LIBGIT2_TIMER__ */ | ||||
| @ -1,5 +1,6 @@ | ||||
| #include "clar_libgit2.h" | ||||
| #include "clar_libgit2_trace.h" | ||||
| #include "clar_libgit2_timer.h" | ||||
| #include "trace.h" | ||||
| 
 | ||||
| 
 | ||||
| @ -120,6 +121,16 @@ static void _load_trace_params(void) | ||||
| 
 | ||||
| #define HR "================================================================" | ||||
| 
 | ||||
| /**
 | ||||
|  * Timer to report the take spend in a test's run() method. | ||||
|  */ | ||||
| static cl_perf_timer s_timer_run = CL_PERF_TIMER_INIT; | ||||
| 
 | ||||
| /**
 | ||||
|  * Timer to report total time in a test (init, run, cleanup). | ||||
|  */ | ||||
| static cl_perf_timer s_timer_test = CL_PERF_TIMER_INIT; | ||||
| 
 | ||||
| void _cl_trace_cb__event_handler( | ||||
| 	cl_trace_event ev, | ||||
| 	const char *suite_name, | ||||
| @ -139,21 +150,30 @@ void _cl_trace_cb__event_handler( | ||||
| 
 | ||||
| 	case CL_TRACE__TEST__BEGIN: | ||||
| 		git_trace(GIT_TRACE_TRACE, "\n%s::%s: Begin Test", suite_name, test_name); | ||||
| 		cl_perf_timer__init(&s_timer_test); | ||||
| 		cl_perf_timer__start(&s_timer_test); | ||||
| 		break; | ||||
| 
 | ||||
| 	case CL_TRACE__TEST__END: | ||||
| 		git_trace(GIT_TRACE_TRACE, "%s::%s: End Test", suite_name, test_name); | ||||
| 		cl_perf_timer__stop(&s_timer_test); | ||||
| 		git_trace(GIT_TRACE_TRACE, "%s::%s: End Test (%.3f %.3f)", suite_name, test_name, | ||||
| 				  cl_perf_timer__last(&s_timer_run), | ||||
| 				  cl_perf_timer__last(&s_timer_test)); | ||||
| 		break; | ||||
| 
 | ||||
| 	case CL_TRACE__TEST__RUN_BEGIN: | ||||
| 		git_trace(GIT_TRACE_TRACE, "%s::%s: Begin Run", suite_name, test_name); | ||||
| 		cl_perf_timer__init(&s_timer_run); | ||||
| 		cl_perf_timer__start(&s_timer_run); | ||||
| 		break; | ||||
| 
 | ||||
| 	case CL_TRACE__TEST__RUN_END: | ||||
| 		cl_perf_timer__stop(&s_timer_run); | ||||
| 		git_trace(GIT_TRACE_TRACE, "%s::%s: End Run", suite_name, test_name); | ||||
| 		break; | ||||
| 
 | ||||
| 	case CL_TRACE__TEST__LONGJMP: | ||||
| 		cl_perf_timer__stop(&s_timer_run); | ||||
| 		git_trace(GIT_TRACE_TRACE, "%s::%s: Aborted", suite_name, test_name); | ||||
| 		break; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jeff Hostetler
						Jeff Hostetler