seanhalle@208: /* seanhalle@208: * Copyright 2009 OpenSourceStewardshipFoundation.org seanhalle@208: * Licensed under GNU General Public License version 2 seanhalle@208: * seanhalle@208: * Author: seanhalle@yahoo.com seanhalle@208: * seanhalle@208: */ seanhalle@208: seanhalle@208: #ifndef _PROBES_H seanhalle@208: #define _PROBES_H seanhalle@208: #define _GNU_SOURCE seanhalle@208: seanhalle@208: #include "VMS_primitive_data_types.h" seanhalle@208: seanhalle@208: #include seanhalle@208: seanhalle@208: /*Note on order of include files: seanhalle@208: * This file relies on #defines that appear in other files.. seanhalle@208: */ seanhalle@208: seanhalle@208: seanhalle@208: //typedef struct _IntervalProbe IntervalProbe; //in VMS.h seanhalle@208: seanhalle@208: struct _IntervalProbe seanhalle@208: { seanhalle@208: char *nameStr; seanhalle@208: int32 probeID; seanhalle@208: seanhalle@208: int32 schedChoiceWasRecorded; seanhalle@208: int32 coreNum; seanhalle@208: int32 procrID; seanhalle@208: float64 procrCreateSecs; seanhalle@208: seanhalle@208: #ifdef STATS__USE_TSC_PROBES seanhalle@208: TSCount startStamp; seanhalle@208: TSCount endStamp; seanhalle@208: #else seanhalle@208: struct timeval startStamp; seanhalle@208: struct timeval endStamp; seanhalle@208: #endif seanhalle@208: float64 startSecs; seanhalle@208: float64 endSecs; seanhalle@208: float64 interval; seanhalle@208: DblHist *hist;//if NULL, then is single interval probe seanhalle@208: }; seanhalle@208: seanhalle@208: seanhalle@208: seanhalle@208: //======================== Probes ============================= seanhalle@208: // seanhalle@208: // Use macros to allow turning probes off with a #define switch seanhalle@208: #ifdef STATS__ENABLE_PROBES seanhalle@208: int32 seanhalle@208: VMS_impl__record_time_point_into_new_probe( char *nameStr,SlaveVP *animPr); seanhalle@208: #define VMS__record_time_point_into_new_probe( nameStr, animPr ) \ seanhalle@208: VMS_impl__record_time_point_in_new_probe( nameStr, animPr ) seanhalle@208: seanhalle@208: int32 seanhalle@208: VMS_ext_impl__record_time_point_into_new_probe( char *nameStr ); seanhalle@208: #define VMS_ext__record_time_point_into_new_probe( nameStr ) \ seanhalle@208: VMS_ext_impl__record_time_point_into_new_probe( nameStr ) seanhalle@208: seanhalle@208: seanhalle@208: int32 seanhalle@208: VMS_impl__create_single_interval_probe( char *nameStr, SlaveVP *animPr ); seanhalle@208: #define VMS__create_single_interval_probe( nameStr, animPr ) \ seanhalle@208: VMS_impl__create_single_interval_probe( nameStr, animPr ) seanhalle@208: seanhalle@208: seanhalle@208: int32 seanhalle@208: VMS_impl__create_histogram_probe( int32 numBins, float64 startValue, seanhalle@208: float64 binWidth, char *nameStr, SlaveVP *animPr ); seanhalle@208: #define VMS__create_histogram_probe( numBins, startValue, \ seanhalle@208: binWidth, nameStr, animPr ) \ seanhalle@208: VMS_impl__create_histogram_probe( numBins, startValue, \ seanhalle@208: binWidth, nameStr, animPr ) seanhalle@208: void seanhalle@208: VMS_impl__free_probe( IntervalProbe *probe ); seanhalle@208: #define VMS__free_probe( probe ) \ seanhalle@208: VMS_impl__free_probe( probe ) seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__index_probe_by_its_name( int32 probeID, SlaveVP *animPr ); seanhalle@208: #define VMS__index_probe_by_its_name( probeID, animPr ) \ seanhalle@208: VMS_impl__index_probe_by_its_name( probeID, animPr ) seanhalle@208: seanhalle@208: IntervalProbe * seanhalle@208: VMS_impl__get_probe_by_name( char *probeName, SlaveVP *animPr ); seanhalle@208: #define VMS__get_probe_by_name( probeID, animPr ) \ seanhalle@208: VMS_impl__get_probe_by_name( probeName, animPr ) seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__record_sched_choice_into_probe( int32 probeID, SlaveVP *animPr ); seanhalle@208: #define VMS__record_sched_choice_into_probe( probeID, animPr ) \ seanhalle@208: VMS_impl__record_sched_choice_into_probe( probeID, animPr ) seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__record_interval_start_in_probe( int32 probeID ); seanhalle@208: #define VMS__record_interval_start_in_probe( probeID ) \ seanhalle@208: VMS_impl__record_interval_start_in_probe( probeID ) seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__record_interval_end_in_probe( int32 probeID ); seanhalle@208: #define VMS__record_interval_end_in_probe( probeID ) \ seanhalle@208: VMS_impl__record_interval_end_in_probe( probeID ) seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__print_stats_of_probe( int32 probeID ); seanhalle@208: #define VMS__print_stats_of_probe( probeID ) \ seanhalle@208: VMS_impl__print_stats_of_probe( probeID ) seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__print_stats_of_all_probes(); seanhalle@208: #define VMS__print_stats_of_all_probes() \ seanhalle@208: VMS_impl__print_stats_of_all_probes() seanhalle@208: seanhalle@208: seanhalle@208: #else seanhalle@208: int32 seanhalle@208: VMS_impl__record_time_point_into_new_probe( char *nameStr,SlaveVP *animPr); seanhalle@208: #define VMS__record_time_point_into_new_probe( nameStr, animPr ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: int32 seanhalle@208: VMS_ext_impl__record_time_point_into_new_probe( char *nameStr ); seanhalle@208: #define VMS_ext__record_time_point_into_new_probe( nameStr ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: seanhalle@208: int32 seanhalle@208: VMS_impl__create_single_interval_probe( char *nameStr, SlaveVP *animPr ); seanhalle@208: #define VMS__create_single_interval_probe( nameStr, animPr ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: seanhalle@208: int32 seanhalle@208: VMS_impl__create_histogram_probe( int32 numBins, float64 startValue, seanhalle@208: float64 binWidth, char *nameStr, SlaveVP *animPr ); seanhalle@208: #define VMS__create_histogram_probe( numBins, startValue, \ seanhalle@208: binWidth, nameStr, animPr ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__index_probe_by_its_name( int32 probeID, SlaveVP *animPr ); seanhalle@208: #define VMS__index_probe_by_its_name( probeID, animPr ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@208: IntervalProbe * seanhalle@208: VMS_impl__get_probe_by_name( char *probeName, SlaveVP *animPr ); seanhalle@208: #define VMS__get_probe_by_name( probeID, animPr ) \ seanhalle@208: NULL /* do nothing */ seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__record_sched_choice_into_probe( int32 probeID, SlaveVP *animPr ); seanhalle@208: #define VMS__record_sched_choice_into_probe( probeID, animPr ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__record_interval_start_in_probe( int32 probeID ); seanhalle@208: #define VMS__record_interval_start_in_probe( probeID ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__record_interval_end_in_probe( int32 probeID ); seanhalle@208: #define VMS__record_interval_end_in_probe( probeID ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@208: inline void doNothing(); seanhalle@208: void seanhalle@208: VMS_impl__print_stats_of_probe( int32 probeID ); seanhalle@208: #define VMS__print_stats_of_probe( probeID ) \ seanhalle@208: doNothing/* do nothing */ seanhalle@208: seanhalle@208: void seanhalle@208: VMS_impl__print_stats_of_all_probes(); seanhalle@208: #define VMS__print_stats_of_all_probes \ seanhalle@208: doNothing/* do nothing */ seanhalle@208: seanhalle@208: #endif /* defined STATS__ENABLE_PROBES */ seanhalle@208: seanhalle@208: #endif /* _PROBES_H */ seanhalle@208: