Logo ROOT  
Reference Guide
No Matches
Go to the documentation of this file.
1// @(#)root/memstat:$Id$
2// Author: Anar Manafov (A.Manafov@gsi.de) 2008-03-02
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. *
11#ifndef ROOT_TMemStatMng
12#define ROOT_TMemStatMng
14// STD
15#include <map>
16#include <cstring>
17// ROOT
18#include "TObject.h"
19#include "TTimeStamp.h"
20// Memstat
21#include "TMemStatHook.h"
22#include "TMemStatDef.h"
24class TTree;
25class TFile;
26class TH1I;
27class TObjArray;
29namespace Memstat {
32 typedef std::map<ULong_t, Int_t> Container_t;
33 typedef Container_t::iterator pos_type;
34 typedef Container_t::value_type value_type;
36 public:
37 bool add(ULong_t addr, Int_t idx) {
38 std::pair<pos_type, bool> ret = fContainer.insert(value_type(addr, idx));
39 return (ret.second);
40 }
43 pos_type iter = fContainer.find(addr);
44 if(fContainer.end() == iter)
45 return -1;
47 return iter->second;
48 }
50 private:
52 };
57 memset(fValue, 0, g_digestSize);
58 }
60 memcpy(fValue, _val, g_digestSize);
61 }
64 };
65 inline bool operator< (const SCustomDigest &a, const SCustomDigest &b)
66 {
67 for(int i = 0; i < g_digestSize; ++i) {
68 if(a.fValue[i] != b.fValue[i])
69 return (a.fValue[i] < b.fValue[i]);
70 }
71 return false;
72 }
75 class TMemStatMng: public TObject {
76 typedef std::map<SCustomDigest, Int_t> CRCSet_t;
78 private:
80 virtual ~TMemStatMng();
82 public:
83 void Enable(); //enable memory statistic
84 void Disable(); //Disable memory statistic
85 static TMemStatMng* GetInstance(); //get instance of class - ONLY ONE INSTANCE
86 static void Close(); //close MemStatManager
87 void SetBufferSize(Int_t buffersize);
88 void SetMaxCalls(Int_t maxcalls);
90 public:
91 //stack data members
94 }
96 protected:
97#if !defined(__APPLE__)
101 void Init();
102 void AddPointer(void *ptr, Int_t size); //add pointer to the table
103 void FillTree();
104 static void *AllocHook(size_t size, const void* /*caller*/);
105 static void FreeHook(void* ptr, const void* /*caller*/);
106 static void MacAllocHook(void *ptr, size_t size);
107 static void MacFreeHook(void *ptr);
108 Int_t generateBTID(UChar_t *CRCdigest, Int_t stackEntries,
109 void **stackPointers);
112 // memory information
113 TFile* fDumpFile; //!file to dump current information
114 TTree *fDumpTree; //!tree to dump information
115 static TMemStatMng *fgInstance; // pointer to instance
116 static void *fgStackTop; // stack top pointer
120 Double_t fBeginTime; //time when monitoring starts
121 ULong64_t fPos; //position in memory where alloc/free happens
122 Int_t fTimems; //10000*(current time - begin time)
123 Int_t fNBytes; //number of bytes allocated/freed
124 Int_t fBtID; //back trace identifier
125 Int_t fMaxCalls; //max number of malloc/frees to register in the output Tree
126 Int_t fBufferSize; //max number of malloc/free to keep in the buffer
127 Int_t fBufN; //current number of alloc or free in the buffer
128 ULong64_t *fBufPos; //position in memory where alloc/free happens
129 Int_t *fBufTimems; //10000*(current time - begin time)
130 Int_t *fBufNBytes; //number of bytes allocated/freed
131 Int_t *fBufBtID; //back trace identifier
132 Int_t *fIndex; //array to sort fBufPos
133 Bool_t *fMustWrite; //flag to write or not the entry
135 private:
141 // for Debug. A counter of all (de)allacations.
145 ClassDef(TMemStatMng, 0) // a manager of memstat sessions.
146 };
#define b(i)
Definition RSha256.hxx:100
#define a(i)
Definition RSha256.hxx:99
unsigned short UShort_t
Definition RtypesCore.h:40
unsigned char UChar_t
Definition RtypesCore.h:38
unsigned long ULong_t
Definition RtypesCore.h:55
double Double_t
Definition RtypesCore.h:59
unsigned long long ULong64_t
Definition RtypesCore.h:74
#define ClassDef(name, id)
Definition Rtypes.h:325
bool add(ULong_t addr, Int_t idx)
Definition TMemStatMng.h:37
Container_t::iterator pos_type
Definition TMemStatMng.h:33
Container_t::value_type value_type
Definition TMemStatMng.h:34
std::map< ULong_t, Int_t > Container_t
Definition TMemStatMng.h:32
std::map< SCustomDigest, Int_t > CRCSet_t
Definition TMemStatMng.h:76
Int_t generateBTID(UChar_t *CRCdigest, Int_t stackEntries, void **stackPointers)
An internal function, which returns a bitid for a corresponding CRC digest cache variables.
static void MacAllocHook(void *ptr, size_t size)
AllocHook - a static function a special memory hook for Mac OS X memory zones.
TMemStatHook::FreeHookFunc_t fPreviousFreeHook
old malloc function
Definition TMemStatMng.h:99
static void FreeHook(void *ptr, const void *)
FreeHook - a static function A glibc memory deallocation hook.
static void MacFreeHook(void *ptr)
AllocHook - a static function a special memory hook for Mac OS X memory zones.
static TMemStatMng * fgInstance
tree to dump information
void Disable()
Disble memory hooks.
TObjArray * fFAddrsList
TMemStatFAddrContainer fFAddrs
static void * AllocHook(size_t size, const void *)
AllocHook - a static function A glibc memory allocation hook.
TTree * fDumpTree
file to dump current information
virtual ~TMemStatMng()
if an instance is destructed - the hooks are reseted to old hooks
void Init()
old free function
void Enable()
Enable memory hooks.
void SetBufferSize(Int_t buffersize)
Set the maximum number of alloc/free calls to be buffered.
TMemStatHook::MallocHookFunc_t fPreviousMallocHook
Definition TMemStatMng.h:98
void AddPointer(void *ptr, Int_t size)
Add pointer to table.
static void Close()
Close - a static function This method stops the manager, flashes all the buffered data and closes the...
void SetMaxCalls(Int_t maxcalls)
Set the maximum number of new/delete registered in the output Tree.
void FillTree()
loop on all entries in the buffer and fill the output Tree entries with alloc and free in the buffer ...
static void * fgStackTop
void SetUseGNUBuiltinBacktrace(Bool_t newVal)
Definition TMemStatMng.h:92
static TMemStatMng * GetInstance()
GetInstance - a static function Initialize a singleton of MemStat manager.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition TFile.h:54
1-D histogram with an int per channel (see TH1 documentation)}
Definition TH1.h:534
void(* FreeHookFunc_t)(void *ptr, const void *caller)
void *(* MallocHookFunc_t)(size_t size, const void *caller)
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
An array of TObjects.
Definition TObjArray.h:37
Mother of all ROOT objects.
Definition TObject.h:37
The TTimeStamp encapsulates seconds and ns since EPOCH.
Definition TTimeStamp.h:71
A TTree represents a columnar dataset.
Definition TTree.h:79
bool operator<(const SCustomDigest &a, const SCustomDigest &b)
Definition TMemStatMng.h:65
const UShort_t g_digestSize
Definition TMemStatMng.h:54
UChar_t fValue[g_digestSize]
Definition TMemStatMng.h:63
SCustomDigest(UChar_t _val[g_digestSize])
Definition TMemStatMng.h:59