From 4d55a81958a67d5da3227d7af79a5c630f678424 Mon Sep 17 00:00:00 2001 From: James Peach Date: Fri, 5 May 2006 07:15:45 +0000 Subject: r15450: Change profiling data macros to use stack variables rather than globals. This catches mismatched start/end calls and removes the need for special nested profiling calls. (This used to be commit ee750498812190edd3ec52ca3c750258f3b8a97a) --- source3/include/includes.h | 21 +++++++++++-- source3/include/smbprofile.h | 71 +++++++++++++++++++++----------------------- 2 files changed, 53 insertions(+), 39 deletions(-) (limited to 'source3/include') diff --git a/source3/include/includes.h b/source3/include/includes.h index 0eb2ba83aa..3aec0f602a 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -943,8 +943,6 @@ extern int errno; #include "msdfs.h" -#include "smbprofile.h" - #include "rap.h" #include "md5.h" @@ -1059,11 +1057,30 @@ struct smb_ldap_privates; #include "smb_ldap.h" +/* + * Reasons for cache flush. + */ + +enum flush_reason_enum { + SEEK_FLUSH, + READ_FLUSH, + WRITE_FLUSH, + READRAW_FLUSH, + OPLOCK_RELEASE_FLUSH, + CLOSE_FLUSH, + SYNC_FLUSH, + SIZECHANGE_FLUSH, + /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */ + NUM_FLUSH_REASONS}; + /***** automatically generated prototypes *****/ #ifndef NO_PROTO_H #include "proto.h" #endif +/* We need this after proto.h to reference GetTimeOfDay(). */ +#include "smbprofile.h" + /* String routines */ #include "srvstr.h" diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h index f68a1e240f..dd171ac13e 100644 --- a/source3/include/smbprofile.h +++ b/source3/include/smbprofile.h @@ -21,14 +21,6 @@ */ -/* - * Reasons for cache flush. - */ - -#define NUM_FLUSH_REASONS 8 /* Keep this in sync with the enum below. */ -enum flush_reason_enum { SEEK_FLUSH, READ_FLUSH, WRITE_FLUSH, READRAW_FLUSH, - OPLOCK_RELEASE_FLUSH, CLOSE_FLUSH, SYNC_FLUSH, SIZECHANGE_FLUSH }; - /* this file defines the profile structure in the profile shared memory area */ @@ -417,6 +409,8 @@ extern struct timeval profile_endtime_nested; extern BOOL do_profile_flag; extern BOOL do_profile_times; +#ifdef WITH_PROFILE + /* these are helper macros - do not call them directly in the code * use the DO_PROFILE_* START_PROFILE and END_PROFILE ones * below which test for the profile flage first @@ -424,61 +418,63 @@ extern BOOL do_profile_times; #define INC_PROFILE_COUNT(x) profile_p->x++ #define DEC_PROFILE_COUNT(x) profile_p->x-- #define ADD_PROFILE_COUNT(x,y) profile_p->x += (y) -#define PROFILE_TIME \ - ((profile_endtime.tv_sec - profile_starttime.tv_sec) *1000000 + \ - ((int)profile_endtime.tv_usec - (int)profile_starttime.tv_usec)) -#define PROFILE_TIME_NESTED \ - ((profile_endtime_nested.tv_sec - profile_starttime_nested.tv_sec) *1000000 + \ - ((int)profile_endtime_nested.tv_usec - (int)profile_starttime_nested.tv_usec)) -#ifdef WITH_PROFILE +static inline unsigned long long profile_timestamp(void) +{ + struct timeval tv; + GetTimeOfDay(&tv); + return (tv.tv_sec * 1000000) + tv.tv_usec; +} + +/* end of helper macros */ + #define DO_PROFILE_INC(x) \ if (do_profile_flag) { \ INC_PROFILE_COUNT(x); \ } + #define DO_PROFILE_DEC(x) \ if (do_profile_flag) { \ DEC_PROFILE_COUNT(x); \ } + #define DO_PROFILE_DEC_INC(x,y) \ if (do_profile_flag) { \ DEC_PROFILE_COUNT(x); \ INC_PROFILE_COUNT(y); \ } + #define DO_PROFILE_ADD(x,n) \ if (do_profile_flag) { \ ADD_PROFILE_COUNT(x,n); \ } + #define START_PROFILE(x) \ + unsigned long long __profstamp_##x = 0; \ if (do_profile_flag) { \ - if (do_profile_times) \ - GetTimeOfDay(&profile_starttime); \ - INC_PROFILE_COUNT(x##_count); \ - } -#define START_PROFILE_NESTED(x) \ - if (do_profile_flag) { \ - if (do_profile_times) \ - GetTimeOfDay(&profile_starttime_nested); \ + __profstamp_##x = do_profile_times ? profile_timestamp() : 0;\ INC_PROFILE_COUNT(x##_count); \ - } + } + #define START_PROFILE_BYTES(x,n) \ + unsigned long long __profstamp_##x = 0; \ if (do_profile_flag) { \ - if (do_profile_times) \ - GetTimeOfDay(&profile_starttime); \ + __profstamp_##x = do_profile_times ? profile_timestamp() : 0;\ INC_PROFILE_COUNT(x##_count); \ - ADD_PROFILE_COUNT(x##_bytes,n); \ - } + ADD_PROFILE_COUNT(x##_bytes, n); \ + } + #define END_PROFILE(x) \ if (do_profile_times) { \ - GetTimeOfDay(&profile_endtime); \ - ADD_PROFILE_COUNT(x##_time,PROFILE_TIME); \ + ADD_PROFILE_COUNT(x##_time, \ + profile_timestamp() - __profstamp_##x); \ } -#define END_PROFILE_NESTED(x) \ - if (do_profile_times) { \ - GetTimeOfDay(&profile_endtime_nested); \ - ADD_PROFILE_COUNT(x##_time,PROFILE_TIME_NESTED); \ - } -#else + +#define START_PROFILE_NESTED(x) START_PROFILE(x) +#define END_PROFILE_NESTED(x) END_PROFILE(x) + +#else /* WITH_PROFILE */ + #define DO_PROFILE_INC(x) #define DO_PROFILE_DEC(x) #define DO_PROFILE_DEC_INC(x,y) @@ -488,6 +484,7 @@ extern BOOL do_profile_times; #define START_PROFILE_BYTES(x,n) #define END_PROFILE(x) #define END_PROFILE_NESTED(x) -#endif + +#endif /* WITH_PROFILE */ #endif -- cgit