00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TPerfStats
00013 #define ROOT_TPerfStats
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef ROOT_TObject
00026 #include "TObject.h"
00027 #endif
00028 #ifndef ROOT_TTimeStamp
00029 #include "TTimeStamp.h"
00030 #endif
00031 #ifndef ROOT_TString
00032 #include "TString.h"
00033 #endif
00034 #ifndef ROOT_TVirtualPerfStats
00035 #include "TVirtualPerfStats.h"
00036 #endif
00037
00038
00039 class TTree;
00040 class TH1D;
00041 class TH2D;
00042 class TList;
00043 class TVirtualMonitoringWriter;
00044
00045
00046 class TPerfEvent : public TObject {
00047
00048 public:
00049 TString fEvtNode;
00050 TTimeStamp fTimeStamp;
00051 TVirtualPerfStats::EEventType fType;
00052 TString fSlaveName;
00053 TString fNodeName;
00054 TString fFileName;
00055 TString fFileClass;
00056 TString fSlave;
00057 Long64_t fEventsProcessed;
00058 Long64_t fBytesRead;
00059 Long64_t fLen;
00060 Double_t fLatency;
00061 Double_t fProcTime;
00062 Double_t fCpuTime;
00063 Bool_t fIsStart;
00064 Bool_t fIsOk;
00065
00066 TPerfEvent(TTimeStamp *offset = 0);
00067 virtual ~TPerfEvent() {}
00068
00069 Bool_t IsSortable() const { return kTRUE; }
00070 Int_t Compare(const TObject *obj) const;
00071 void Print(Option_t *option="") const;
00072
00073 ClassDef(TPerfEvent,3)
00074 };
00075
00076
00077 class TPerfStats : public TVirtualPerfStats {
00078
00079 private:
00080 TTree *fTrace;
00081 TTimeStamp fTzero;
00082 TPerfEvent *fPerfEvent;
00083 TH1D *fPacketsHist;
00084 TH1D *fEventsHist;
00085 TH1D *fNodeHist;
00086 TH2D *fLatencyHist;
00087 TH2D *fProcTimeHist;
00088 TH2D *fCpuTimeHist;
00089 Long64_t fBytesRead;
00090 Double_t fTotCpuTime;
00091 Long64_t fTotBytesRead;
00092 Long64_t fTotEvents;
00093 Long64_t fNumEvents;
00094 Int_t fSlaves;
00095
00096 Bool_t fDoHist;
00097 Bool_t fDoTrace;
00098 Bool_t fDoTraceRate;
00099 Bool_t fDoSlaveTrace;
00100 Bool_t fDoQuota;
00101
00102 Bool_t fMonitorPerPacket;
00103
00104 TVirtualMonitoringWriter *fMonitoringWriter;
00105
00106 TPerfStats(TList *input, TList *output);
00107 void WriteQueryLog();
00108
00109 public:
00110 virtual ~TPerfStats() {}
00111
00112 void SimpleEvent(EEventType type);
00113 void PacketEvent(const char *slave, const char *slavename, const char *filename,
00114 Long64_t eventsprocessed, Double_t latency,
00115 Double_t proctime, Double_t cputime, Long64_t bytesRead);
00116 void FileEvent(const char *slave, const char *slavename, const char *nodename, const char *filename,
00117 Bool_t isStart);
00118
00119 void FileOpenEvent(TFile *file, const char *filename, Double_t start);
00120 void FileReadEvent(TFile *file, Int_t len, Double_t start);
00121 void RateEvent(Double_t proctime, Double_t deltatime,
00122 Long64_t eventsprocessed, Long64_t bytesRead);
00123 void SetBytesRead(Long64_t num);
00124 Long64_t GetBytesRead() const;
00125 void SetNumEvents(Long64_t num) { fNumEvents = num; }
00126 Long64_t GetNumEvents() const { return fNumEvents; }
00127
00128 static void Start(TList *input, TList *output);
00129 static void Stop();
00130 static void Setup(TList *input);
00131
00132 ClassDef(TPerfStats,0)
00133 };
00134
00135
00136 #endif