Add a dumpBitcode() method to facilitate debugging.

Change-Id: I300bc9cf9f06c315c053cb302fdf33a9ca899972
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index 6255b44..71761f1 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -242,6 +242,44 @@
     rsc->mHal.funcs.script.invokeFunction(rsc, this, slot, data, len);
 }
 
+static const bool kDebugBitcode = false;
+
+#ifndef RS_COMPATIBILITY_LIB
+#ifndef ANDROID_RS_SERIALIZE
+
+static bool dumpBitcodeFile(const char *cacheDir, const char *resName,
+                            const char *suffix, const uint8_t *bitcode,
+                            size_t bitcodeLen) {
+    std::string f(cacheDir);
+    f.append("/");
+    f.append(resName);
+    f.append("#");
+    f.append(suffix);
+    f.append(".bc");
+
+    if (!ScriptC::createCacheDir(cacheDir)) {
+        return false;
+    }
+
+    FILE *fp = fopen(f.c_str(), "w");
+    if (!fp) {
+        ALOGE("Could not open %s", f.c_str());
+        return false;
+    }
+
+    size_t nWritten = fwrite(bitcode, 1, bitcodeLen, fp);
+    fclose(fp);
+    if (nWritten != bitcodeLen) {
+        ALOGE("Could not write %s", f.c_str());
+        return false;
+    }
+    return true;
+}
+
+#endif  // !ANDROID_RS_SERIALIZE
+#endif  // !RS_COMPATIBILITY_LIB
+
+
 bool ScriptC::runCompiler(Context *rsc,
                           const char *resName,
                           const char *cacheDir,
@@ -282,6 +320,12 @@
     bitcode = (const uint8_t *) BT->getTranslatedBitcode();
     bitcodeLen = BT->getTranslatedBitcodeSize();
 
+    if (kDebugBitcode) {
+        if (!dumpBitcodeFile(cacheDir, resName, "after", bitcode, bitcodeLen)) {
+            return false;
+        }
+    }
+
 #endif
     if (!cacheDir) {
         // MUST BE FIXED BEFORE ANYTHING USING C++ API IS RELEASED