diff options
author | Gerald Combs <gerald@wireshark.org> | 2016-07-11 15:40:03 -0700 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2016-07-12 15:04:43 +0000 |
commit | 479caf15e7f57da098fd94b5f947ac45a6496663 (patch) | |
tree | fe87f6ed71aca3e4d117532918ed5ab538a79b09 /wsutil/time_util.c | |
parent | 3fe92ffabfa00d981797ef950af6eaa526617b9b (diff) |
Add resource usage logging.
Add log_resource_usage, which prints the current and elapsed user and
system times. Add a usage example in packet_list_model.cpp.
Change-Id: I747161c754a3731e540821715cc9bb10b3dc821d
Reviewed-on: https://code.wireshark.org/review/16383
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'wsutil/time_util.c')
-rw-r--r-- | wsutil/time_util.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/wsutil/time_util.c b/wsutil/time_util.c index fc0a187407..5f6ac8a39f 100644 --- a/wsutil/time_util.c +++ b/wsutil/time_util.c @@ -22,8 +22,17 @@ #include "config.h" +#include <glib.h> + #include "time_util.h" +#ifndef _WIN32 +#include <sys/time.h> +#include <sys/resource.h> +#else +#include <windows.h> +#endif + /* converts a broken down date representation, relative to UTC, * to a timestamp; it uses timegm() if it's available. * Copied from Glib source gtimer.c @@ -62,6 +71,54 @@ mktime_utc(struct tm *tm) #endif /* !HAVE_TIMEGM */ } +static double last_utime = 0.0; +static double last_stime = 0.0; + +void log_resource_usage(gboolean reset_delta, const char *format, ...) { + va_list ap; + GString *log_str = g_string_new(""); + double utime; + double stime; + +#ifndef _WIN32 + struct rusage ru; + + getrusage(RUSAGE_SELF, &ru); + + utime = ru.ru_utime.tv_sec + (ru.ru_utime.tv_usec / 1000000.0); + stime = ru.ru_stime.tv_sec + (ru.ru_stime.tv_usec / 1000000.0); +#else /* _WIN32 */ + HANDLE h_proc = GetCurrentProcess(); + FILETIME cft, eft, kft, uft; + ULARGE_INTEGER uli_time; + + GetProcessTimes(h_proc, &cft, &eft, &kft, &uft); + + uli_time.LowPart = uft.dwLowDateTime; + uli_time.HighPart = uft.dwHighDateTime; + utime = uli_time.QuadPart / 10000000.0; + uli_time.LowPart = kft.dwLowDateTime; + uli_time.HighPart = kft.dwHighDateTime; + stime = uli_time.QuadPart / 1000000000.0; +#endif /* _WIN32 */ + + if (reset_delta || last_utime == 0.0) { + last_utime = utime; + last_stime = stime; + } + + g_string_append_printf(log_str, "user %.3f +%.3f sys %.3f +%.3f ", + utime, utime - last_utime, stime, stime - last_stime); + + va_start(ap, format); + g_string_append_vprintf(log_str, format, ap); + va_end(ap); + + g_warning("%s", log_str->str); + g_string_free(log_str, TRUE); + +} + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * |