Abstract value profiler. More...
#include <kanzi/core/profiling/abstract_value_profiler.hpp>
Public Types | |
typedef function< void(AbstractValueProfiler &) | FullBufferCallback) |
The typedef used for full buffer callback. | |
typedef weak_ptr< void > | FullBufferCallbackHandle |
The typedef used for full buffer callback handle. | |
Public Types inherited from kanzi::AbstractProfiler | |
enum | DataType { DataTypeNotDefined , DataTypeBoolean , DataTypeUint64 , DataTypeFloat , DataTypeString , DataTypeCount } |
Supported profiling data field value types. More... | |
typedef variant< monostate, bool, uint64_t, float, string > | Value |
Container for profiling data field value. | |
Public Member Functions | |
FullBufferCallbackHandle | addFullBufferCallback (FullBufferCallback callback) |
Adds a new full buffer callback. | |
void | removeFullBufferCallback (const FullBufferCallbackHandle &callbackHandle) |
Removes a full buffer callback. | |
void | resetSampleData () |
Resets the aggregate profiling data and sample buffer. | |
Public Member Functions inherited from kanzi::AbstractProfiler | |
size_t | getAggregateDataFieldCount () const |
Gets the number of aggregate data fields. | |
string | getAggregateDataFieldName (size_t fieldIndex) const |
Gets the name of an aggregate data field. | |
Value | getAggregateDataFieldValue (size_t fieldIndex) const |
Gets the value of an aggregate profiling data field. | |
const ProfilingCategory & | getCategory () const |
Gets a reference to the profiling category assigned to the profiler. | |
string_view | getName () const |
Gets the name of the profiler. | |
size_t | getSampleCount () const |
Gets the number of collected profiling data samples. | |
size_t | getSampleFieldCount () const |
Gets the number of sample data fields. | |
DataType | getSampleFieldDataType (size_t fieldIndex) const |
Gets the data type of a data sample field. | |
string | getSampleFieldName (size_t fieldIndex) const |
Gets the name of a data sample field. | |
Value | getSampleFieldValue (size_t sampleIndex, size_t fieldIndex) const |
Gets the value of a profiling data sample field. | |
void | logAggregateData () const |
Logs aggregate profiling data. | |
void | logAllData () const |
Logs all profiling data. | |
virtual | ~AbstractProfiler () |
Destructor. | |
Protected Types | |
typedef TAggregateProfilingData | AggregateProfilingDataType |
The aggregate profiling data type typedef used in derived classes. | |
typedef vector< FullBufferCallbackSharedPtr > | FullBufferCallbackContainer |
The typedef used for container of full buffer callback shared pointers. | |
typedef shared_ptr< FullBufferCallback > | FullBufferCallbackSharedPtr |
The typedef used for shared pointer to full buffer callback. | |
typedef TProfilingDataSample | SampleDataType |
The sample data type typedef used in derived classes. | |
Protected Member Functions | |
AbstractValueProfiler (string_view name, const ProfilingCategory &category, size_t sampleBufferSize) | |
Constructor. | |
void | addSample (const TProfilingDataSample &sample) |
Adds a new profiling data sample. | |
void | addSample (TProfilingDataSample &&sample) |
Adds a new movable profiling data sample to the profiler. | |
void | checkBufferFull () |
Performs all buffer full callbacks and clears samples if buffer is full. | |
const TProfilingDataSample & | getSample (size_t index) const |
Accesses a profiling data sample stored in the sample buffer. | |
size_t | getSampleCountOverride () const override |
Override of AbstractProfiler::getSampleCountOverride(). | |
void | resetSampleBufferSize (size_t sampleBufferSize) |
Resets the size of the sample buffer. | |
Protected Member Functions inherited from kanzi::AbstractProfiler | |
AbstractProfiler (string_view name, const ProfilingCategory &category) | |
Constructor. | |
virtual size_t | getAggregateDataFieldCountOverride () const =0 |
To provide the number of the aggregate data fields, override this function in the derived profiler class. | |
virtual string | getAggregateDataFieldNameOverride (size_t fieldIndex) const =0 |
To provide the name of aggregate data field with given index, override this function in the derived profiler class. | |
virtual Value | getAggregateDataFieldValueOverride (size_t fieldIndex) const =0 |
To provide access to aggregate profiling data field values, override this function in the derived profiler class. | |
virtual size_t | getSampleFieldCountOverride () const =0 |
To provide the number of sample fields, override this function in the derived profiler class. | |
virtual DataType | getSampleFieldDataTypeOverride (size_t fieldIndex) const =0 |
To provide the data type of a sample field with a given index, override this function in the derived profiler class. | |
virtual string | getSampleFieldNameOverride (size_t fieldIndex) const =0 |
To provide the name of a sample field with a given index, override this function in the derived profiler class. | |
virtual Value | getSampleFieldValueOverride (size_t sampleIndex, size_t fieldIndex) const =0 |
To provide access to profiling data sample fields of the derived profiler, override this function in the derived profiler class. | |
virtual void | logAggregateDataOverride () const |
To implement your own logging of aggregate profiling data, override this function in the derived profiler class. | |
virtual void | logAllDataOverride () const |
To implement your own logging of all profiling data, override this function in the derived profiler class. | |
Static Protected Member Functions | |
static void | invokeBufferFullCallback (AbstractValueProfiler &profiler, FullBufferCallbackSharedPtr &callback) |
Internal helper function used by checkBufferFull. | |
Protected Attributes | |
TAggregateProfilingData | m_aggregateProfilingData |
The aggregate profiling data. | |
FullBufferCallbackContainer | m_fullBufferCallbacks |
The container of buffer full callbacks. | |
circular_buffer< TProfilingDataSample > | m_sampleBuffer |
The profiling data sample buffer. | |
Additional Inherited Members | |
Static Public Member Functions inherited from kanzi::AbstractProfiler | |
static DataType | getDataType (const Value &value) |
Gets the type of the data stored in a profiling data field. | |
Abstract value profiler.
Derive from AbstractValueProfiler to implement your own profiler which uses a circular buffer to store profiling samples.
The AbstractValueProfiler is a template class which stores profiling data samples of arbitrary type in a circular sample buffer. When the circular buffer runs out of space, new samples overwrite the oldest samples. The size of the sample buffer is set in constructor AbstractValueProfiler::AbstractValueProfiler().
To add a new sample to the profiler use the addSample() function in the derived class. To get a sample reference use the getSample() function in the derived class.
The AbstractValueProfiler provides a placeholder for arbitrary aggregate profiling data. You can access aggregate profiling data from the derived class through m_aggregateProfilingData.
Since internal circular buffer of samples can overflow, callbacks compatible with FullBufferCallback can be added and get called after the addSample() which completely fills the buffer. In case there are callbacks, after invoking all of them, the buffer is cleared. To add a callback use addFullBufferCallback() and to remove use removeFullBufferCallback().
Example:
See base class AbstractProfiler on how to extract profiler samples.
typedef function<void(AbstractValueProfiler&) kanzi::AbstractValueProfiler< TProfilingDataSample, TAggregateProfilingData >::FullBufferCallback) |
The typedef used for full buffer callback.
typedef weak_ptr<void> kanzi::AbstractValueProfiler< TProfilingDataSample, TAggregateProfilingData >::FullBufferCallbackHandle |
The typedef used for full buffer callback handle.
|
protected |
The sample data type typedef used in derived classes.
|
protected |
The aggregate profiling data type typedef used in derived classes.
|
protected |
The typedef used for shared pointer to full buffer callback.
|
protected |
The typedef used for container of full buffer callback shared pointers.
|
inlineexplicitprotected |
Constructor.
name | The name of the profiler. |
category | The profiling category assigned to the profiler. |
sampleBufferSize | The maximum size of the sample buffer. |
|
inline |
Adds a new full buffer callback.
callback | A full buffer callback. |
|
inline |
Removes a full buffer callback.
callbackHandle | Handle to the callback, returned from addFullBufferCallback |
|
inline |
Resets the aggregate profiling data and sample buffer.
|
inlineprotected |
Resets the size of the sample buffer.
sampleBufferSize | Size of the sample buffer. |
|
inlineprotected |
Accesses a profiling data sample stored in the sample buffer.
The sample buffer is zero-based, meaning that oldest sample is stored at index 0.
index | The index of the sample. |
|
inlinestaticprotected |
Internal helper function used by checkBufferFull.
|
inlineprotected |
Performs all buffer full callbacks and clears samples if buffer is full.
|
inlineprotected |
Adds a new profiling data sample.
sample | The profiling data sample. |
|
inlineprotected |
Adds a new movable profiling data sample to the profiler.
sample | The profiling data sample. |
|
inlineoverrideprotectedvirtual |
Override of AbstractProfiler::getSampleCountOverride().
Implements kanzi::AbstractProfiler.
|
protected |
The aggregate profiling data.
|
protected |
The container of buffer full callbacks.
|
protected |
The profiling data sample buffer.