Changed to eliminate inline cvs logs -> cvs $Id$
[dyninst.git] / paradyn / src / UIthread / UIwhere.C
1 /*
2  * Copyright (c) 1996-1998 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * This license is for research uses.  For such uses, there is no
12  * charge. We define "research use" to mean you may freely use it
13  * inside your organization for whatever purposes you see fit. But you
14  * may not re-distribute Paradyn or parts of Paradyn, in any form
15  * source or binary (including derivatives), electronic or otherwise,
16  * to any other organization or entity without our permission.
17  * 
18  * (for other uses, please contact us at paradyn@cs.wisc.edu)
19  * 
20  * All warranties, including without limitation, any warranty of
21  * merchantability or fitness for a particular purpose, are hereby
22  * excluded.
23  * 
24  * By your use of Paradyn, you understand and agree that we (or any
25  * other person or entity with proprietary rights in Paradyn) are
26  * under no obligation to provide either maintenance services,
27  * update services, notices of latent defects, or correction of
28  * defects for Paradyn.
29  * 
30  * Even if advised of the possibility of such damages, under no
31  * circumstances shall we (or any other person or entity with
32  * proprietary rights in the software licensed hereunder) be liable
33  * to you or any third party for direct, indirect, or consequential
34  * damages of any character regardless of type of action, including,
35  * without limitation, loss of profits, loss of use, loss of good
36  * will, or computer failure or malfunction.  You agree to indemnify
37  * us (and any other person or entity with proprietary rights in the
38  * software licensed hereunder) for any and all liability it may
39  * incur to third parties resulting from your use of Paradyn.
40  */
41
42 /* 
43  * UIwhere.C
44  * code related to displaying the where axes lives here
45  */
46
47 /* $Id: UIwhere.C,v 1.23 1999/04/27 16:03:44 nash Exp $ */
48
49 #include "UIglobals.h" // UIM_BatchMode
50 #include "dataManager.thread.h"
51 #include "paradyn/src/DMthread/DMinclude.h"
52
53 #include "whereAxis.h"
54 #include "abstractions.h"
55 #include "whereAxisTcl.h"
56
57 /* 
58  *  resourceAddedCB
59  *  This callback function invoked by dataManager whenever a new 
60  *  resource has been defined.  Maintains where axis display.
61  *  Creates dag for abstraction if none exists.
62 */
63 int numResourceAddedCBSoFar = 0;
64 void resourceAddedCB (perfStreamHandle,
65                       resourceHandle parent, 
66                       resourceHandle newResource, 
67                       const char *name,
68                       const char *abs)
69 {
70
71 #if UIM_DEBUG
72   printf ("resourceAddedCB %s\n", name);
73 #endif
74
75   numResourceAddedCBSoFar++;
76
77 //  cout << numResourceAddedCBSoFar << " " << abs << ":" << name
78 //       << " [" << newResource << "] [" << parent << "]" << endl;
79
80   const bool inBatchMode = (UIM_BatchMode > 0);
81   if (!inBatchMode)
82      ui_status->message("receiving where axis item");
83
84   extern abstractions *theAbstractions;
85   assert(theAbstractions);
86
87   abstractions &theAbs = *theAbstractions;
88   string theAbstractionName = abs;
89   whereAxis &theWhereAxis = theAbs[theAbstractionName];
90      // may create a where axis!
91
92   const char *nameLastPart = strrchr(name, '/');
93   assert(nameLastPart);
94   nameLastPart++;
95
96   theWhereAxis.addItem(nameLastPart, parent, newResource,
97                        false, // don't rethink graphics
98                        false // don't resort (if not in batch mode, code below
99                              // will do that, so don't worry)
100                        );
101
102   if (!inBatchMode) {
103      ui_status->message("Rethinking after a non-batch receive");
104
105      theWhereAxis.recursiveDoneAddingChildren(true); // true --> resort
106      theWhereAxis.resize(true);
107         // super-expensive operation...rethinks EVERY node's
108         // listbox & children dimensions.  Actually, this only needs
109         // to be done for the just-added node and all its ancestors.
110      initiateWhereAxisRedraw(interp, true);
111
112      ui_status->message("ready");
113   }
114 }
115 void memoryAddedCB (perfStreamHandle,
116                     const char*, // vname
117                     int start,
118                     unsigned mem_size,
119                     unsigned blk_size,
120                     resourceHandle parent,
121                     vector<resourceHandle> *handles)
122 {
123         char *abs = "BASE" ;
124         extern abstractions *theAbstractions;
125         assert(theAbstractions);
126
127         abstractions &theAbs = *theAbstractions;
128         string theAbstractionName = abs;
129         whereAxis &theWhereAxis = theAbs[theAbstractionName];
130
131         resourceHandle newResource ;
132         int end = start + mem_size ;
133         unsigned h = 0 ;
134         ui_status->message("receiving where axis item [memory]");
135         while (start < end)
136         {
137                 numResourceAddedCBSoFar++;
138
139                 char nameLastPart[255] ;
140                 sprintf(nameLastPart, "%d", start) ;
141
142                 assert(h<(*handles).size()) ;
143                 newResource = (*handles)[h] ;
144
145                 theWhereAxis.addItem(nameLastPart, parent, newResource,
146                         false, // don't rethink graphics
147                         false // don't resort (if not in batch mode, code below
148                              // will do that, so don't worry
149                         ) ;
150
151                 start += blk_size ;
152                 h++;
153         } // while
154         ui_status->message("ready [memory]");
155 }
156