in src/process.cc [77:105]
void GetCpuUsage(Cpu* cpu_info, uint32_t* process_index, BOOL first_pass) {
DWORD pid = cpu_info[*process_index].pid;
HANDLE hProcess;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pid);
if (hProcess == NULL) {
return;
}
FILETIME creationTime, exitTime, kernelTime, userTime;
FILETIME sysIdleTime, sysKernelTime, sysUserTime;
if (GetProcessTimes(hProcess, &creationTime, &exitTime, &kernelTime, &userTime)
&& GetSystemTimes(&sysIdleTime, &sysKernelTime, &sysUserTime)) {
if (first_pass) {
cpu_info[*process_index].initialProcRunTime = GetTotalTime(&kernelTime, &userTime);
cpu_info[*process_index].initialSystemTime = GetTotalTime(&sysKernelTime, &sysUserTime);
} else {
ULONGLONG endProcTime = GetTotalTime(&kernelTime, &userTime);
ULONGLONG endSysTime = GetTotalTime(&sysKernelTime, &sysUserTime);
cpu_info[*process_index].cpu = 100.0 * (endProcTime - cpu_info[*process_index].initialProcRunTime) / (endSysTime - cpu_info[*process_index].initialSystemTime);
}
} else {
cpu_info[*process_index].cpu = std::numeric_limits<double>::quiet_NaN();
}
CloseHandle(hProcess);
}