Improve speed of masking
authorKurt Pattyn <pattyn.kurt@gmail.com>
Sun, 3 Nov 2013 12:28:14 +0000 (13:28 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sun, 3 Nov 2013 12:28:41 +0000 (13:28 +0100)
Change-Id: Ieb1b28ac2ae37453da5b365587b8ab0e183ae269
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
src/websockets/qwebsocketprotocol_p.cpp

index c00711b..09e717f 100644 (file)
@@ -166,20 +166,21 @@ void mask(QByteArray *payload, quint32 maskingKey)
 void mask(char *payload, quint64 size, quint32 maskingKey)
 {
     quint32 *payloadData = reinterpret_cast<quint32 *>(payload);
-    const quint32 numIterations = static_cast<quint32>(size / sizeof(quint32));
-    const quint32 remainder = size % sizeof(quint32);
-    quint32 i;
-    for (i = 0; i < numIterations; ++i)
+    quint32 numIterations = static_cast<quint32>(size / sizeof(quint32));
+    quint32 remainder = size % sizeof(quint32);
+    const quint32 offset = numIterations * sizeof(quint32);
+    //maskingKey = qToBigEndian<quint32>(maskingKey);
+    while (numIterations--)
     {
-        *(payloadData + i) ^= maskingKey;
+        *payloadData++ ^= maskingKey;
     }
-    if (remainder)
+    if (remainder)  //remainder is < 4
     {
-        const quint32 offset = i * static_cast<quint32>(sizeof(quint32));
         const char *mask = reinterpret_cast<const char *>(&maskingKey);
-        for (quint32 i = 0; i < remainder; ++i)
+        payload += offset;
+        while (remainder--)
         {
-            *(payload + offset + i) ^= (mask[(i + offset) % 4]);
+            *payload++ ^= *mask++;
         }
     }
 }