Readding changes that got lost during refactoring/rebasing.

This commit is contained in:
Tobias Brunner
2009-12-23 17:03:41 +01:00
parent 4a5a5dd290
commit 4ec2c94b5d
+17 -4
View File
@@ -24,7 +24,12 @@
/** /**
* Do not report mutexes with an overall waiting time smaller than this (in us) * Do not report mutexes with an overall waiting time smaller than this (in us)
*/ */
#define PROFILE_TRESHHOLD 1000 #define PROFILE_WAIT_TRESHHOLD 10000
/**
* Do not report mutexes with an overall lock count smaller than this
*/
#define PROFILE_LOCK_TRESHHOLD 1000
#include <utils/backtrace.h> #include <utils/backtrace.h>
@@ -36,6 +41,11 @@ struct lock_profile_t {
*/ */
timeval_t waited; timeval_t waited;
/**
* How many times the lock has been invoked
*/
u_int locked;
/** /**
* backtrace where mutex has been created * backtrace where mutex has been created
*/ */
@@ -48,10 +58,11 @@ struct lock_profile_t {
static inline void profiler_cleanup(lock_profile_t *profile) static inline void profiler_cleanup(lock_profile_t *profile)
{ {
if (profile->waited.tv_sec > 0 || if (profile->waited.tv_sec > 0 ||
profile->waited.tv_usec > PROFILE_TRESHHOLD) profile->waited.tv_usec > PROFILE_WAIT_TRESHHOLD ||
profile->locked > PROFILE_LOCK_TRESHHOLD)
{ {
fprintf(stderr, "%d.%06ds in lock created at:", fprintf(stderr, "%d.%03ds / %d times in lock created at:",
profile->waited.tv_sec, profile->waited.tv_usec); profile->waited.tv_sec, profile->waited.tv_usec, profile->locked);
profile->backtrace->log(profile->backtrace, stderr); profile->backtrace->log(profile->backtrace, stderr);
} }
profile->backtrace->destroy(profile->backtrace); profile->backtrace->destroy(profile->backtrace);
@@ -64,10 +75,12 @@ static inline void profiler_init(lock_profile_t *profile)
{ {
profile->backtrace = backtrace_create(2); profile->backtrace = backtrace_create(2);
timerclear(&profile->waited); timerclear(&profile->waited);
profile->locked = 0;
} }
#define profiler_start(profile) { \ #define profiler_start(profile) { \
struct timeval _start, _end, _diff; \ struct timeval _start, _end, _diff; \
(profile)->locked++; \
time_monotonic(&_start); time_monotonic(&_start);
#define profiler_end(profile) \ #define profiler_end(profile) \