Add a new, optional "is sensitive thread?" hook.

The Android framework implements this hook in Ie6f58d130a29.

Bug: 3226270
Change-Id: I7342248e5699a22b71647e7cfeec52ec871cefaf
diff --git a/vm/Globals.h b/vm/Globals.h
index c2639cb..aa3be76 100644
--- a/vm/Globals.h
+++ b/vm/Globals.h
@@ -105,6 +105,7 @@
     int         (*vfprintfHook)(FILE*, const char*, va_list);
     void        (*exitHook)(int);
     void        (*abortHook)(void);
+    bool        (*isSensitiveThreadHook)(void);
 
     int         jniGrefLimit;       // 0 means no limit
     char*       jniTrace;
diff --git a/vm/Jni.c b/vm/Jni.c
index f2ee2ae..0d525a0 100644
--- a/vm/Jni.c
+++ b/vm/Jni.c
@@ -4288,6 +4288,8 @@
             gDvm.exitHook = args->options[i].extraInfo;
         } else if (strcmp(optStr, "abort") == 0) {
             gDvm.abortHook = args->options[i].extraInfo;
+        } else if (strcmp(optStr, "sensitiveThread") == 0) {
+            gDvm.isSensitiveThreadHook = args->options[i].extraInfo;
         } else if (strcmp(optStr, "-Xcheck:jni") == 0) {
             checkJni = true;
         } else if (strncmp(optStr, "-Xjniopts:", 10) == 0) {
diff --git a/vm/Sync.c b/vm/Sync.c
index 0a0e65a..967a0d0 100644
--- a/vm/Sync.c
+++ b/vm/Sync.c
@@ -408,9 +408,12 @@
     len = strlen(procName);
     cp = logWriteString(cp, procName, len);
 
-    /* Emit the main thread status, 5 bytes. */
-    bool isMainThread = (self->systemTid == getpid());
-    cp = logWriteInt(cp, isMainThread);
+    /* Emit the sensitive thread ("main thread") status, 5 bytes. */
+    bool isSensitive = false;
+    if (gDvm.isSensitiveThreadHook != NULL) {
+        isSensitive = gDvm.isSensitiveThreadHook();
+    }
+    cp = logWriteInt(cp, isSensitive);
 
     /* Emit self thread name string, <= 37 bytes. */
     selfName = dvmGetThreadName(self);
@@ -431,10 +434,10 @@
 
     /* Emit the lock owner source code file name, <= 37 bytes. */
     if (ownerFileName == NULL) {
-      ownerFileName = "";
+        ownerFileName = "";
     } else if (strcmp(fileName, ownerFileName) == 0) {
-      /* Common case, so save on log space. */
-      ownerFileName = "-";
+        /* Common case, so save on log space. */
+        ownerFileName = "-";
     }
     cp = logWriteString(cp, ownerFileName, strlen(ownerFileName));