Commit 85b51e4e authored by Max Kellermann's avatar Max Kellermann

Stats: use GetProcessTimes() on WIN32 to determine MPD uptime

Don't use GTimer if the operating system is able to tell us the uptime.
parent e53a25cb
......@@ -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)
......
......@@ -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
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment