summaryrefslogtreecommitdiff
path: root/ACE/ace/Timeprobe.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/Timeprobe.h')
-rw-r--r--ACE/ace/Timeprobe.h201
1 files changed, 201 insertions, 0 deletions
diff --git a/ACE/ace/Timeprobe.h b/ACE/ace/Timeprobe.h
new file mode 100644
index 00000000000..4978fe45845
--- /dev/null
+++ b/ACE/ace/Timeprobe.h
@@ -0,0 +1,201 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Timeprobe.h
+ *
+ * $Id$
+ *
+ * @author Irfan Pyarali
+ *
+ * If users want to use time probes, the ACE_COMPILE_TIMEPROBES
+ * flag must be defined when compiling ACE. This can be achieved
+ * by doing one of the following:
+ *
+ * . Use make probe = 1, if you are using the make utility.
+ *
+ * . Define ACE_COMPILE_TIMEPROBES in config.h
+ *
+ * . Define ACE_COMPILE_TIMEPROBES in the VC project file.
+ *
+ * . Other regular methods will also work.
+ *
+ * It is not necessary to define ACE_COMPILE_TIMEPROBES when using
+ * time probes, you simply need ACE_ENABLE_TIMEPROBES. You can use
+ * the ACE_TIMEPROBE_* macros to program the time probes, and use
+ * the ACE_ENABLE_TIMEPROBE to enable the time probes. If you
+ * define ACE_ENABLE_TIMEPROBE in your code, but forget to compile
+ * ACE with ACE_COMPILE_TIMEPROBES, you will end up with linker
+ * errors.
+ *
+ * Remember that ACE_COMPILE_TIMEPROBES means that the ACE library
+ * will contain code for time probes. This is only useful when
+ * compiling ACE. ACE_ENABLE_TIMEPROBES means that the
+ * ACE_TIMEPROBE_* macros should spring to life.
+ */
+//=============================================================================
+
+#ifndef ACE_TIMEPROBE_H
+#define ACE_TIMEPROBE_H
+#include /**/ "ace/pre.h"
+
+#include "ace/config-lite.h"
+#include /**/ "ace/ACE_export.h"
+#include "ace/Malloc_Allocator.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+/* Enable ACE Timeprobes */
+#if defined (ACE_ENABLE_TIMEPROBES)
+ #if !defined (ACE_COMPILE_TIMEPROBES)
+ #define ACE_COMPILE_TIMEPROBES
+ #endif /* ACE_COMPILE_TIMEPROBES */
+#endif /* ACE_ENABLE_TIMEPROBES */
+
+#if defined (ACE_COMPILE_TIMEPROBES)
+
+#include "ace/OS_NS_time.h"
+#include "ace/OS_NS_Thread.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class ACE_Event_Descriptions
+ *
+ * @brief Event Descriptions.
+ */
+class ACE_Export ACE_Event_Descriptions
+{
+public:
+ /// Event descriptions
+ const char **descriptions_;
+
+ /// Minimum id of this description set
+ u_long minimum_id_;
+
+ /// Comparison
+ bool operator== (const ACE_Event_Descriptions &rhs) const;
+};
+
+/**
+ * @class ACE_timeprobe_t
+ *
+ * @brief Time probe record.
+ */
+class ACE_Export ACE_timeprobe_t
+{
+public:
+ /// Events are record as strings or numbers.
+ union event
+ {
+ u_long event_number_;
+ const char *event_description_;
+ };
+
+ /// Type of event.
+ enum event_type
+ {
+ NUMBER,
+ STRING
+ };
+
+ /// Event.
+ event event_;
+
+ /// Type of event.
+ event_type event_type_;
+
+ /// Timestamp.
+ ACE_hrtime_t time_;
+
+ /// Id of thread posting the time probe.
+ ACE_thread_t thread_;
+};
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (__ACE_INLINE__)
+#include "ace/Timeprobe.inl"
+#endif /* __ACE_INLINE__ */
+
+#include "ace/Synch_Traits.h"
+#include "ace/Null_Mutex.h"
+#include "ace/Singleton.h"
+#include "ace/Timeprobe_T.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// If ACE_MT_TIMEPROBES is defined, use a Thread_Mutex to lock the
+// internal state of ACE_Timerprobe. This allows multiple threads to
+// use the same ACE_Timerprobe.
+# if defined (ACE_MT_TIMEPROBES)
+typedef ACE_SYNCH_MUTEX ACE_TIMEPROBE_MUTEX;
+# else /* ACE_MT_TIMEPROBES */
+typedef ACE_SYNCH_NULL_MUTEX ACE_TIMEPROBE_MUTEX;
+# endif /* ACE_MT_TIMEPROBES */
+
+typedef ACE_New_Allocator ACE_TIMEPROBE_ALLOCATOR;
+
+typedef ACE_Timeprobe_Ex<ACE_TIMEPROBE_MUTEX, ACE_TIMEPROBE_ALLOCATOR>
+ ACE_TIMEPROBE_WITH_LOCKING;
+
+// If ACE_TSS_TIMEPROBES is defined, store the ACE_Timeprobe singleton
+// in thread specific storage. This allows multiple threads to use
+// their own instance of ACE_Timerprobe, without interfering with each
+// other.
+
+# if defined (ACE_TSS_TIMEPROBES)
+# define ACE_TIMEPROBE_SINGLETON_TYPE ACE_TSS_Singleton
+# define ACE_TIMEPROBE_SINGLETON_LOCK_TYPE ACE_SYNCH_NULL_MUTEX
+# else /* ACE_TSS_TIMEPROBES */
+# define ACE_TIMEPROBE_SINGLETON_TYPE ACE_Singleton
+# define ACE_TIMEPROBE_SINGLETON_LOCK_TYPE ACE_SYNCH_MUTEX
+# endif /* ACE_TSS_TIMEPROBES */
+
+ACE_SINGLETON_DECLARE (ACE_TIMEPROBE_SINGLETON_TYPE, \
+ ACE_TIMEPROBE_WITH_LOCKING, \
+ ACE_TIMEPROBE_SINGLETON_LOCK_TYPE)
+
+typedef ACE_TIMEPROBE_SINGLETON_TYPE<ACE_TIMEPROBE_WITH_LOCKING, ACE_TIMEPROBE_SINGLETON_LOCK_TYPE>
+ ACE_TIMEPROBE_SINGLETON;
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* ACE_COMPILE_TIMEPROBES */
+
+// If ACE_ENABLE_TIMEPROBES is defined, the macros below will
+// work. Otherwise, they just vanish. Using this macro, you can
+// control which files/libraries are probed.
+#if defined (ACE_ENABLE_TIMEPROBES) && defined (ACE_COMPILE_TIMEPROBES)
+
+# define ACE_TIMEPROBE_RESET ACE_TIMEPROBE_SINGLETON::instance ()->reset ()
+
+# define ACE_TIMEPROBE(id) ACE_TIMEPROBE_SINGLETON::instance ()->timeprobe (id)
+
+# define ACE_TIMEPROBE_PRINT ACE_TIMEPROBE_SINGLETON::instance ()->print_times ()
+
+# define ACE_TIMEPROBE_PRINT_ABSOLUTE ACE_TIMEPROBE_SINGLETON::instance ()->print_absolute_times ()
+
+# define ACE_TIMEPROBE_EVENT_DESCRIPTIONS(descriptions, minimum_id) \
+static int ace_timeprobe_##descriptions##_return = \
+ ACE_TIMEPROBE_SINGLETON::instance ()->event_descriptions \
+ (descriptions, minimum_id)
+
+# define ACE_FUNCTION_TIMEPROBE(X) \
+ ACE_Function_Timeprobe<ACE_TIMEPROBE_WITH_LOCKING> function_timeprobe \
+ (*ACE_TIMEPROBE_SINGLETON::instance (), X)
+
+#else /* ACE_ENABLE_TIMEPROBES && ACE_COMPILE_TIMEPROBES */
+
+# define ACE_TIMEPROBE_RESET
+# define ACE_TIMEPROBE(id)
+# define ACE_TIMEPROBE_PRINT
+# define ACE_TIMEPROBE_PRINT_ABSOLUTE
+# define ACE_TIMEPROBE_EVENT_DESCRIPTIONS(descriptions, minimum_id)
+# define ACE_FUNCTION_TIMEPROBE(X)
+
+#endif /* ACE_ENABLE_TIMEPROBES && ACE_COMPILE_TIMEPROBES */
+#include /**/ "ace/post.h"
+#endif /* ACE_TIMEPROBE_H */