1 /* $Log: visualization.C,v $
2 /* Revision 1.4 1994/03/26 04:19:49 newhall
3 /* changed all floats to double
4 /* fix problem with null string returned for first resource name
6 * Revision 1.3 1994/03/17 05:23:09 newhall
7 * changed eventCallbacks type, and the constraints on triggering the
8 * callback routine associated with the DATAVALUES event
10 * Revision 1.2 1994/03/14 20:28:55 newhall
11 * changed visi subdirectory structure
13 #include "visi/h/visualization.h"
16 visi_DataGrid dataGrid;
17 visi_MRList metricList;
18 visi_MRList resourceList;
19 int LastBucketSent = -1;
20 int fileDesc[FILETABLESIZE];
21 int (*fileDescCallbacks[FILETABLESIZE])();
22 int (*eventCallbacks[EVENTSIZE])(int);
27 return(vp->mainLoop());
30 // paradyn initialization routine connects to parent socket,
31 // and registers the visualization::mainLoop routine as callback
32 // on events on fileDesc[0], argv contains initial parameters to
33 // visualization: metriclist, resourcelist
38 for(i=0;i<FILETABLESIZE;i++){
39 fileDescCallbacks[i] = NULL;
42 for(i=0;i<EVENTSIZE;i++){
43 eventCallbacks[i] = NULL;
46 vp = new visualization(0, NULL, NULL);
48 fileDescCallbacks[0] = visi_callback;
54 int StartVisi(int argc,char *argv[]){
59 // call GetMetricResources with initial metric resource lists
61 vp->GetMetricResource(argv[1],argv[2],0);
63 vp->GetMetricResource(" "," ",0);
69 // registration callback routine for paradyn events
70 // sets eventCallbacks[event] to callback routine provided by user
71 int RegistrationCallback(msgTag event,int (*callBack)(int)){
72 if((event >= 0) && (event < EVENTSIZE)){
73 eventCallbacks[event] = callBack;
77 visi_ErrorHandler(ERROR_SUBSCRIPT,"error in RegistrationCallback");
78 return(ERROR_SUBSCRIPT);
82 // fd registration and callback routine registration for user
83 // to register callback routines when they use the provided main routine
84 int RegFileDescriptors(int *fd, int (*callBack)()){
90 void visualization::Data(dataValue_Array data){
92 int *metricIds, *resourceIds;
93 int noMetrics, noResources;
100 noMetrics = dataGrid.NumMetrics();
101 noResources = dataGrid.NumResources();
102 if((metricIds = (int *)malloc(sizeof(int)*noMetrics)) == NULL){
103 visi_ErrorHandler(ERROR_MALLOC,"error in malloc in visi::Data()");
105 if((resourceIds = (int *)malloc(sizeof(int)*noResources)) == NULL){
106 visi_ErrorHandler(ERROR_MALLOC,"error in malloc in visi::Data()");
109 for(i=0; i < noMetrics; i++){
110 metricIds[i] = dataGrid.MetricId(i);
113 for(i=0; i < noResources; i++){
114 resourceIds[i] = dataGrid.ResourceId(i);
117 for(i=0; i < data.count; i++){
119 // find metric and resource index into dataGrid and add value if found
120 for(j=0;(j<noMetrics)&&(data.data[i].metricId!=metricIds[j]);j++) ;
122 for(j=0;(j<noResources)&&(data.data[i].resourceId!=resourceIds[j]);j++) ;
123 if((j<noResources) && (metric < noMetrics)){
124 dataGrid.AddValue(metric,j,data.data[i].bucketNum,data.data[i].data);
128 min = max = dataGrid.NumBins()+1;
129 for(i=0; i < noMetrics; i++){
130 for(j=0; j < noResources; j++){
131 if(dataGrid.Valid(i,j)){
132 temp = dataGrid.LastBucketFilled(i,j);
133 if((temp >= -1) && (temp < min))
136 fprintf(stderr,"@@@ in visualization::datagrid(%d,%d).LastBucketFilled = %d\n",i,j,temp);
143 fprintf(stderr,"@@@ in visualization::Data min = %d LastBucketSent = %d\n",min,LastBucketSent);
149 //call user registered callback routine assoc. w/event DATAVALUES
150 if((min > LastBucketSent) && (min != max)&& (eventCallbacks[DATAVALUES] != NULL)){
152 fprintf(stderr,"@@@ before callback on event DATAVALUES in visualization::Data\n");
154 LastBucketSent = min;
155 ok = eventCallbacks[DATAVALUES](LastBucketSent);
160 void visualization::Fold(double newBucketWidth){
165 fprintf(stderr,"@@@ visualization::Fold LastBucketSent=%d\n",LastBucketSent);
170 dataGrid.Fold(newBucketWidth);
171 // assume a fold can only occur when datagrid histogram buckets are full
172 LastBucketSent = (dataGrid.NumBins()/2) - 1;
175 fprintf(stderr,"@@@ visualization::Fold LastBucketSent=%d\n",LastBucketSent);
178 //call user registered callback routine assoc. w/event FOLD
179 if(eventCallbacks[FOLD] != NULL){
180 ok = eventCallbacks[FOLD](0);
184 void visualization::InvalidMR(int m,int r){
191 for(i=0;(i<dataGrid.NumMetrics())&&(m!=dataGrid.MetricId(i));i++) ;
192 for(j=0;(j<dataGrid.NumResources())&&(r!=dataGrid.ResourceId(j));j++);
193 ok = dataGrid.Invalidate(i,j);
195 //call callback routine assoc. w/event INVALIDMETRICSRESOURCES
196 if(eventCallbacks[INVALIDMETRICSRESOURCES] != NULL){
197 ok = eventCallbacks[INVALIDMETRICSRESOURCES](0);
201 void visualization::AddMetricsResources(metricType_Array metrics,resourceType_Array resources,double bucketWidth,int nobuckets){
210 // construct new dataGrid
211 if(!dataGrid.NumMetrics()){
212 //construct metric, resource lists
213 metricList.visi_MRList(metrics.count,metrics.data);
214 resourceList.visi_MRList(resources.count,resources.data);
216 // construct new dataGrid
217 dataGrid.visi_DataGrid(metrics.count,resources.count,metrics.data,resources.data,nobuckets,bucketWidth);
220 // add elements to existing data grid
223 fprintf(stderr,"@@@AddMetricsResources to existing datagrid is not supported");
226 //call callback routine assoc. w/event ADDMETRICSRESOURCES
227 if(eventCallbacks[ADDMETRICSRESOURCES] != NULL){
228 ok = eventCallbacks[ADDMETRICSRESOURCES](0);
232 void visualization::NewMetricsResources(metricType_Array metrics,resourceType_Array resources){
238 //call callback routine assoc. w/event NEWMETRICSRESOURCES
239 if(eventCallbacks[NEWMETRICSRESOURCES] != NULL){
240 ok = eventCallbacks[NEWMETRICSRESOURCES](0);
244 void visualization::Phase(double begin,double end,String name){
252 //call callback routine assoc. w/event PHASENAME
253 if(eventCallbacks[PHASENAME] != NULL){
254 ok = eventCallbacks[PHASENAME](0);