changed parameters to DM_sequential_init
[dyninst.git] / paradyn / src / DMthread / DMperfstream.h
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 #ifndef dmperfstream_H
17 #define dmperfstream_H
18 #include "util/h/sys.h"
19 #include "dataManager.thread.h"
20 #include "dataManager.thread.SRVR.h"
21 #include "util/h/aggregateSample.h"
22 #include <string.h>
23 #include "paradyn/src/UIthread/Status.h"
24 #include <stdlib.h>
25 #include "util/h/Vector.h"
26 #include "util/h/Dictionary.h"
27 #include "DMphase.h"
28 #include "DMinclude.h"
29
30
31 class metricInstance;
32 class metric;
33 class resourceList;
34 //
35 // A consumer of performance data.
36 //
37 class performanceStream {
38         friend class paradynDaemon;
39         friend void phaseInfo::startPhase(timeStamp, const string&);
40         friend void addMetric(T_dyninstRPC::metricInfo &info);
41         friend resourceHandle createResource(vector<string>&, string& );
42     public:
43         performanceStream(dataType t, dataCallback dc,
44                           controlCallback cc, int tid); 
45         ~performanceStream();
46
47         void setSampleRate(timeStamp rate) { sampleRate = rate; }
48
49         void callSampleFunc(metricInstanceHandle, sampleValue*, int, int);
50         void callResourceFunc(resourceHandle parent, resourceHandle child, 
51                               const char *name, const char *abstr);
52         void callResourceBatchFunc(batchMode mode);
53         void callFoldFunc(timeStamp width,phaseType phase_type);
54         void callStateFunc(appState state);
55         void callPhaseFunc(phaseInfo& phase);
56         perfStreamHandle Handle(){return(handle);}
57         static void notifyAllChange(appState state);
58         static void ResourceBatchMode(batchMode mode);
59         static void foldAll(timeStamp width, phaseType phase_type); 
60         static performanceStream *find(perfStreamHandle psh);
61         static unsigned pshash(const perfStreamHandle &val) {
62                     return((unsigned)val);
63         }
64     private:
65         dataType                type;   // Trace or Sample
66         dataCallback            dataFunc;
67         controlCallback         controlFunc;
68         int                     threadId;
69         perfStreamHandle        handle;
70         static vector<bool>     nextId;
71         // dictionary rather than vector since perfStreams can be destroyed
72         static dictionary_hash<perfStreamHandle,performanceStream*> allStreams;
73         timeStamp               sampleRate;     /* sample sampleRate usec */
74 };
75 #endif