Maarten Lankhorst : winealsa: Increase performance of wavein getposition.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 30 08:55:41 CDT 2007


Module: wine
Branch: master
Commit: f45128c2a6bc5c304244c258ead1378a855b6aba
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f45128c2a6bc5c304244c258ead1378a855b6aba

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Thu Jul  5 00:41:59 2007 +0200

winealsa: Increase performance of wavein getposition.

---

 dlls/winealsa.drv/wavein.c |   12 +++---------
 1 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/dlls/winealsa.drv/wavein.c b/dlls/winealsa.drv/wavein.c
index 5d731eb..412edd2 100644
--- a/dlls/winealsa.drv/wavein.c
+++ b/dlls/winealsa.drv/wavein.c
@@ -154,7 +154,7 @@ static	DWORD	CALLBACK	widRecorder(LPVOID pmt)
     DWORD               frames_per_period;
 
     wwi->state = WINE_WS_STOPPED;
-    wwi->dwTotalRecorded = 0;
+    InterlockedExchange((LONG*)&wwi->dwTotalRecorded, 0);
     wwi->lpQueuePtr = NULL;
 
     SetEvent(wwi->hStartUpEvent);
@@ -198,7 +198,7 @@ static	DWORD	CALLBACK	widRecorder(LPVOID pmt)
 		    {
 			/* update number of bytes recorded in current buffer and by this device */
                         lpWaveHdr->dwBytesRecorded += bytesRead;
-			wwi->dwTotalRecorded       += bytesRead;
+			InterlockedExchangeAdd((LONG*)&wwi->dwTotalRecorded, bytesRead);
 
 			/* buffer is full. notify client */
 			if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength)
@@ -247,7 +247,7 @@ static	DWORD	CALLBACK	widRecorder(LPVOID pmt)
 
                         /* update number of bytes recorded in current buffer and by this device */
                         lpWaveHdr->dwBytesRecorded += dwToCopy;
-                        wwi->dwTotalRecorded += dwToCopy;
+                        InterlockedExchangeAdd((LONG*)&wwi->dwTotalRecorded, dwToCopy);
                         bytesRead -= dwToCopy;
                         pOffset   += dwToCopy;
 
@@ -385,10 +385,6 @@ static	DWORD	CALLBACK	widRecorder(LPVOID pmt)
 		HeapFree(GetProcessHeap(), 0, buffer);
 		ExitThread(0);
 		/* shouldn't go here */
-	    case WINE_WM_UPDATE:
-		SetEvent(ev);
-		break;
-
 	    default:
 		FIXME("unknown message %d\n", msg);
 		break;
@@ -784,8 +780,6 @@ static DWORD widGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
     }
 
     wwi = &WInDev[wDevID];
-    ALSA_AddRingMessage(&wwi->msgRing, WINE_WM_UPDATE, 0, TRUE);
-
     return ALSA_bytes_to_mmtime(lpTime, wwi->dwTotalRecorded, &wwi->format);
 }
 




More information about the wine-cvs mailing list