diff options
author | Kenneth Heafield <github@kheafield.com> | 2012-06-28 18:58:59 +0400 |
---|---|---|
committer | Kenneth Heafield <github@kheafield.com> | 2012-06-28 18:58:59 +0400 |
commit | c7e02eb67743b31f4cfab752c60fe96f8e2ae630 (patch) | |
tree | e25d3c43e239e02ae3adff5262b8f674decb826a /util/usage.cc | |
parent | f6b3354f396f8d90e273a3a8255b68cfd5f33f70 (diff) |
KenLM e3b5c55910 including rest costs for probing
Diffstat (limited to 'util/usage.cc')
-rw-r--r-- | util/usage.cc | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/util/usage.cc b/util/usage.cc new file mode 100644 index 000000000..e5cf76f05 --- /dev/null +++ b/util/usage.cc @@ -0,0 +1,46 @@ +#include "util/usage.hh" + +#include <fstream> +#include <ostream> + +#include <string.h> +#include <ctype.h> +#if !defined(_WIN32) && !defined(_WIN64) +#include <sys/resource.h> +#include <sys/time.h> +#endif + +namespace util { + +namespace { +#if !defined(_WIN32) && !defined(_WIN64) +float FloatSec(const struct timeval &tv) { + return static_cast<float>(tv.tv_sec) + (static_cast<float>(tv.tv_usec) / 1000000.0); +} +#endif +} // namespace + +void PrintUsage(std::ostream &out) { +#if !defined(_WIN32) && !defined(_WIN64) + struct rusage usage; + if (getrusage(RUSAGE_SELF, &usage)) { + perror("getrusage"); + return; + } + out << "user\t" << FloatSec(usage.ru_utime) << "\nsys\t" << FloatSec(usage.ru_stime) << '\n'; + + // Linux doesn't set memory usage :-(. + std::ifstream status("/proc/self/status", std::ios::in); + std::string line; + while (getline(status, line)) { + if (!strncmp(line.c_str(), "VmRSS:\t", 7)) { + out << "VmRSS: " << (line.c_str() + 7) << '\n'; + break; + } else if (!strncmp(line.c_str(), "VmPeak:\t", 8)) { + out << "VmPeak: " << (line.c_str() + 8) << '\n'; + } + } +#endif +} + +} // namespace util |