Make the renderscript timing logging available by setting debug.rs.profile=1
diff --git a/rsContext.cpp b/rsContext.cpp
index ab8d065..cc11ab2 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -20,12 +20,16 @@
 #include <ui/FramebufferNativeWindow.h>
 #include <ui/EGLUtils.h>
 
+#include <cutils/properties.h>
+
 #include <GLES/gl.h>
 #include <GLES/glext.h>
 
 using namespace android;
 using namespace android::renderscript;
 
+bool g_logTimes = -1;
+
 pthread_key_t Context::gThreadTLSKey = 0;
 
 void Context::initEGL()
@@ -113,9 +117,9 @@
 
 bool Context::runRootScript()
 {
-#if RS_LOG_TIMES
-    timerSet(RS_TIMER_CLEAR_SWAP);
-#endif
+    if (this->logTimes) {
+        timerSet(RS_TIMER_CLEAR_SWAP);
+    }
     rsAssert(mRootScript->mEnviroment.mIsRoot);
 
     eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_WIDTH, &mEGL.mWidth);
@@ -136,9 +140,9 @@
         glClear(GL_COLOR_BUFFER_BIT);
     }
 
-#if RS_LOG_TIMES
-    timerSet(RS_TIMER_SCRIPT);
-#endif
+    if (this->logTimes) {
+        timerSet(RS_TIMER_SCRIPT);
+    }
     bool ret = runScript(mRootScript.get(), 0);
     return ret;
 }
@@ -204,11 +208,19 @@
     mVertex->setupGL(this, &mStateVertex);
 }
 
+static bool get_log_times()
+{
+    char buf[PROPERTY_VALUE_MAX];
+    property_get("debug.rs.profile", buf, "0");
+    return 0 != strcmp(buf, "0");
+}
 
 void * Context::threadProc(void *vrsc)
 {
      Context *rsc = static_cast<Context *>(vrsc);
 
+     rsc->logTimes = get_log_times();
+
      rsc->initEGL();
 
      ScriptTLSStruct *tlsStruct = new ScriptTLSStruct;
@@ -240,16 +252,16 @@
 
          if (mDraw) {
              mDraw = rsc->runRootScript();
-#if RS_LOG_TIMES
-             rsc->timerSet(RS_TIMER_CLEAR_SWAP);
-#endif
+             if (rsc->logTimes) {
+                 rsc->timerSet(RS_TIMER_CLEAR_SWAP);
+             }
              eglSwapBuffers(rsc->mEGL.mDisplay, rsc->mEGL.mSurface);
-#if RS_LOG_TIMES
-             rsc->timerFrame();
-             rsc->timerSet(RS_TIMER_INTERNAL);
-             rsc->timerPrint();
-             rsc->timerReset();
-#endif
+             if (rsc->logTimes) {
+                 rsc->timerFrame();
+                 rsc->timerSet(RS_TIMER_INTERNAL);
+                 rsc->timerPrint();
+                 rsc->timerReset();
+             }
          }
          if (rsc->mObjDestroy.mNeedToEmpty) {
              rsc->objDestroyOOBRun();
diff --git a/rsContext.h b/rsContext.h
index 3e07f3e..1fb697a 100644
--- a/rsContext.h
+++ b/rsContext.h
@@ -143,6 +143,8 @@
     bool checkVersion1_1() const {return (mGL.mMajorVersion > 1) || (mGL.mMinorVersion >= 1); }
     bool checkVersion2_0() const {return mGL.mMajorVersion >= 2; }
 
+    bool logTimes;
+
 protected:
     Device *mDev;
 
@@ -215,7 +217,6 @@
     uint64_t mTimeLastFrame;
 };
 
-
 }
 }
 #endif
diff --git a/rsThreadIO.cpp b/rsThreadIO.cpp
index db4bb81..4072f06 100644
--- a/rsThreadIO.cpp
+++ b/rsThreadIO.cpp
@@ -42,13 +42,13 @@
         uint32_t cmdID = 0;
         uint32_t cmdSize = 0;
         ret = true;
-#if RS_LOG_TIMES
-        con->timerSet(Context::RS_TIMER_IDLE);
-#endif
+        if (con->logTimes) {
+            con->timerSet(Context::RS_TIMER_IDLE);
+        }
         const void * data = mToCore.get(&cmdID, &cmdSize);
-#if RS_LOG_TIMES
-        con->timerSet(Context::RS_TIMER_INTERNAL);
-#endif
+        if (con->logTimes) {
+            con->timerSet(Context::RS_TIMER_INTERNAL);
+        }
         waitForCommand = false;
         //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize);
 
diff --git a/rsUtils.h b/rsUtils.h
index ec928db..63d73a1 100644
--- a/rsUtils.h
+++ b/rsUtils.h
@@ -41,8 +41,6 @@
 #define rsAssert(v) while(0)
 #endif
 
-#define RS_LOG_TIMES 0
-
 template<typename T>
 T rsMin(T in1, T in2)
 {