#include "TStatus.h"
#include "Riostream.h"
#include "TClass.h"
#include "TList.h"
#include "TProofDebug.h"
ClassImp(TStatus)
TStatus::TStatus() : fExitStatus(-1), fVirtMemMax(-1), fResMemMax(-1),
fVirtMaxMst(-1), fResMaxMst(-1)
{
SetName("PROOF_Status");
fIter = fMsgs.begin();
}
void TStatus::Add(const char *mesg)
{
fMsgs.insert(mesg);
Reset();
}
Int_t TStatus::Merge(TCollection *li)
{
TIter stats(li);
PDB(kOutput,1)
Info("Merge", "start: max virtual memory: %.2f MB \tmax resident memory: %.2f MB ",
GetVirtMemMax()/1024., GetResMemMax()/1024.);
while (TObject *obj = stats()) {
TStatus *s = dynamic_cast<TStatus*>(obj);
if (s == 0) continue;
MsgIter_t i = s->fMsgs.begin();
MsgIter_t end = s->fMsgs.end();
for (; i != end; i++)
Add(i->c_str());
SetMemValues(s->GetVirtMemMax(), s->GetResMemMax());
SetMemValues(s->GetVirtMemMax(kTRUE), s->GetResMemMax(kTRUE), kTRUE);
PDB(kOutput,1)
Info("Merge", "during: max virtual memory: %.2f MB \t"
"max resident memory: %.2f MB ",
GetVirtMemMax()/1024., GetResMemMax()/1024.);
if (GetVirtMemMax(kTRUE) > 0) {
PDB(kOutput,1)
Info("Merge", "during: max master virtual memory: %.2f MB \t"
"max master resident memory: %.2f MB ",
GetVirtMemMax(kTRUE)/1024., GetResMemMax(kTRUE)/1024.);
}
}
return fMsgs.size();
}
void TStatus::Print(Option_t * ) const
{
Printf("OBJ: %s\t%s\t%s", IsA()->GetName(), GetName(), (IsOk() ? "OK" : "ERROR"));
MsgIter_t i = fMsgs.begin();
for (; i != fMsgs.end(); i++)
Printf("\t%s", (*i).c_str());
Printf(" Max worker virtual memory: %.2f MB \tMax worker resident memory: %.2f MB ",
GetVirtMemMax()/1024., GetResMemMax()/1024.);
Printf(" Max master virtual memory: %.2f MB \tMax master resident memory: %.2f MB ",
GetVirtMemMax(kTRUE)/1024., GetResMemMax(kTRUE)/1024.);
}
void TStatus::Reset()
{
fIter = fMsgs.begin();
}
const char *TStatus::NextMesg()
{
if (fIter != fMsgs.end()) {
return (*fIter++).c_str();
} else {
return 0;
}
}
void TStatus::SetMemValues(Long_t vmem, Long_t rmem, Bool_t master)
{
if (master) {
if (vmem > 0. && (fVirtMaxMst < 0. || vmem > fVirtMaxMst)) fVirtMaxMst = vmem;
if (rmem > 0. && (fResMaxMst < 0. || rmem > fResMaxMst)) fResMaxMst = rmem;
} else {
if (vmem > 0. && (fVirtMemMax < 0. || vmem > fVirtMemMax)) fVirtMemMax = vmem;
if (rmem > 0. && (fResMemMax < 0. || rmem > fResMemMax)) fResMemMax = rmem;
}
}