diff --git a/lib/Renderscript/RSCompilerDriver.cpp b/lib/Renderscript/RSCompilerDriver.cpp
index 3438246..bf18667 100644
--- a/lib/Renderscript/RSCompilerDriver.cpp
+++ b/lib/Renderscript/RSCompilerDriver.cpp
@@ -79,7 +79,7 @@
 RSExecutable *
 RSCompilerDriver::loadScriptCache(const char *pOutputPath,
                                   const RSInfo::DependencyTableTy &pDeps) {
-  android::StopWatch load_time("bcc: RSCompilerDriver::loadScriptCache time");
+  //android::StopWatch load_time("bcc: RSCompilerDriver::loadScriptCache time");
   RSExecutable *result = NULL;
 
   if (is_force_recompile())
@@ -102,8 +102,8 @@
   InputFile *output_file = new (std::nothrow) InputFile(pOutputPath);
 
   if ((output_file == NULL) || output_file->hasError()) {
-    ALOGE("Unable to open the %s for read! (%s)", pOutputPath,
-          output_file->getErrorMessage().c_str());
+      //      ALOGE("Unable to open the %s for read! (%s)", pOutputPath,
+      //            output_file->getErrorMessage().c_str());
     delete output_file;
     return NULL;
   }
@@ -192,7 +192,7 @@
                                 const char *pRuntimePath,
                                 const RSInfo::DependencyTableTy &pDeps,
                                 bool pSkipLoad) {
-  android::StopWatch compile_time("bcc: RSCompilerDriver::compileScript time");
+  //android::StopWatch compile_time("bcc: RSCompilerDriver::compileScript time");
   RSExecutable *result = NULL;
   RSInfo *info = NULL;
 
@@ -243,8 +243,8 @@
   OutputFile *output_file = new (std::nothrow) OutputFile(pOutputPath, flags);
 
   if ((output_file == NULL) || output_file->hasError()) {
-    ALOGE("Unable to open the %s for write! (%s)", pOutputPath,
-          output_file->getErrorMessage().c_str());
+      ALOGE("Unable to open %s for write! (%s)", pOutputPath,
+            output_file->getErrorMessage().c_str());
     delete info;
     delete output_file;
     return NULL;
@@ -337,7 +337,7 @@
                                       size_t pBitcodeSize,
                                       const char *pRuntimePath,
                                       RSLinkRuntimeCallback pLinkRuntimeCallback) {
-  android::StopWatch build_time("bcc: RSCompilerDriver::build time");
+    //  android::StopWatch build_time("bcc: RSCompilerDriver::build time");
   //===--------------------------------------------------------------------===//
   // Check parameters.
   //===--------------------------------------------------------------------===//
diff --git a/lib/Renderscript/RSExecutable.cpp b/lib/Renderscript/RSExecutable.cpp
index b918835..be39f3c 100644
--- a/lib/Renderscript/RSExecutable.cpp
+++ b/lib/Renderscript/RSExecutable.cpp
@@ -69,8 +69,8 @@
     const char *name = *var_iter;
     void *addr = result->getSymbolAddress(name);
     if (addr == NULL) {
-      ALOGW("RS export var at entry #%u named %s cannot be found in the result "
-            "object!", idx, name);
+        //ALOGW("RS export var at entry #%u named %s cannot be found in the result "
+        //"object!", idx, name);
     }
     result->mExportVarAddrs.push_back(addr);
   }
@@ -86,8 +86,8 @@
     const char *name = *func_iter;
     void *addr = result->getSymbolAddress(name);
     if (addr == NULL) {
-      ALOGW("RS export func at entry #%u named %s cannot be found in the result"
-            " object!", idx, name);
+        //      ALOGW("RS export func at entry #%u named %s cannot be found in the result"
+        //" object!", idx, name);
     }
     result->mExportFuncAddrs.push_back(addr);
   }
@@ -105,8 +105,8 @@
     expanded_func_name.append(".expand");
     void *addr = result->getSymbolAddress(expanded_func_name.string());
     if (addr == NULL) {
-      ALOGW("Expanded RS foreach at entry #%u named %s cannot be found in the "
-            "result object!", idx, expanded_func_name.string());
+        //      ALOGW("Expanded RS foreach at entry #%u named %s cannot be found in the "
+        //            "result object!", idx, expanded_func_name.string());
     }
     result->mExportForeachFuncAddrs.push_back(addr);
   }
@@ -169,8 +169,8 @@
   android::Vector<const char *> func_list;
 
   if (!mLoader->getSymbolNameList(func_list, ObjectLoader::kFunctionType)) {
-    ALOGW("Failed to get the list of function name in %s for disassembly!",
-          mObjFile->getName().c_str());
+      ALOGW("Failed to get the list of function name in %s for disassembly!",
+            mObjFile->getName().c_str());
   } else {
     // Disassemble each function
     for (size_t i = 0, e = func_list.size(); i != e; i++) {
@@ -186,12 +186,12 @@
                       reinterpret_cast<const uint8_t *>(func), func_size);
 
       if (result != kDisassembleSuccess) {
-        ALOGW("Failed to disassemble the function %s in %s (error code=%zu)!",
-              func_name, mObjFile->getName().c_str(), static_cast<size_t>(result));
+          ALOGW("Failed to disassemble the function %s in %s (error code=%zu)!",
+                func_name, mObjFile->getName().c_str(), static_cast<size_t>(result));
 
         if (result != kDisassembleInvalidInstruction) {
-          ALOGW("And the error occured in disassembler is fatal. Abort "
-                "disassembler on remaining functions!");
+            ALOGW("And the error occured in disassembler is fatal. Abort "
+                  "disassembler on remaining functions!");
           break;
         }
       }
