Index: /trunk/src/VBox/GuestHost/OpenGL/include/cr_net.h
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/include/cr_net.h	(revision 32923)
+++ /trunk/src/VBox/GuestHost/OpenGL/include/cr_net.h	(revision 32924)
@@ -168,4 +168,5 @@
     int total_bytes_recv;
     int recv_count;
+    int opcodes_count;
 
     /* credits for flow control */
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_clear.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_clear.c	(revision 32923)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_clear.c	(revision 32924)
@@ -32,4 +32,8 @@
     uint64_t mCallsSum;
     uint32_t *mpaCalls;
+
+    uint64_t mOpsSum;
+    uint32_t *mpaOps;
+
 } VBOXCRFPS, *PVBOXCRFPS;
 
@@ -42,4 +46,5 @@
     pFps->mpaBytesSent = crCalloc(sizeof (pFps->mpaBytesSent[0]) * cPeriods);
     pFps->mpaCalls = crCalloc(sizeof (pFps->mpaCalls[0]) * cPeriods);
+    pFps->mpaOps = crCalloc(sizeof (pFps->mpaOps[0]) * cPeriods);
 }
 
@@ -54,5 +59,5 @@
 {
     uint64_t cur = RTTimeNanoTS();
-    uint64_t curBytes, curBytesSent, curCalls;
+    uint64_t curBytes, curBytesSent, curCalls, curOps;
     int i;
 
@@ -60,4 +65,5 @@
     curBytesSent = 0;
     curCalls = 0;
+    curOps = 0;
 
     for (i = 0; i < cr_server.numClients; i++)
@@ -68,7 +74,9 @@
             curBytesSent += cr_server.clients[i]->conn->total_bytes_sent;
             curCalls += cr_server.clients[i]->conn->recv_count;
+            curOps += cr_server.clients[i]->conn->opcodes_count;
             cr_server.clients[i]->conn->total_bytes_recv = 0;
             cr_server.clients[i]->conn->total_bytes_sent = 0;
             cr_server.clients[i]->conn->recv_count = 0;
+            cr_server.clients[i]->conn->opcodes_count = 0;
         }
     }
@@ -90,4 +98,7 @@
         pFps->mpaCalls[pFps->miPeriod] = curCalls;
 
+        pFps->mOpsSum += curOps - pFps->mpaOps[pFps->miPeriod];
+        pFps->mpaOps[pFps->miPeriod] = curOps;
+
         ++pFps->miPeriod;
         pFps->miPeriod %= pFps->mcPeriods;
@@ -120,4 +131,9 @@
 {
     return vboxCrFpsGetFps(pFps) * pFps->mCallsSum / pFps->mcPeriods;
+}
+
+double vboxCrFpsGetOps(PVBOXCRFPS pFps)
+{
+    return vboxCrFpsGetFps(pFps) * pFps->mOpsSum / pFps->mcPeriods;
 }
 
@@ -181,5 +197,6 @@
       double bpsSent = vboxCrFpsGetBpsSent(&Fps);
       double cps = vboxCrFpsGetCps(&Fps);
-      crDebug("fps: %f, rec Mbps: %.1f, send Mbps: %.1f, cps: %.1f", fps, bps/(1024.0*1024.0), bpsSent/(1024.0*1024.0), cps);
+      double ops = vboxCrFpsGetOps(&Fps);
+      crDebug("fps: %f, rec Mbps: %.1f, send Mbps: %.1f, cps: %.1f, ops: %.0f", fps, bps/(1024.0*1024.0), bpsSent/(1024.0*1024.0), cps, ops);
   }
 #endif
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_stream.c
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_stream.c	(revision 32923)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_stream.c	(revision 32924)
@@ -330,4 +330,9 @@
     msg_opcodes = (const CRMessageOpcodes *) msg;
     opcodeBytes = (msg_opcodes->numOpcodes + 3) & ~0x03;
+
+#ifdef VBOXCR_LOGFPS
+    CRASSERT(cr_server.curClient && cr_server.curClient->conn && cr_server.curClient->conn->id == msg->header.conn_id);
+    cr_server.curClient->conn->opcodes_count += msg_opcodes->numOpcodes;
+#endif
 
     data_ptr = (const char *) msg_opcodes + sizeof(CRMessageOpcodes) + opcodeBytes;
