From 479caf15e7f57da098fd94b5f947ac45a6496663 Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Mon, 11 Jul 2016 15:40:03 -0700 Subject: 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 Tested-by: Petri Dish Buildbot Reviewed-by: Gerald Combs --- wsutil/time_util.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'wsutil/time_util.c') 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 + #include "time_util.h" +#ifndef _WIN32 +#include +#include +#else +#include +#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 * -- cgit v1.2.3