/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#include "xstd/xstd.h"
#include "xstd/h/string.h"
#include "xstd/h/iostream.h"
#include "xstd/h/iomanip.h"
#include "xstd/Error.h"
#include "xstd/ResourceUsage.h"
ResourceUsage ResourceUsage::Current() {
ResourceUsage ru;
ru.update();
return ru;
}
ResourceUsage::ResourceUsage() {
memset(this, 0, sizeof(*this));
}
Time ResourceUsage::sysTime() const {
return Time(ru_stime);
}
Time ResourceUsage::userTime() const {
return Time(ru_utime);
}
Time ResourceUsage::cpuTime() const {
return userTime() + sysTime();
}
Size ResourceUsage::maxResSize() const {
return ::MaxRss2Size(ru_maxrss);
}
long ResourceUsage::physPageFaults() const {
return ru_majflt;
}
bool ResourceUsage::update() {
#if defined(HAVE_GETRUSAGE) && defined(RUSAGE_SELF)
return ::getrusage(RUSAGE_SELF, this) == 0;
#else
Error::Last(EOPNOTSUPP);
return false;
#endif
}
void ResourceUsage::report(ostream &os, const String &pfx) const {
os <<
pfx << "CPU Usage: "
<< sysTime() << " sys + "
<< userTime() << " user = "
<< cpuTime()
<< endl;
if (Size sz = maxResSize())
os << pfx << "Maximum Resident Size: " << sz << endl;
os
<< pfx << "Page faults with physical i/o: " << physPageFaults() << endl
;
}
syntax highlighted by Code2HTML, v. 0.9.1