diff options
author | Max Kellermann <max@duempel.org> | 2013-11-24 20:41:00 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-11-24 20:41:00 +0100 |
commit | 85b51e4e779360a4f2ead4404bf4d6b547f6d49d (patch) | |
tree | f97779dd6e936ba15c0437ceed13085452157829 | |
parent | e53a25cbaee50fdf6b9a4a118677709b47bac4cd (diff) | |
download | mpd-85b51e4e779360a4f2ead4404bf4d6b547f6d49d.tar.gz mpd-85b51e4e779360a4f2ead4404bf4d6b547f6d49d.tar.xz mpd-85b51e4e779360a4f2ead4404bf4d6b547f6d49d.zip |
Stats: use GetProcessTimes() on WIN32 to determine MPD uptime
Don't use GTimer if the operating system is able to tell us the
uptime.
-rw-r--r-- | src/Stats.cxx | 16 | ||||
-rw-r--r-- | src/system/Clock.cxx | 26 | ||||
-rw-r--r-- | src/system/Clock.hxx | 11 |
3 files changed, 51 insertions, 2 deletions
diff --git a/src/Stats.cxx b/src/Stats.cxx index f224bdf49..a188d88ba 100644 --- a/src/Stats.cxx +++ b/src/Stats.cxx @@ -26,21 +26,29 @@ #include "DatabasePlugin.hxx" #include "DatabaseSimple.hxx" #include "util/Error.hxx" +#include "system/Clock.hxx" #include "Log.hxx" +#ifndef WIN32 #include <glib.h> static GTimer *uptime; +#endif + static DatabaseStats stats; void stats_global_init(void) { +#ifndef WIN32 uptime = g_timer_new(); +#endif } void stats_global_finish(void) { +#ifndef WIN32 g_timer_destroy(uptime); +#endif } void stats_update(void) @@ -94,9 +102,13 @@ void stats_print(Client &client) { client_printf(client, - "uptime: %lu\n" + "uptime: %u\n" "playtime: %lu\n", - (unsigned long)g_timer_elapsed(uptime, NULL), +#ifdef WIN32 + GetProcessUptimeS(), +#else + (unsigned)g_timer_elapsed(uptime, NULL), +#endif (unsigned long)(client.player_control.GetTotalPlayTime() + 0.5)); if (GetDatabase() != nullptr) diff --git a/src/system/Clock.cxx b/src/system/Clock.cxx index 347997a44..17b221c15 100644 --- a/src/system/Clock.cxx +++ b/src/system/Clock.cxx @@ -96,3 +96,29 @@ MonotonicClockUS(void) #endif } +#ifdef WIN32 + +gcc_const +static unsigned +DeltaFileTimeS(FILETIME a, FILETIME b) +{ + ULARGE_INTEGER a2, b2; + b2.LowPart = b.dwLowDateTime; + b2.HighPart = b.dwHighDateTime; + a2.LowPart = a.dwLowDateTime; + a2.HighPart = a.dwHighDateTime; + return (a2.QuadPart - b2.QuadPart) / 10000000; +} + +unsigned +GetProcessUptimeS() +{ + FILETIME creation_time, now; + GetProcessTimes(GetCurrentProcess(), &creation_time, + nullptr, nullptr, nullptr); + GetSystemTimeAsFileTime(&now); + + return DeltaFileTimeS(now, creation_time); +} + +#endif diff --git a/src/system/Clock.hxx b/src/system/Clock.hxx index 7be1127bf..28df0c7e0 100644 --- a/src/system/Clock.hxx +++ b/src/system/Clock.hxx @@ -38,4 +38,15 @@ gcc_pure uint64_t MonotonicClockUS(); +#ifdef WIN32 + +/** + * Returns the uptime of the current process in seconds. + */ +gcc_pure +unsigned +GetProcessUptimeS(); + +#endif + #endif |