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@209: int32 slaveID; seanhalle@209: float64 slaveCreateSecs; seanhalle@208: seanhalle@209: // #ifdef STATS__USE_TSC_PROBES seanhalle@208: TSCount startStamp; seanhalle@208: TSCount endStamp; seanhalle@209: // #else seanhalle@209: // struct timeval startStamp; seanhalle@209: // struct timeval endStamp; seanhalle@209: // #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@209: int32 seanhalle@209: VMS_impl__create_single_interval_probe( char *nameStr, SlaveVP *animSlv ); seanhalle@209: seanhalle@209: int32 seanhalle@209: VMS_impl__create_histogram_probe( int32 numBins, float64 startValue, seanhalle@209: float64 binWidth, char *nameStr, SlaveVP *animSlv ); seanhalle@209: seanhalle@209: int32 seanhalle@209: VMS_impl__record_time_point_into_new_probe( char *nameStr, SlaveVP *animSlv); seanhalle@209: seanhalle@209: int32 seanhalle@209: VMS_ext_impl__record_time_point_into_new_probe( char *nameStr ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__free_probe( IntervalProbe *probe ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__index_probe_by_its_name( int32 probeID, SlaveVP *animSlv ); seanhalle@209: seanhalle@209: IntervalProbe * seanhalle@209: VMS_impl__get_probe_by_name( char *probeName, SlaveVP *animSlv ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__record_sched_choice_into_probe( int32 probeID, SlaveVP *animSlv ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__record_interval_start_in_probe( int32 probeID ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__record_interval_end_in_probe( int32 probeID ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__print_stats_of_probe( int32 probeID ); seanhalle@209: seanhalle@209: void seanhalle@209: VMS_impl__print_stats_of_all_probes(); seanhalle@209: seanhalle@208: seanhalle@208: //======================== Probes ============================= seanhalle@208: // seanhalle@208: // Use macros to allow turning probes off with a #define switch seanhalle@209: // This means probes have zero impact on performance when off seanhalle@209: //============================================================= seanhalle@209: #define VMS_App__record_time_point_into_new_probe VMS_WL__record_time_point_into_new_probe seanhalle@209: #define VMS_ext__record_time_point_into_new_probe seanhalle@209: #define VMS_App__create_single_interval_probe VMS_WL__create_single_interval_probe seanhalle@209: #define VMS_App__create_histogram_probe VMS_WL__create_histogram_probe seanhalle@209: #define VMS_App__index_probe_by_its_name VMS_WL__index_probe_by_its_name seanhalle@209: #define VMS_App__get_probe_by_name VMS_WL__get_probe_by_name seanhalle@209: #define VMS_App__record_sched_choice_into_probe VMS_WL__record_sched_choice_into_probe seanhalle@209: #define VMS_App__record_interval_start_in_probe VMS_WL__record_interval_start_in_probe seanhalle@209: #define VMS_App__record_interval_end_in_probe VMS_WL__record_interval_end_in_probe seanhalle@209: #define VMS_App__print_stats_of_probe VMS_WL__print_stats_of_probe seanhalle@209: #define VMS_App__print_stats_of_all_probes VMS_WL__print_stats_of_all_probes seanhalle@209: seanhalle@208: #ifdef STATS__ENABLE_PROBES seanhalle@209: #define VMS_WL__record_time_point_into_new_probe( nameStr, animSlv ) \ seanhalle@209: VMS_impl__record_time_point_in_new_probe( nameStr, animSlv ) seanhalle@208: 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@209: #define VMS_WL__create_single_interval_probe( nameStr, animSlv ) \ seanhalle@209: VMS_impl__create_single_interval_probe( nameStr, animSlv ) seanhalle@208: seanhalle@209: #define VMS_WL__create_histogram_probe( numBins, startValue, \ seanhalle@209: binWidth, nameStr, animSlv ) \ seanhalle@208: VMS_impl__create_histogram_probe( numBins, startValue, \ seanhalle@209: binWidth, nameStr, animSlv ) seanhalle@209: #define VMS_int__free_probe( probe ) \ seanhalle@208: VMS_impl__free_probe( probe ) seanhalle@208: seanhalle@209: #define VMS_WL__index_probe_by_its_name( probeID, animSlv ) \ seanhalle@209: VMS_impl__index_probe_by_its_name( probeID, animSlv ) seanhalle@208: seanhalle@209: #define VMS_WL__get_probe_by_name( probeID, animSlv ) \ seanhalle@209: VMS_impl__get_probe_by_name( probeName, animSlv ) seanhalle@208: seanhalle@209: #define VMS_WL__record_sched_choice_into_probe( probeID, animSlv ) \ seanhalle@209: VMS_impl__record_sched_choice_into_probe( probeID, animSlv ) seanhalle@208: seanhalle@209: #define VMS_WL__record_interval_start_in_probe( probeID ) \ seanhalle@208: VMS_impl__record_interval_start_in_probe( probeID ) seanhalle@208: seanhalle@209: #define VMS_WL__record_interval_end_in_probe( probeID ) \ seanhalle@208: VMS_impl__record_interval_end_in_probe( probeID ) seanhalle@208: seanhalle@209: #define VMS_WL__print_stats_of_probe( probeID ) \ seanhalle@208: VMS_impl__print_stats_of_probe( probeID ) seanhalle@208: seanhalle@209: #define VMS_WL__print_stats_of_all_probes() \ seanhalle@208: VMS_impl__print_stats_of_all_probes() seanhalle@208: seanhalle@208: seanhalle@208: #else seanhalle@209: #define VMS_WL__record_time_point_into_new_probe( nameStr, animSlv ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: #define VMS_ext__record_time_point_into_new_probe( nameStr ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: seanhalle@209: #define VMS_WL__create_single_interval_probe( nameStr, animSlv ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@208: seanhalle@209: #define VMS_WL__create_histogram_probe( numBins, startValue, \ seanhalle@209: binWidth, nameStr, animSlv ) \ seanhalle@208: 0 /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__index_probe_by_its_name( probeID, animSlv ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__get_probe_by_name( probeID, animSlv ) \ seanhalle@208: NULL /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__record_sched_choice_into_probe( probeID, animSlv ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__record_interval_start_in_probe( probeID ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__record_interval_end_in_probe( probeID ) \ seanhalle@208: /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__print_stats_of_probe( probeID ) \ seanhalle@209: ; /* do nothing */ seanhalle@208: seanhalle@209: #define VMS_WL__print_stats_of_all_probes() \ seanhalle@209: ;/* do nothing */ seanhalle@208: seanhalle@208: #endif /* defined STATS__ENABLE_PROBES */ seanhalle@208: seanhalle@208: #endif /* _PROBES_H */ seanhalle@208: