| 491 | static PGetProcessMemoryInfo pGetProcessMemoryInfo = NULL; |
| 492 | |
| 493 | static void mi_stat_process_info(mi_msecs_t* elapsed, mi_msecs_t* utime, mi_msecs_t* stime, size_t* current_rss, size_t* peak_rss, size_t* current_commit, size_t* peak_commit, size_t* page_faults) |
| 494 | { |
| 495 | *elapsed = _mi_clock_end(mi_process_start); |
| 496 | FILETIME ct; |
| 497 | FILETIME ut; |
| 498 | FILETIME st; |
| 499 | FILETIME et; |
| 500 | GetProcessTimes(GetCurrentProcess(), &ct, &et, &st, &ut); |
| 501 | *utime = filetime_msecs(&ut); |
| 502 | *stime = filetime_msecs(&st); |
| 503 | |
| 504 | // load psapi on demand |
| 505 | if (pGetProcessMemoryInfo == NULL) { |
| 506 | HINSTANCE hDll = LoadLibrary(TEXT("psapi.dll")); |
| 507 | if (hDll != NULL) { |
| 508 | pGetProcessMemoryInfo = (PGetProcessMemoryInfo)(void (*)(void))GetProcAddress(hDll, "GetProcessMemoryInfo"); |
| 509 | } |
| 510 | } |
| 511 | |
| 512 | // get process info |
| 513 | PROCESS_MEMORY_COUNTERS info; |
| 514 | memset(&info, 0, sizeof(info)); |
| 515 | if (pGetProcessMemoryInfo != NULL) { |
| 516 | pGetProcessMemoryInfo(GetCurrentProcess(), &info, sizeof(info)); |
| 517 | } |
| 518 | *current_rss = (size_t)info.WorkingSetSize; |
| 519 | *peak_rss = (size_t)info.PeakWorkingSetSize; |
| 520 | *current_commit = (size_t)info.PagefileUsage; |
| 521 | *peak_commit = (size_t)info.PeakPagefileUsage; |
| 522 | *page_faults = (size_t)info.PageFaultCount; |
| 523 | } |
| 524 | |
| 525 | #elif !defined(__wasi__) && (defined(__unix__) || defined(__unix) || defined(unix) || defined(__APPLE__) || defined(__HAIKU__)) |
| 526 | #include <stdio.h> |
no test coverage detected