Merge pull request #25808 from CastagnaIT/fix_url_parse
[xbmc.git] / xbmc / platform / posix / PosixResourceCounter.cpp
blobd82ef72a4650c17a1b0a8d15530b41d67ad94d40
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "PosixResourceCounter.h"
11 #include "utils/log.h"
13 #include <errno.h>
15 #include "PlatformDefs.h"
17 CPosixResourceCounter::CPosixResourceCounter()
19 Reset();
22 CPosixResourceCounter::~CPosixResourceCounter() = default;
24 double CPosixResourceCounter::GetCPUUsage()
26 struct timeval tmNow;
27 if (gettimeofday(&tmNow, NULL) == -1)
28 CLog::Log(LOGERROR, "error {} in gettimeofday", errno);
29 else
31 double dElapsed = ( ((double)tmNow.tv_sec + (double)tmNow.tv_usec / 1000000.0) -
32 ((double)m_tmLastCheck.tv_sec + (double)m_tmLastCheck.tv_usec / 1000000.0) );
34 if (dElapsed >= 3.0)
36 struct rusage usage;
37 if (getrusage(RUSAGE_SELF, &usage) == -1)
38 CLog::Log(LOGERROR, "error {} in getrusage", errno);
39 else
41 double dUser = ( ((double)usage.ru_utime.tv_sec + (double)usage.ru_utime.tv_usec / 1000000.0) -
42 ((double)m_usage.ru_utime.tv_sec + (double)m_usage.ru_utime.tv_usec / 1000000.0) );
43 double dSys = ( ((double)usage.ru_stime.tv_sec + (double)usage.ru_stime.tv_usec / 1000000.0) -
44 ((double)m_usage.ru_stime.tv_sec + (double)m_usage.ru_stime.tv_usec / 1000000.0) );
46 m_tmLastCheck = tmNow;
47 m_usage = usage;
48 m_dLastUsage = ((dUser+dSys) / dElapsed) * 100.0;
49 return m_dLastUsage;
54 return m_dLastUsage;
57 void CPosixResourceCounter::Reset()
59 if (gettimeofday(&m_tmLastCheck, NULL) == -1)
60 CLog::Log(LOGERROR, "error {} in gettimeofday", errno);
62 if (getrusage(RUSAGE_SELF, &m_usage) == -1)
63 CLog::Log(LOGERROR, "error {} in getrusage", errno);
65 m_dLastUsage = 0.0;