diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index d1784f3..61ef5d4 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -259,6 +259,44 @@
     return 0 != strcmp(buf, "0");
 }
 
+void Context::displayDebugStats()
+{
+    char buffer[128];
+    sprintf(buffer, "Frame %i ms, Script %i ms", mTimeMSLastFrame, mTimeMSLastScript);
+    float oldR = mStateVertex.color[0];
+    float oldG = mStateVertex.color[1];
+    float oldB = mStateVertex.color[2];
+    float oldA = mStateVertex.color[3];
+
+    float shadowCol = 0.2f;
+    mStateVertex.color[0] = shadowCol;
+    mStateVertex.color[1] = shadowCol;
+    mStateVertex.color[2] = shadowCol;
+    mStateVertex.color[3] = 1.0f;
+    if (!checkVersion2_0()) {
+        glColor4f(shadowCol, shadowCol, shadowCol, 1.0f);
+    }
+    mStateFont.renderText(buffer, 5, getHeight() - 5);
+
+    float textCol = 0.9f;
+    mStateVertex.color[0] = textCol;
+    mStateVertex.color[1] = textCol;
+    mStateVertex.color[2] = textCol;
+    mStateVertex.color[3] = 1.0f;
+    if (!checkVersion2_0()) {
+        glColor4f(textCol, textCol, textCol, 1.0f);
+    }
+    mStateFont.renderText(buffer, 4, getHeight() - 6);
+
+    mStateVertex.color[0] = oldR;
+    mStateVertex.color[1] = oldG;
+    mStateVertex.color[2] = oldB;
+    mStateVertex.color[3] = oldA;
+    if (!checkVersion2_0()) {
+        glColor4f(oldR, oldG, oldB, oldA);
+    }
+}
+
 void * Context::threadProc(void *vrsc)
 {
      Context *rsc = static_cast<Context *>(vrsc);
@@ -271,6 +309,7 @@
      rsc->props.mLogScripts = getProp("debug.rs.script");
      rsc->props.mLogObjects = getProp("debug.rs.object");
      rsc->props.mLogShaders = getProp("debug.rs.shader");
+     rsc->props.mLogVisual = getProp("debug.rs.visual");
 
      ScriptTLSStruct *tlsStruct = new ScriptTLSStruct;
      if (!tlsStruct) {
@@ -308,6 +347,11 @@
          uint32_t targetTime = 0;
          if (mDraw && rsc->mIsGraphicsContext) {
              targetTime = rsc->runRootScript();
+
+             if(rsc->props.mLogVisual) {
+                 rsc->displayDebugStats();
+             }
+
              mDraw = targetTime && !rsc->mPaused;
              rsc->timerSet(RS_TIMER_CLEAR_SWAP);
              eglSwapBuffers(rsc->mEGL.mDisplay, rsc->mEGL.mSurface);
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index b8fffbf..2da3ab5 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -162,6 +162,7 @@
         bool mLogScripts;
         bool mLogObjects;
         bool mLogShaders;
+        bool mLogVisual;
     } props;
 
     void dumpDebug() const;
@@ -257,6 +258,8 @@
     void objDestroyOOBRun();
     void objDestroyOOBDestroy();
 
+    void displayDebugStats();
+
 private:
     Context();
 
