summaryrefslogtreecommitdiff
path: root/ace/Metrics_Cache_T.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Metrics_Cache_T.h')
-rw-r--r--ace/Metrics_Cache_T.h225
1 files changed, 225 insertions, 0 deletions
diff --git a/ace/Metrics_Cache_T.h b/ace/Metrics_Cache_T.h
new file mode 100644
index 00000000000..f686d99d9cf
--- /dev/null
+++ b/ace/Metrics_Cache_T.h
@@ -0,0 +1,225 @@
+// $Id$
+
+#ifndef METRICS_CACHE_T_H
+#define METRICS_CACHE_T_H
+
+#include "ace/OS.h"
+
+// helpful macro definitions
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#if defined (ACE_COMPILE_TIMEPROBES)
+
+#include "ace/Timeprobe.h"
+#include "ace/Timeprobe_T.h"
+
+// Defaults for initializing timeprobes and timeprobe arays.
+#define METRICS_MIN_TIMEPROBE_TABLE_SIZE 256 * 4
+#define METRICS_MAX_TIMEPROBE_TABLE_SIZE 256 * 256
+#define METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE METRICS_MIN_TIMEPROBE_TABLE_SIZE
+#define METRICS_DEFAULT_TIMEPROBE_COUNT 6
+
+template <class ACE_LOCK, class ALLOCATOR>
+class ACE_Metrics_Timeprobe :
+ public ACE_Timeprobe_Ex<ACE_LOCK, ALLOCATOR>
+ {
+ // = TITLE
+ // This class implements a timeprobe for use in a Metrics framework.
+ //
+ // = DESCRIPTION
+ // This class provides a probe for specific thread and method call
+ // metrics timing points.
+public:
+
+ typedef ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR>
+ ACE_METRICS_TIMEPROBE_TYPE;
+
+ typedef ACE_timeprobe_t ACE_METRICS_TIMEPROBE_DATA_TYPE;
+ typedef ACE_METRICS_TIMEPROBE_TYPE* ACE_METRICS_TIMEPROBE_BASED_PTR_TYPE;
+ typedef char* ACE_METRICS_NAME_BASED_PTR_TYPE;
+
+ enum event_id
+ {
+ WORK_START = 0,
+ WORK_STOP = 1,
+ WORK_SUSPEND = 2,
+ WORK_RESUME = 3
+ };
+ // Enumerated timeprobe event types.
+
+ ACE_Metrics_Timeprobe (u_int id = 0,
+ const char *name = 0,
+ u_long size = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE);
+ // Default constructor: plugs in the above event descriptions.
+
+ ACE_Metrics_Timeprobe (ALLOCATOR *allocatorPtr,
+ u_int id = 0,
+ const char *name = 0,
+ u_long size = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE);
+ // Constructor with allocator: plugs in the above event descriptions.
+
+ virtual ~ACE_Metrics_Timeprobe ();
+ // Destructor.
+
+ int is_event (const ACE_METRICS_TIMEPROBE_DATA_TYPE &t,
+ ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR>::event_id id);
+ // Returns true if a timeprobe event matches the passed id.
+
+ const char * probe_name (void);
+ void probe_name (char * name);
+ // Accessor and mutator for probe name.
+
+ u_int probe_id (void);
+ // Accessor for probe id.
+
+ void probe_id (u_int id);
+ // Mutator for probe id.
+
+ void flush_ACE_Metrics_Timeprobe ();
+ // Flush the ACE metrics timeprobe into shared memory.
+
+protected:
+
+ u_int id_;
+ // Identifier for the timeprobe.
+
+ char* name_;
+ // Name of the timeprobe.
+
+private:
+
+ // Declare but do not define.
+ ACE_Metrics_Timeprobe (const ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR> &);
+ void operator =(const ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR> &);
+};
+
+
+template <class ACE_LOCK, class ALLOCATOR>
+class ACE_Metrics_Cache
+{
+ // = TITLE
+ // This class implements a cache for metrics timeprobe data.
+ //
+ // = DESCRIPTION
+ // This class allows probes to be recorded into a single cache that
+ // monitors and other higher level metrics classes can query.
+public:
+
+ typedef ACE_Metrics_Cache <ACE_LOCK, ALLOCATOR> ACE_METRICS_CACHE_TYPE;
+
+ ACE_Metrics_Cache (u_long table_size
+ = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE,
+ u_long number_of_probes
+ = METRICS_DEFAULT_TIMEPROBE_COUNT,
+ ALLOCATOR * allocatorPtr = 0);
+ // Default constructor.
+
+ ~ACE_Metrics_Cache ();
+ // Destructor.
+
+ // = Dispatching metrics.
+
+ void report_enqueue_start (u_int i);
+ void report_enqueue_stop (u_int i);
+ void report_enqueue_suspend (u_int i);
+ void report_enqueue_resume (u_int i);
+ // Report start, stop, suspend, and resume times of a dispatch
+ // enqueue: stores data metrics on the supplier side.
+
+ void report_dequeue_start (u_int i);
+ void report_dequeue_stop (u_int i);
+ void report_dequeue_suspend (u_int i);
+ void report_dequeue_resume (u_int i);
+ // Report start, stop, suspend, and resume times of a dispatch
+ // dequeue: stores data metrics on the supplier side..
+
+ void reset_base_statistics ();
+ // Reset the metrics data on the consumer side.
+
+ void flip_supplier_and_consumer ();
+ // Flips the supplier and consumer sides.
+
+ void flush_ACE_Metrics_Cache ();
+ // Flush the ACE metrics cache into shared memory.
+
+ void metrics_enabled(int enabled);
+ // Set the enable state for metrics collection.
+
+ int metrics_enabled(void) const;
+ // Return the enable state for metrics collection.
+
+protected:
+
+ ALLOCATOR * allocator (void);
+ // Obtain an allocator pointer correctly thunked for the current
+ // address space. If there is no allocator stored in the instance,
+ // the singleton allocator in the current process is used.
+
+ // = Implementation members.
+
+ u_long probe_set_size_;
+ // Number of probes in each supplier/consumer set.
+
+ u_long * enqueue_count_ [2];
+ u_long * dequeue_count_ [2];
+ // Probe data counts for each supplier/consumer set.
+
+ ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR> ** enqueue_probes_ [2];
+ ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR> ** dequeue_probes_ [2];
+ // Probes for each supplier/consumer set.
+
+ char ** enqueue_names_;
+ char ** dequeue_names_;
+ // Names for the probes.
+
+ int consumer_index_;
+ // Index from which probe events are being consumed.
+ // for WSOA, it's the data being sent to the logger
+
+ int supplier_index_;
+ // Index to which probe events are being supplied.
+ // for WSOA, it's the data being recorded from the probes
+
+ u_long table_size_;
+ // Size of the timestamp table in each probe.
+
+ ACE_Time_Value interval_start_;
+ // Interval start and stop timestamps.
+
+ ACE_Time_Value interval_end_;
+ // Interval start and stop timestamps.
+
+ int interval_initialized_;
+ // Flag to indicate whether or not start time of interval has been
+ // initialized since the last reset.
+
+ int metrics_enabled_;
+ // Indicator of whether metrics is enabled.
+
+private:
+
+ ALLOCATOR* allocator_;
+ // Allocation strategy object.
+
+ // Declare but do not define.
+ ACE_Metrics_Cache (const ACE_Metrics_Cache<ACE_LOCK, ALLOCATOR> &);
+ void operator = (const ACE_Metrics_Cache<ACE_LOCK, ALLOCATOR> &);
+};
+
+#if defined (__ACE_INLINE__)
+#include "Metrics_Cache_T.i"
+#endif /* __ACE_INLINE__ */
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "ace/Metrics_Cache_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Metrics_Cache_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#endif /* defined (ACE_COMPILE_TIMEPROBES) */
+
+#endif /* METRICS_CACHE_T_H */