Changed "String" to "char*"
[dyninst.git] / paradyn / src / VISIthread / VISIthreadpublic.C
1 /*
2  * Copyright (c) 1993, 1994 Barton P. Miller, Jeff Hollingsworth,
3  *     Bruce Irvin, Jon Cargille, Krishna Kunchithapadam, Karen
4  *     Karavanic, Tia Newhall, Mark Callaghan.  All rights reserved.
5  * 
6  * This software is furnished under the condition that it may not be
7  * provided or otherwise made available to, or used by, any other
8  * person, except as provided for by the terms of applicable license
9  * agreements.  No title to or ownership of the software is hereby
10  * transferred.  The name of the principals may not be used in any
11  * advertising or publicity related to this software without specific,
12  * written prior authorization.  Any use of this software must include
13  * the above copyright notice.
14  *
15  */
16 /* $Log: VISIthreadpublic.C,v $
17 /* Revision 1.2  1994/09/22 01:20:20  markc
18 /* Changed "String" to "char*"
19 /*
20  * Revision 1.1  1994/08/13  20:52:40  newhall
21  * changed when a visualization process is started
22  * added new file VISIthreadpublic.C
23  * */
24 /////////////////////////////////////////////////////////////////////
25 // * visualizationUser routines:  GetMetricResource, PhaseName
26 //              StopMetricResource
27 // * VISIthread server routines:  VISIKillVisi
28 /////////////////////////////////////////////////////////////////////
29 #include <signal.h>
30 #include <math.h>
31 #include "thread/h/thread.h"
32 #include "util/h/list.h"
33 #include "util/h/rpcUtil.h"
34 #include "VM.CLNT.h"
35 #include "UI.CLNT.h"
36 #include "dataManager.CLNT.h"
37 #include "visi.CLNT.h"
38 #include "VISIthread.SRVR.h"
39 #include "../VMthread/VMtypes.h"
40 #include "VISIthreadTypes.h"
41 #include "../pdMain/paradyn.h"
42 #include "dyninstRPC.CLNT.h"
43 #include "../DMthread/DMinternals.h"
44 #define  ERROR_MSG(s1, s2) \
45          uiMgr->showError(s1,s2); \
46          printf("error# %d: %s\n",s1,s2); 
47
48 //////////////////////////////////////////////////
49 // VISIKillVisi:  VISIthread server routine 
50 //
51 //  called from VisiMgr, kills the visualization 
52 //  process and sets thread local variable "quit"
53 //  so that the VISIthread will die 
54 //////////////////////////////////////////////////
55  void VISIthread::VISIKillVisi(){
56
57  VISIthreadGlobals *ptr;
58
59   if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
60     PARADYN_DEBUG(("thr_getspecific in VISIthread::VISIKillVisi"));
61     ERROR_MSG(13,"thr_getspecific in VISIthread::VISIKillVisi");
62     return;
63   }
64
65   ptr->quit = 1;
66
67 }
68
69
70 //////////////////////////////////////////////////////////////////////
71 //  GetMetricResource: visualizationUser routine (called by visi process)
72 //  input: string of metric names, string of focus names, type of data
73 //         (0: histogram, 1: scalar) currently only 0 supported
74 //
75 // check if metric and resource lists have wild card chars 
76 // if so request metrics and resources form UIM (currently, the
77 // only option), else make enable data collection call to DM for each
78 // metric resource pair
79 //////////////////////////////////////////////////////////////////////
80 void visualizationUser::GetMetricResource(char *metric,
81                                           char *resource,
82                                           int type){
83  VISIthreadGlobals *ptr;
84
85 PARADYN_DEBUG(("in visualizationUser::GetMetricResource"));
86  if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
87     PARADYN_DEBUG(("thr_getspecific in visiUser::GetMetricResource"));
88     ERROR_MSG(13,"thr_getspecific in VISIthread::GetMetricResource");
89     return;
90  }
91  ptr->ump->chooseMetricsandResources((chooseMandRCBFunc)VISIthreadchooseMetRes,NULL,0,NULL);
92 }
93
94
95 //////////////////////////////////////////////////////////////////////
96 //  StopMetricResource: visualizationUser routine (called by visi process)
97 //  input: metric and resource Ids 
98 //
99 //  if metricId and resourceId are valid, make disable data collection
100 //  call to dataManager for the pair, and remove the associated metric
101 //  instance from the threads local mrlist
102 //////////////////////////////////////////////////////////////////////
103 void visualizationUser::StopMetricResource(int metricId,
104                                            int resourceId){
105  VISIthreadGlobals *ptr;
106  metricInstance *listItem;
107  int found = 0;
108  List<metricInstance*> walk;
109
110   if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
111     PARADYN_DEBUG(("thr_getspecific in visualizationUser::StopMetricResource"));
112     ERROR_MSG(13,"thr_getspecific in VISIthread::StopMetricResource");
113     return;
114   }
115
116
117   // search metricList for matching metricId and resourceId
118   // if found request DM to disable data collection of metricInstance
119
120   found = 0;
121   for (walk = *ptr->mrlist; listItem=*walk; walk++) {
122     if ((listItem->met == (metric*) metricId) &&
123         (listItem->focus->getCanonicalName() == (char*) resourceId)) {
124       found = 1;
125       break;
126     }
127       PARADYN_DEBUG(("current list element: metId = %d resId = %d",
128                      (int)listItem->met,(int)listItem->focus));
129   }
130
131 #ifdef DEBUG
132     if(found){
133      PARADYN_DEBUG(("in visualizationUser::StopMetricResource: mi found"));
134     }
135     else{
136      PARADYN_DEBUG(("visualizationUser::StopMetricResource: mi not found\n"));
137      PARADYN_DEBUG(("metricId = %d resourceId = %d\n",metricId,resourceId));
138     }
139 #endif
140
141     if(found){
142       //make disable request to DM and remove this metric instance from list
143       ptr->dmp->disableDataCollection(ptr->perStream,listItem);
144       if(!(ptr->mrlist->remove(listItem))){
145         perror("ptr->mrlist->remove"); 
146         ERROR_MSG(16,"remove() in StopMetricResource()");
147         ptr->quit = 1;
148         return;
149       }
150     }
151 }
152
153
154
155 ///////////////////////////////////////////////////////////////////
156 //  PhaseName: visualizationUser routine (called by visi process)
157 //  input: name of phase, begining and ending timestamp for phase 
158 //
159 //  not currently implemented
160 ///////////////////////////////////////////////////////////////////
161 void visualizationUser::PhaseName(double begin,
162                                   double end,
163                                   char *name){
164
165  VISIthreadGlobals *ptr;
166
167   if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
168     PARADYN_DEBUG(("thr_getspecific in visualizationUser::PhaseName"));
169     ERROR_MSG(13,"thr_getspecific in VISIthread::PhaseName");
170     return;
171   }
172
173 }
174