diff --git a/src/VirtualDisplay.cpp b/src/VirtualDisplay.cpp
index 369d271..7a95042 100644
--- a/src/VirtualDisplay.cpp
+++ b/src/VirtualDisplay.cpp
@@ -23,9 +23,9 @@
 
 #include <gui/SurfaceComposerClient.h>
 
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
 #include <GLES3/gl3.h>
+#include <GLES3/gl3ext.h>
+#include <GLES2/gl2ext.h>
 
 #include <ui/Rect.h>
 
@@ -186,8 +186,9 @@
         mEventCond.wait(mMutex);
         ALOGD("Awake, frame available");
         void* ptr = processFrame_l();
-        const Event ev(EVENT_BUFFER_READY, ptr);
-        mQueue->enqueue(ev);
+
+        //const Event ev(EVENT_BUFFER_READY, ptr);
+        //mQueue->enqueue(ev);
     }
 
     ALOGV("VDS thread stopping");
@@ -223,7 +224,7 @@
     }
 
     mBufSize = mWidth * mHeight * kGlBytesPerPixel;
-    
+
     // pixel buffer for image copy
     mPBO = new GLuint[NUM_PBO];
     glGenBuffers(NUM_PBO, mPBO);
@@ -256,6 +257,9 @@
     mGlConsumer->updateTexImage();
     mGlConsumer->getTransformMatrix(texMatrix);
 
+    int64_t startWhen, blitWhen, readWhen, mapWhen, memcpyWhen, markWhen;
+    startWhen = systemTime(CLOCK_MONOTONIC);
+
     // The data is in an external texture, so we need to render it to the
     // pbuffer to get access to RGB pixel data.  We also want to flip it
     // upside-down for easy conversion to a bitmap.
@@ -263,6 +267,8 @@
     int height = mEglWindow.getHeight();
     mExtTexProgram.blit(mExtTextureName, texMatrix, 0, 0, mWidth, mHeight, true);
 
+    blitWhen = systemTime(CLOCK_MONOTONIC);
+
     GLenum glErr;
     glBindBuffer(GL_PIXEL_PACK_BUFFER, mPBO[mIndex]);
     glReadPixels(0, 0, mWidth, mHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0);
@@ -271,13 +277,28 @@
         return NULL;
     }
 
-    glBindBuffer(GL_PIXEL_PACK_BUFFER, mPBO[mIndex]);
+    readWhen = systemTime(CLOCK_MONOTONIC);
+
     void* ptr = glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, mBufSize, GL_MAP_READ_BIT);
+    mapWhen = systemTime(CLOCK_MONOTONIC);
+    //memcpy(mVNCScreen->frameBuffer, ptr, mBufSize);
+    mVNCScreen->frameBuffer = (char *)ptr;
+    memcpyWhen = systemTime(CLOCK_MONOTONIC);
+    rfbMarkRectAsModified(mVNCScreen, 0, 0, mWidth, mHeight);
+    markWhen = systemTime(CLOCK_MONOTONIC);
+
     glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
     glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
 
-    mIndex = (mIndex + 1) % NUM_PBO; 
-    return ptr;
+    ALOGV("processFrame: blit=%.3fms read=%.3fms map=%.3fms memcpy=%.3fms mark=%.3fms",
+            (blitWhen - startWhen) / 1000000.0,
+            (readWhen - blitWhen) / 1000000.0,
+            (mapWhen - readWhen) / 1000000.0,
+            (memcpyWhen - mapWhen) / 1000000.0,
+            (markWhen - memcpyWhen) / 1000000.0);
+
+    mIndex = (mIndex + 1) % NUM_PBO;
+    return mVNCScreen->frameBuffer;
 }
 
 void VirtualDisplay::release_l() {
