Logo ROOT   6.10/09
Reference Guide
TMemStatMng.h
Go to the documentation of this file.
1 // @(#)root/memstat:$Id$
2 // Author: Anar Manafov (A.Manafov@gsi.de) 2008-03-02
3 
4 /*************************************************************************
5 * Copyright (C) 1995-2010, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11 #ifndef ROOT_TMemStatMng
12 #define ROOT_TMemStatMng
13 
14 // STD
15 #include <map>
16 // ROOT
17 #include "TObject.h"
18 #include "TTimeStamp.h"
19 // Memstat
20 #include "TMemStatHook.h"
21 #include "TMemStatDef.h"
22 
23 class TTree;
24 class TFile;
25 class TH1I;
26 class TObjArray;
27 
28 namespace Memstat {
29 
31  typedef std::map<ULong_t, Int_t> Container_t;
32  typedef Container_t::iterator pos_type;
33  typedef Container_t::value_type value_type;
34 
35  public:
36  bool add(ULong_t addr, Int_t idx) {
37  std::pair<pos_type, bool> ret = fContainer.insert(value_type(addr, idx));
38  return (ret.second);
39  }
40 
41  Int_t find(ULong_t addr) {
42  pos_type iter = fContainer.find(addr);
43  if(fContainer.end() == iter)
44  return -1;
45 
46  return iter->second;
47  }
48 
49  private:
50  Container_t fContainer;
51  };
52 
53  const UShort_t g_digestSize = 16;
54  struct SCustomDigest {
56  memset(fValue, 0, g_digestSize);
57  }
58  SCustomDigest(UChar_t _val[g_digestSize]) {
59  memcpy(fValue, _val, g_digestSize);
60  }
61 
63  };
64  inline bool operator< (const SCustomDigest &a, const SCustomDigest &b)
65  {
66  for(int i = 0; i < g_digestSize; ++i) {
67  if(a.fValue[i] != b.fValue[i])
68  return (a.fValue[i] < b.fValue[i]);
69  }
70  return false;
71  }
72 
73 
74  class TMemStatMng: public TObject {
75  typedef std::map<SCustomDigest, Int_t> CRCSet_t;
76 
77  private:
78  TMemStatMng();
79  virtual ~TMemStatMng();
80 
81  public:
82  void Enable(); //enable memory statistic
83  void Disable(); //Disable memory statistic
84  static TMemStatMng* GetInstance(); //get instance of class - ONLY ONE INSTANCE
85  static void Close(); //close MemStatManager
86  void SetBufferSize(Int_t buffersize);
87  void SetMaxCalls(Int_t maxcalls);
88 
89  public:
90  //stack data members
92  fUseGNUBuiltinBacktrace = newVal;
93  }
94 
95  protected:
96 #if !defined(__APPLE__)
99 #endif
100  void Init();
101  void AddPointer(void *ptr, Int_t size); //add pointer to the table
102  void FillTree();
103  static void *AllocHook(size_t size, const void* /*caller*/);
104  static void FreeHook(void* ptr, const void* /*caller*/);
105  static void MacAllocHook(void *ptr, size_t size);
106  static void MacFreeHook(void *ptr);
107  Int_t generateBTID(UChar_t *CRCdigest, Int_t stackEntries,
108  void **stackPointers);
109 
110 
111  // memory information
112  TFile* fDumpFile; //!file to dump current information
113  TTree *fDumpTree; //!tree to dump information
114  static TMemStatMng *fgInstance; // pointer to instance
115  static void *fgStackTop; // stack top pointer
116 
119  Double_t fBeginTime; //time when monitoring starts
120  ULong64_t fPos; //position in memory where alloc/free happens
121  Int_t fTimems; //10000*(current time - begin time)
122  Int_t fNBytes; //number of bytes allocated/freed
123  Int_t fBtID; //back trace identifier
124  Int_t fMaxCalls; //max number of malloc/frees to register in the output Tree
125  Int_t fBufferSize; //max number of malloc/free to keep in the buffer
126  Int_t fBufN; //current number of alloc or free in the buffer
127  ULong64_t *fBufPos; //position in memory where alloc/free happens
128  Int_t *fBufTimems; //10000*(current time - begin time)
129  Int_t *fBufNBytes; //number of bytes allocated/freed
130  Int_t *fBufBtID; //back trace identifier
131  Int_t *fIndex; //array to sort fBufPos
132  Bool_t *fMustWrite; //flag to write or not the entry
133 
134  private:
138  CRCSet_t fBTChecksums;
140  // for Debug. A counter of all (de)allacations.
143 
144  ClassDef(TMemStatMng, 0) // a manager of memstat sessions.
145  };
146 
147 }
148 
149 #endif
bool add(ULong_t addr, Int_t idx)
Definition: TMemStatMng.h:36
An array of TObjects.
Definition: TObjArray.h:37
ULong64_t * fBufPos
Definition: TMemStatMng.h:127
void SetUseGNUBuiltinBacktrace(Bool_t newVal)
Definition: TMemStatMng.h:91
static TMemStatMng * fgInstance
tree to dump information
Definition: TMemStatMng.h:114
unsigned short UShort_t
Definition: RtypesCore.h:36
const UShort_t g_digestSize
Definition: TMemStatMng.h:53
TObjArray * fFAddrsList
Definition: TMemStatMng.h:136
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
Definition: TFile.h:46
TTimeStamp fTimeStamp
Definition: TMemStatMng.h:118
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TArc * a
Definition: textangle.C:12
SCustomDigest(UChar_t _val[g_digestSize])
Definition: TMemStatMng.h:58
UChar_t fValue[g_digestSize]
Definition: TMemStatMng.h:62
Container_t::value_type value_type
Definition: TMemStatMng.h:33
#define ClassDef(name, id)
Definition: Rtypes.h:297
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
bool operator<(const SCustomDigest &a, const SCustomDigest &b)
Definition: TMemStatMng.h:64
TTree * fDumpTree
file to dump current information
Definition: TMemStatMng.h:113
void *(* MallocHookFunc_t)(size_t size, const void *caller)
Definition: TMemStatHook.h:35
Bool_t fUseGNUBuiltinBacktrace
Definition: TMemStatMng.h:117
tomato 1-D histogram with an int per channel (see TH1 documentation)}
Definition: TH1.h:510
PyObject * fValue
unsigned int UInt_t
Definition: RtypesCore.h:42
static void * fgStackTop
Definition: TMemStatMng.h:115
double Double_t
Definition: RtypesCore.h:55
void(* FreeHookFunc_t)(void *ptr, const void *caller)
Definition: TMemStatHook.h:36
unsigned long long ULong64_t
Definition: RtypesCore.h:70
std::map< SCustomDigest, Int_t > CRCSet_t
Definition: TMemStatMng.h:75
unsigned long ULong_t
Definition: RtypesCore.h:51
The TTimeStamp encapsulates seconds and ns since EPOCH.
Definition: TTimeStamp.h:71
TMemStatHook::MallocHookFunc_t fPreviousMallocHook
Definition: TMemStatMng.h:97
Container_t::iterator pos_type
Definition: TMemStatMng.h:32
Int_t find(ULong_t addr)
Definition: TMemStatMng.h:41
Mother of all ROOT objects.
Definition: TObject.h:37
void FillTree(TTree &myTree, const RooDataSet &data)
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
A TTree object has a header with a name and a title.
Definition: TTree.h:78
unsigned char UChar_t
Definition: RtypesCore.h:34
TMemStatHook::FreeHookFunc_t fPreviousFreeHook
old malloc function
Definition: TMemStatMng.h:98
TMemStatFAddrContainer fFAddrs
Definition: TMemStatMng.h:135
std::map< ULong_t, Int_t > Container_t
Definition: TMemStatMng.h:31