rpcs3/rpcs3/util/cpu_stats.hpp

40 lines
745 B
C++

#pragma once
#include "util/types.hpp"
#ifdef _WIN32
#include <pdh.h>
#include <pdhmsg.h>
#elif __linux__
#include <vector>
#endif
namespace utils
{
class cpu_stats
{
u64 m_last_cpu = 0;
u64 m_sys_cpu = 0;
u64 m_usr_cpu = 0;
#ifdef _WIN32
PDH_HQUERY m_cpu_query = nullptr;
PDH_HCOUNTER m_cpu_cores = nullptr;
#elif __linux__
size_t m_previous_idle_time_total = 0;
size_t m_previous_total_time_total = 0;
std::vector<size_t> m_previous_idle_times_per_cpu;
std::vector<size_t> m_previous_total_times_per_cpu;
#endif
public:
cpu_stats();
double get_usage();
void init_cpu_query();
void get_per_core_usage(std::vector<double>& per_core_usage, double& total_usage);
static u32 get_current_thread_count();
};
}