diff --git a/src/system.c b/src/system.c index 564c389..b80c3b0 100644 --- a/src/system.c +++ b/src/system.c @@ -1183,6 +1183,37 @@ int mock__mkdir(char *path) return _mkdir(path); } +BOOL mock_QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) +{ + if (lpPerformanceCount == NULL) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + // Use simulated time to generate deterministic performance counter + // Frequency is 10 MHz (10,000,000 counts per second) + const LONGLONG frequency = 10000000LL; + + LONGLONG count = (LONGLONG)simulated_time.tv_sec * frequency; + count += ((LONGLONG)simulated_time.tv_nsec * frequency) / 1000000000LL; + + lpPerformanceCount->QuadPart = count; + return TRUE; +} + +BOOL mock_QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency) +{ + if (lpFrequency == NULL) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + // Return fixed frequency of 10 MHz for deterministic behavior + // This is a common frequency on modern systems + lpFrequency->QuadPart = 10000000LL; // 10 million counts per second + return TRUE; +} + #else int mock_clock_gettime(clockid_t clockid, struct timespec *tp) diff --git a/src/system.h b/src/system.h index d16e504..ca6614d 100644 --- a/src/system.h +++ b/src/system.h @@ -61,6 +61,8 @@ BOOL mock_FlushFileBuffers(HANDLE handle); BOOL mock_ReadFile(HANDLE handle, char *dst, DWORD len, DWORD *num, OVERLAPPED *ov); BOOL mock_WriteFile(HANDLE handle, char *src, DWORD len, DWORD *num, OVERLAPPED *ov); BOOL mock_GetFileSizeEx(HANDLE handle, LARGE_INTEGER *buf); +BOOL mock_QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount); +BOOL mock_QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); char* mock__fullpath(char *path, char *dst, int cap); int mock__mkdir(char *path); #else