/usr/include/ace/Metrics_Cache_T.h is in libace-dev 6.0.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | // -*- C++ -*-
//=============================================================================
/**
* @file Metrics_Cache_T.h
*
* $Id: Metrics_Cache_T.h 92090 2010-09-29 14:10:45Z johnnyw $
*
* @author Chris Gill <cdgill@cse.wustl.edu>
*/
//=============================================================================
#ifndef ACE_METRICS_CACHE_T_H
#define ACE_METRICS_CACHE_T_H
#include /**/ "ace/config-all.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
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
/**
* @class ACE_Metrics_Timeprobe
*
* @brief This class implements a timeprobe for use in a Metrics framework.
*
* This class provides a probe for specific thread and method call
* metrics timing points.
*/
template <class ACE_LOCK, class ALLOCATOR>
class ACE_Metrics_Timeprobe :
public ACE_Timeprobe_Ex<ACE_LOCK, ALLOCATOR>
{
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;
// Enumerated timeprobe event types.
enum event_id
{
WORK_START = 0,
WORK_STOP = 1,
WORK_SUSPEND = 2,
WORK_RESUME = 3
};
/// Default constructor: plugs in the above event descriptions.
ACE_Metrics_Timeprobe (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.
ACE_Metrics_Timeprobe (ALLOCATOR *allocatorPtr,
u_int id = 0,
const char *name = 0,
u_long size = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE);
/// Destructor.
virtual ~ACE_Metrics_Timeprobe ();
/// Returns true if a timeprobe event matches the passed id.
int is_event (const ACE_METRICS_TIMEPROBE_DATA_TYPE &t,
ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR>::event_id id);
/// Accessor and mutator for probe name.
const char * probe_name (void);
void probe_name (char * name);
/// Accessor for probe id.
u_int probe_id (void);
/// Mutator for probe id.
void probe_id (u_int id);
/// Flush the ACE metrics timeprobe into shared memory.
void flush_ACE_Metrics_Timeprobe ();
protected:
/// Identifier for the timeprobe.
u_int id_;
/// Name of the timeprobe.
char* name_;
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> &);
};
/**
* @class ACE_Metrics_Cache
*
* @brief This class implements a cache for metrics timeprobe data.
*
* This class allows probes to be recorded into a single cache that
* monitors and other higher level metrics classes can query.
*/
template <class ACE_LOCK, class ALLOCATOR>
class ACE_Metrics_Cache
{
public:
typedef ACE_Metrics_Cache <ACE_LOCK, ALLOCATOR> ACE_METRICS_CACHE_TYPE;
/// Default constructor.
ACE_Metrics_Cache (u_long table_size
= METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE,
u_long number_of_probes
= METRICS_DEFAULT_TIMEPROBE_COUNT,
ALLOCATOR * allocatorPtr = (ALLOCATOR*)ALLOCATOR::instance());
/// Destructor.
~ACE_Metrics_Cache ();
// = Dispatching metrics.
/// Report start, stop, suspend, and resume times of a dispatch
/// enqueue: stores data metrics on the supplier side.
void report_enqueue_start (u_long i);
void report_enqueue_stop (u_long i);
void report_enqueue_suspend (u_long i);
void report_enqueue_resume (u_long i);
/// Report start, stop, suspend, and resume times of a dispatch
/// dequeue: stores data metrics on the supplier side..
void report_dequeue_start (u_long i);
void report_dequeue_stop (u_long i);
void report_dequeue_suspend (u_long i);
void report_dequeue_resume (u_long i);
/// Reset the metrics data on the consumer side.
void reset_base_statistics ();
/// Flips the supplier and consumer sides.
void flip_supplier_and_consumer ();
/// Flush the ACE metrics cache into shared memory.
void flush_ACE_Metrics_Cache ();
/// Set the enable state for metrics collection.
void metrics_enabled(int enabled);
/// Return the enable state for metrics collection.
int metrics_enabled(void) const;
protected:
/// 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.
ALLOCATOR * allocator (void);
// = Implementation members.
/// Number of probes in each supplier/consumer set.
u_long probe_set_size_;
/// Probe data counts for each supplier/consumer set.
u_long * enqueue_count_ [2];
u_long * dequeue_count_ [2];
/// Probes for each supplier/consumer set.
ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR> ** enqueue_probes_ [2];
ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR> ** dequeue_probes_ [2];
/// Names for the probes.
char ** enqueue_names_;
char ** dequeue_names_;
/// Index from which probe events are being consumed.
/// for WSOA, it's the data being sent to the logger
int consumer_index_;
/// Index to which probe events are being supplied.
/// for WSOA, it's the data being recorded from the probes
int supplier_index_;
/// Size of the timestamp table in each probe.
u_long table_size_;
/// Interval start and stop timestamps.
ACE_Time_Value interval_start_;
/// Interval start and stop timestamps.
ACE_Time_Value interval_end_;
/// Flag to indicate whether or not start time of interval has been
/// initialized since the last reset.
int interval_initialized_;
/// Indicator of whether metrics is enabled.
int metrics_enabled_;
private:
/// Allocation strategy object.
ALLOCATOR* allocator_;
// Declare but do not define.
ACE_Metrics_Cache (const ACE_Metrics_Cache<ACE_LOCK, ALLOCATOR> &);
void operator = (const ACE_Metrics_Cache<ACE_LOCK, ALLOCATOR> &);
};
ACE_END_VERSIONED_NAMESPACE_DECL
#if defined (__ACE_INLINE__)
#include "ace/Metrics_Cache_T.inl"
#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 /* ACE_METRICS_CACHE_T_H */
|