]>
Commit | Line | Data |
---|---|---|
d60522e4 | 1 | #ifndef AliPHOSMEMORYWATCHER_H |
2 | #define AliPHOSMEMORYWATCHER_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | /* $Id$ */ | |
d60522e4 | 6 | //_________________________________________________________________________ |
7 | /*Basic Memory Leak utility. | |
8 | ||
9 | You can use this tiny class to *see* if your program is leaking. | |
d60522e4 | 10 | Usage: |
d60522e4 | 11 | AliPHOSMemoryWatcher memwatcher; |
d60522e4 | 12 | some program loop on events here { |
13 | if ( nevents % x == 0 ) | |
14 | { | |
15 | // take a sample every x events | |
16 | memwatcher.watch(nevents); | |
17 | } | |
18 | } | |
d60522e4 | 19 | TFile f("out.root","RECREATE"); |
20 | memwatcher.write(); | |
21 | f.Close(); | |
d60522e4 | 22 | In the output root file you'll get 3 graphs representing |
23 | the evolAliPHOSon, as a function of the number of events, of : | |
24 | - VSIZE is the virtual size (in KBytes) of your program, that is sort of | |
25 | the total memory used | |
26 | - RSSIZE is the resident size (in KBytes), that is, the part of your | |
27 | program which is really in physical memory. | |
28 | - TIME is an estimate of time per event (really it's the time elasped | |
29 | between two calls to watch method) | |
d60522e4 | 30 | WARNING: this is far from a bulletproof memory report (it's basically |
31 | using UNIX command ps -h -p [PID] -o vsize,rssize to do its job). | |
32 | It has only been tested on Linux so far. | |
33 | ||
34 | But by fitting the VSIZE by a pol1 under ROOT, you'll see right away | |
35 | by how much your program is leaking. | |
36 | */ | |
37 | //*-- Author: Laurent Aphecetche(SUBATECH) | |
d60522e4 | 38 | // --- ROOT system --- |
39 | #include "TObject.h" | |
40 | class TH2; | |
41 | class TGraph; | |
42 | class TStopwatch; | |
d60522e4 | 43 | class AliPHOSMemoryWatcher : public TObject |
44 | { | |
45 | public: | |
b01af8c2 | 46 | AliPHOSMemoryWatcher(UInt_t maxsize=10000); |
d60522e4 | 47 | ~AliPHOSMemoryWatcher(); |
b01af8c2 | 48 | void Watch(Int_t x); |
d60522e4 | 49 | |
b01af8c2 | 50 | UInt_t size(void) const { return fSize; } |
51 | Int_t X(Int_t n) const { return fX[n]; } | |
52 | Int_t VSIZE(Int_t n) const { return fVSIZE[n]; } | |
53 | Int_t RSSIZE(Int_t n) const { return fRSSIZE[n]; } | |
54 | Double_t TIME(Int_t n) const { return fTIME[n]; } | |
55 | TGraph* GraphVSIZE(void); | |
56 | TGraph* GraphRSSIZE(void); | |
57 | TGraph* GraphTIME(void); | |
58 | TH2* Frame(void) const ; | |
59 | void Write(void); | |
d60522e4 | 60 | private: |
b01af8c2 | 61 | Int_t fPID; |
d60522e4 | 62 | char fCmd[1024]; |
b01af8c2 | 63 | UInt_t fMAXSIZE; |
64 | UInt_t fSize; | |
65 | Int_t* fX; | |
66 | Int_t* fVSIZE; | |
67 | Int_t* fRSSIZE; | |
68 | Double_t* fTIME; | |
d60522e4 | 69 | TStopwatch* fTimer; |
b01af8c2 | 70 | Bool_t fDisabled; |
dfe7f75b | 71 | |
72 | ClassDef(AliPHOSMemoryWatcher,1) // General purpose memory watcher | |
73 | ||
d60522e4 | 74 | } ; |
4ed9ed00 | 75 | #endif |