00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef INCLUDED_THREAD_LOCKSTATISTICS_HH
00025 #define INCLUDED_THREAD_LOCKSTATISTICS_HH
00026
00027 #ifndef INCLUDED_THREAD_LOCKSTATISTICSFWD_HH
00028 #include "LockStatisticsFwd.hh"
00029 #endif
00030
00031 #ifndef POSIX_TIMERFWD_HH
00032 #include "POSIX/timerFwd.hh"
00033 #endif
00034
00035 #ifndef INCLUDED_THREAD_LOCKFWD_HH
00036 #include "LockFwd.hh"
00037 #endif
00038
00039 #include <iosfwd>
00040
00041 namespace fatalmind {
00042
00043 class LockUsageStatistics {
00044 public:
00045 inline LockUsageStatistics()
00046 : _lock(0)
00047 , _reclev(0)
00048 , _maxreclev(0)
00049 {
00050 }
00051
00052 inline void stat_lock() {
00053 ++_lock;
00054 ++_reclev;
00055 }
00056
00057 inline void stat_unlock() {
00058 if (_reclev > _maxreclev) {
00059 _maxreclev = _reclev;
00060 }
00061 --_reclev;
00062 }
00063
00064 friend std::ostream& operator<<(std::ostream& o, const LockUsageStatistics& s);
00065 private:
00066 int _lock;
00067 int _reclev;
00068 int _maxreclev;
00069 };
00070
00071 }
00072
00073 #ifndef POSIX_TIME_HH
00074 #include "POSIX/time.hh"
00075 #endif
00076
00077 namespace fatalmind {
00078
00079 class LockTimingStatistics {
00080 public:
00081 inline LockTimingStatistics()
00082 : _waittime()
00083 {};
00084 typedef timer<MultiThreadedModel<LockStatistics<NopLockUsageStatistics,NopLockTimingStatistics> >, SingleThreadedModel<LockStatistics<NopLockUsageStatistics, NopLockTimingStatistics> > > _timer_t;
00085 POSIX::timespec<MultiThreadedModel<LockStatistics<NopLockUsageStatistics, NopLockTimingStatistics> > > _waittime;
00086 friend
00087 std::ostream& operator<<(std::ostream& o, const LockTimingStatistics& s);
00088 };
00089
00090 }
00091
00092 #endif