00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 #ifndef ACE_TIMEPROBE_H
00039 #define ACE_TIMEPROBE_H
00040 #include  "ace/pre.h"
00041 
00042 #include "ace/config-lite.h"
00043 #include  "ace/ACE_export.h"
00044 #include "ace/Malloc_Allocator.h"
00045 
00046 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00047 # pragma once
00048 #endif 
00049 
00050 
00051 #if defined (ACE_ENABLE_TIMEPROBES)
00052   #if !defined (ACE_COMPILE_TIMEPROBES)
00053     #define ACE_COMPILE_TIMEPROBES
00054   #endif 
00055 #endif 
00056 
00057 #if defined (ACE_COMPILE_TIMEPROBES)
00058 
00059 #include "ace/OS_NS_time.h"
00060 #include "ace/OS_NS_Thread.h"
00061 
00062 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00063 
00064 
00065 
00066 
00067 
00068 
00069 class ACE_Export ACE_Event_Descriptions
00070 {
00071 public:
00072 
00073   const char **descriptions_;
00074 
00075 
00076   u_long minimum_id_;
00077 
00078 
00079   bool operator== (const ACE_Event_Descriptions &rhs) const;
00080 };
00081 
00082 
00083 
00084 
00085 
00086 
00087 class ACE_Export ACE_timeprobe_t
00088 {
00089 public:
00090 
00091   union event
00092   {
00093     u_long event_number_;
00094     const char *event_description_;
00095   };
00096 
00097 
00098   enum event_type
00099   {
00100     NUMBER,
00101     STRING
00102   };
00103 
00104 
00105   event event_;
00106 
00107 
00108   event_type event_type_;
00109 
00110 
00111   ACE_hrtime_t time_;
00112 
00113 
00114   ACE_thread_t thread_;
00115 };
00116 
00117 ACE_END_VERSIONED_NAMESPACE_DECL
00118 
00119 #if defined (__ACE_INLINE__)
00120 #include "ace/Timeprobe.inl"
00121 #endif 
00122 
00123 #include "ace/Synch_Traits.h"
00124 #include "ace/Null_Mutex.h"
00125 #include "ace/Singleton.h"
00126 #include "ace/Timeprobe_T.h"
00127 
00128 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00129 
00130 
00131 
00132 
00133 #  if defined (ACE_MT_TIMEPROBES)
00134 typedef ACE_SYNCH_MUTEX ACE_TIMEPROBE_MUTEX;
00135 #  else 
00136 typedef ACE_SYNCH_NULL_MUTEX ACE_TIMEPROBE_MUTEX;
00137 #  endif 
00138 
00139 typedef ACE_New_Allocator ACE_TIMEPROBE_ALLOCATOR;
00140 
00141 typedef ACE_Timeprobe_Ex<ACE_TIMEPROBE_MUTEX, ACE_TIMEPROBE_ALLOCATOR>
00142         ACE_TIMEPROBE_WITH_LOCKING;
00143 
00144 
00145 
00146 
00147 
00148 
00149 #  if defined (ACE_TSS_TIMEPROBES)
00150 #    define ACE_TIMEPROBE_SINGLETON_TYPE ACE_TSS_Singleton
00151 #    define ACE_TIMEPROBE_SINGLETON_LOCK_TYPE ACE_SYNCH_NULL_MUTEX
00152 #  else 
00153 #    define ACE_TIMEPROBE_SINGLETON_TYPE ACE_Singleton
00154 #    define ACE_TIMEPROBE_SINGLETON_LOCK_TYPE ACE_SYNCH_MUTEX
00155 #  endif 
00156 
00157 ACE_SINGLETON_DECLARE (ACE_TIMEPROBE_SINGLETON_TYPE, \
00158                        ACE_TIMEPROBE_WITH_LOCKING,   \
00159                        ACE_TIMEPROBE_SINGLETON_LOCK_TYPE)
00160 
00161 typedef ACE_TIMEPROBE_SINGLETON_TYPE<ACE_TIMEPROBE_WITH_LOCKING, ACE_TIMEPROBE_SINGLETON_LOCK_TYPE>
00162         ACE_TIMEPROBE_SINGLETON;
00163 
00164 ACE_END_VERSIONED_NAMESPACE_DECL
00165 
00166 #endif 
00167 
00168 
00169 
00170 
00171 #if defined (ACE_ENABLE_TIMEPROBES) && defined (ACE_COMPILE_TIMEPROBES)
00172 
00173 #  define ACE_TIMEPROBE_RESET ACE_TIMEPROBE_SINGLETON::instance ()->reset ()
00174 
00175 #  define ACE_TIMEPROBE(id) ACE_TIMEPROBE_SINGLETON::instance ()->timeprobe (id)
00176 
00177 #  define ACE_TIMEPROBE_PRINT ACE_TIMEPROBE_SINGLETON::instance ()->print_times ()
00178 
00179 #  define ACE_TIMEPROBE_PRINT_ABSOLUTE ACE_TIMEPROBE_SINGLETON::instance ()->print_absolute_times ()
00180 
00181 #  define ACE_TIMEPROBE_EVENT_DESCRIPTIONS(descriptions, minimum_id) \
00182 static int ace_timeprobe_##descriptions##_return = \
00183   ACE_TIMEPROBE_SINGLETON::instance ()->event_descriptions \
00184     (descriptions, minimum_id)
00185 
00186 #  define ACE_FUNCTION_TIMEPROBE(X) \
00187   ACE_Function_Timeprobe<ACE_TIMEPROBE_WITH_LOCKING> function_timeprobe \
00188     (*ACE_TIMEPROBE_SINGLETON::instance (), X)
00189 
00190 #else 
00191 
00192 #  define ACE_TIMEPROBE_RESET
00193 #  define ACE_TIMEPROBE(id)
00194 #  define ACE_TIMEPROBE_PRINT
00195 #  define ACE_TIMEPROBE_PRINT_ABSOLUTE
00196 #  define ACE_TIMEPROBE_EVENT_DESCRIPTIONS(descriptions, minimum_id)
00197 #  define ACE_FUNCTION_TIMEPROBE(X)
00198 
00199 #endif 
00200 #include  "ace/post.h"
00201 #endif