>From 77e7f89aafa847cfea4ea96edc566e3086af18b2 Mon Sep 17 00:00:00 2001
From: Andrew Eikum <aeikum@codeweavers.com>
Date: Mon, 9 Nov 2020 11:05:16 -0600
Subject: [PATCH] mmdevapi render
To: wine-devel <wine-devel@winehq.org>
Reply-To: wine-devel <wine-devel@winehq.org>,Andrew Eikum <aeikum@codeweavers.com>

---
 dlls/mmdevapi/tests/render.c | 31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c
index 3ad00eaa2e2..8679bc3826b 100644
--- a/dlls/mmdevapi/tests/render.c
+++ b/dlls/mmdevapi/tests/render.c
@@ -921,6 +921,16 @@ static void test_padding(void)
     IAudioClient_Release(ac);
 }
 
+static UINT32 get_ms_since(LARGE_INTEGER *out_time)
+{
+    LARGE_INTEGER last_time = *out_time, freq;
+
+    QueryPerformanceCounter(out_time);
+    QueryPerformanceFrequency(&freq);
+
+    return (out_time->QuadPart - last_time.QuadPart) * 1000 / freq.QuadPart;
+}
+
 static void test_clock(int share)
 {
     HRESULT hr;
@@ -931,11 +941,12 @@ static void test_clock(int share)
     UINT32 pad, gbsize, bufsize, fragment, parts, avail, slept = 0, sum = 0;
     BYTE *data;
     WAVEFORMATEX *pwfx;
-    LARGE_INTEGER hpctime, hpctime0, hpcfreq;
+    LARGE_INTEGER hpctime, hpctime0, hpcfreq, last_time;
     REFERENCE_TIME minp, defp, t1, t2;
     REFERENCE_TIME duration = 5000000, period = 150000;
     int i;
 
+    last_time.QuadPart = 0;
     ok(QueryPerformanceFrequency(&hpcfreq), "PerfFrequency failed\n");
 
     hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
@@ -1077,8 +1088,9 @@ static void test_clock(int share)
     hr = IAudioClient_Start(ac); /* #1 */
     ok(hr == S_OK, "Start failed: %08x\n", hr);
 
+    get_ms_since(&last_time);
     Sleep(100);
-    slept += 100;
+    slept += get_ms_since(&last_time);
 
     hr = IAudioClient_GetStreamLatency(ac, &t1);
     ok(hr == S_OK, "GetStreamLatency failed: %08x\n", hr);
@@ -1104,8 +1116,9 @@ static void test_clock(int share)
     hr = IAudioClient_Start(ac); /* #2 */
     ok(hr == S_OK, "Start failed: %08x\n", hr);
 
+    get_ms_since(&last_time);
     Sleep(100);
-    slept += 100;
+    slept += get_ms_since(&last_time);
 
     hr = IAudioClient_GetCurrentPadding(ac, &pad);
     ok(hr == S_OK, "GetCurrentPadding failed: %08x\n", hr);
@@ -1181,8 +1194,9 @@ static void test_clock(int share)
     hr = IAudioClient_Start(ac); /* #3 */
     ok(hr == S_OK, "Start failed: %08x\n", hr);
 
+    get_ms_since(&last_time);
     Sleep(100);
-    slept += 100;
+    slept += get_ms_since(&last_time);
 
     hr = IAudioClock_GetPosition(acl, &pos, NULL);
     ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
@@ -1241,8 +1255,9 @@ static void test_clock(int share)
         hr = IAudioClient_Stop(ac);
         ok(hr == S_OK, "Stop failed: %08x\n", hr);
 
+        get_ms_since(&last_time);
         Sleep(20);
-        slept += 20;
+        slept += get_ms_since(&last_time);
 
         hr = IAudioClient_Reset(ac);
         ok(hr == AUDCLNT_E_BUFFER_OPERATION_PENDING, "Reset failed: %08x\n", hr);
@@ -1264,8 +1279,9 @@ static void test_clock(int share)
      * that it has ~10ms to supply data for the next cycle.  IOW, a zero GCP
      * with no data written for over a period causes an underrun. */
 
+    get_ms_since(&last_time);
     Sleep(350);
-    slept += 350;
+    slept += get_ms_since(&last_time);
     ok(QueryPerformanceCounter(&hpctime), "PerfCounter failed\n");
     trace("hpctime %u after %ums\n",
         (ULONG)((hpctime.QuadPart-hpctime0.QuadPart)*1000/hpcfreq.QuadPart), slept);
@@ -1276,8 +1292,9 @@ static void test_clock(int share)
     last = pos;
 
     for(i=0; i < 9; i++) {
+        get_ms_since(&last_time);
         Sleep(100);
-        slept += 100;
+        slept += get_ms_since(&last_time);
 
         hr = IAudioClock_GetPosition(acl, &pos, &pcpos);
         ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
-- 
2.29.2

