removed printfs
[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.4  1994/11/04 06:41:05  newhall
18 /* removed printfs
19 /*
20  * Revision 1.3  1994/09/25  01:52:10  newhall
21  * updated to support the changes to the  visi, UI and VM interfaces having
22  * to do with a new representation of metric/focus lists as a list of
23  * metric/focus pairs.
24  *
25  * Revision 1.2  1994/09/22  01:20:20  markc
26  * Changed "String" to "char*"
27  *
28  * Revision 1.1  1994/08/13  20:52:40  newhall
29  * changed when a visualization process is started
30  * added new file VISIthreadpublic.C
31  * */
32 /////////////////////////////////////////////////////////////////////
33 // * visualizationUser routines:  GetMetricResource, PhaseName
34 //              StopMetricResource
35 // * VISIthread server routines:  VISIKillVisi
36 /////////////////////////////////////////////////////////////////////
37 #include <signal.h>
38 #include <math.h>
39 #include "thread/h/thread.h"
40 #include "util/h/list.h"
41 #include "util/h/rpcUtil.h"
42 #include "VM.CLNT.h"
43 #include "UI.CLNT.h"
44 #include "dataManager.CLNT.h"
45 #include "visi.CLNT.h"
46 #include "VISIthread.SRVR.h"
47 #include "../VMthread/VMtypes.h"
48 #include "VISIthreadTypes.h"
49 #include "../pdMain/paradyn.h"
50 #include "dyninstRPC.CLNT.h"
51 #include "../DMthread/DMinternals.h"
52 #define  ERROR_MSG(s1, s2) \
53          uiMgr->showError(s1,s2); 
54
55 //////////////////////////////////////////////////
56 // VISIKillVisi:  VISIthread server routine 
57 //
58 //  called from VisiMgr, kills the visualization 
59 //  process and sets thread local variable "quit"
60 //  so that the VISIthread will die 
61 //////////////////////////////////////////////////
62  void VISIthread::VISIKillVisi(){
63
64  VISIthreadGlobals *ptr;
65
66   if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
67     PARADYN_DEBUG(("thr_getspecific in VISIthread::VISIKillVisi"));
68     ERROR_MSG(13,"thr_getspecific in VISIthread::VISIKillVisi");
69     return;
70   }
71
72   ptr->quit = 1;
73
74 }
75
76
77
78 //////////////////////////////////////////////////////////////////////
79 //  GetMetricResource: visualizationUser routine (called by visi process)
80 //  input: string of metric names, string of focus names, type of data
81 //         (0: histogram, 1: scalar) currently only 0 supported
82 //
83 // check if metric and resource lists have wild card chars 
84 // if so request metrics and resources form UIM (currently, the
85 // only option), else make enable data collection call to DM for each
86 // metric resource pair
87 //////////////////////////////////////////////////////////////////////
88 void visualizationUser::GetMetricResource(char *mets_res,
89                                           int numElements,
90                                           int type){
91  VISIthreadGlobals *ptr;
92
93 PARADYN_DEBUG(("in visualizationUser::GetMetricResource"));
94  if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
95     PARADYN_DEBUG(("thr_getspecific in visiUser::GetMetricResource"));
96     ERROR_MSG(13,"thr_getspecific in VISIthread::GetMetricResource");
97     return;
98  }
99  // TODO: parse the mets_res list
100  // if not empty and no wild cards convert mets_res to list of 
101  // metrespairs representation and call VISIthreadchooseMetRes routine
102
103  // otherwise initiate menuing request
104  ptr->ump->chooseMetricsandResources((chooseMandRCBFunc)VISIthreadchooseMetRes,
105                                      NULL,0);
106 }
107
108
109 //////////////////////////////////////////////////////////////////////
110 //  StopMetricResource: visualizationUser routine (called by visi process)
111 //  input: metric and resource Ids 
112 //
113 //  if metricId and resourceId are valid, make disable data collection
114 //  call to dataManager for the pair, and remove the associated metric
115 //  instance from the threads local mrlist
116 //////////////////////////////////////////////////////////////////////
117 void visualizationUser::StopMetricResource(int metricId,
118                                            int resourceId){
119  VISIthreadGlobals *ptr;
120  metricInstance *listItem;
121  int found = 0;
122  List<metricInstance*> walk;
123
124   if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
125     PARADYN_DEBUG(("thr_getspecific in visualizationUser::StopMetricResource"));
126     ERROR_MSG(13,"thr_getspecific in VISIthread::StopMetricResource");
127     return;
128   }
129
130
131   // search metricList for matching metricId and resourceId
132   // if found request DM to disable data collection of metricInstance
133
134   found = 0;
135   for (walk = *ptr->mrlist; listItem=*walk; walk++) {
136     if ((listItem->met == (metric*) metricId) &&
137         (listItem->focus->getCanonicalName() == (char*) resourceId)) {
138       found = 1;
139       break;
140     }
141       PARADYN_DEBUG(("current list element: metId = %d resId = %d",
142                      (int)listItem->met,(int)listItem->focus));
143   }
144
145 #ifdef DEBUG
146     if(found){
147      PARADYN_DEBUG(("in visualizationUser::StopMetricResource: mi found"));
148     }
149     else{
150      PARADYN_DEBUG(("visualizationUser::StopMetricResource: mi not found\n"));
151      PARADYN_DEBUG(("metricId = %d resourceId = %d\n",metricId,resourceId));
152     }
153 #endif
154
155     if(found){
156       //make disable request to DM and remove this metric instance from list
157       ptr->dmp->disableDataCollection(ptr->perStream,listItem);
158       if(!(ptr->mrlist->remove(listItem))){
159         perror("ptr->mrlist->remove"); 
160         ERROR_MSG(16,"remove() in StopMetricResource()");
161         ptr->quit = 1;
162         return;
163       }
164     }
165 }
166
167
168
169 ///////////////////////////////////////////////////////////////////
170 //  PhaseName: visualizationUser routine (called by visi process)
171 //  input: name of phase, begining and ending timestamp for phase 
172 //
173 //  not currently implemented
174 ///////////////////////////////////////////////////////////////////
175 void visualizationUser::PhaseName(double begin,
176                                   double end,
177                                   char *name){
178
179  VISIthreadGlobals *ptr;
180
181   if (thr_getspecific(visiThrd_key, (void **) &ptr) != THR_OKAY) {
182     PARADYN_DEBUG(("thr_getspecific in visualizationUser::PhaseName"));
183     ERROR_MSG(13,"thr_getspecific in VISIthread::PhaseName");
184     return;
185   }
186
187 }
188