From 3b55675a442a173eb1337ba3c5866cd30cefb504 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 13 Dec 2010 16:53:28 -0800 Subject: [PATCH] Add a new, optional "is sensitive thread?" hook. The Android framework implements this hook in Ie6f58d130a29. Bug: 3226270 Change-Id: I7342248e5699a22b71647e7cfeec52ec871cefaf --- vm/Globals.h | 1 + vm/Jni.c | 2 ++ vm/Sync.c | 15 +++++++++------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/vm/Globals.h b/vm/Globals.h index c2639cb74..aa3be76d8 100644 --- a/vm/Globals.h +++ b/vm/Globals.h @@ -105,6 +105,7 @@ struct DvmGlobals { 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 f2ee2ae23..0d525a013 100644 --- a/vm/Jni.c +++ b/vm/Jni.c @@ -4288,6 +4288,8 @@ jint JNI_CreateJavaVM(JavaVM** p_vm, JNIEnv** p_env, void* vm_args) 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 0a0e65a50..967a0d01e 100644 --- a/vm/Sync.c +++ b/vm/Sync.c @@ -408,9 +408,12 @@ static void logContentionEvent(Thread *self, u4 waitMs, u4 samplePercent, 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 @@ static void logContentionEvent(Thread *self, u4 waitMs, u4 samplePercent, /* 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)); -- 2.11.0