summaryrefslogtreecommitdiffstats
path: root/vm/compiler/Compiler.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm/compiler/Compiler.c')
-rw-r--r--vm/compiler/Compiler.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/vm/compiler/Compiler.c b/vm/compiler/Compiler.c
index 39b42cd82..dfcd88f34 100644
--- a/vm/compiler/Compiler.c
+++ b/vm/compiler/Compiler.c
@@ -344,6 +344,7 @@ bool compilerThreadStartup(void)
gDvmJit.compilerHighWater =
COMPILER_WORK_QUEUE_SIZE - (COMPILER_WORK_QUEUE_SIZE/4);
gDvmJit.pProfTable = pJitProfTable;
+ gDvmJit.pProfTableCopy = pJitProfTable;
dvmUnlockMutex(&gDvmJit.tableLock);
/* Signal running threads to refresh their cached pJitTable pointers */
@@ -511,3 +512,23 @@ void dvmCompilerShutdown(void)
LOGD("Compiler thread has shut down\n");
}
}
+
+
+void dvmCompilerStateRefresh()
+{
+ bool jitActive;
+ bool jitActivate;
+
+ dvmLockMutex(&gDvmJit.tableLock);
+ jitActive = gDvmJit.pProfTable != NULL;
+ jitActivate = !(gDvm.debuggerActive || (gDvm.activeProfilers > 0));
+
+ if (jitActivate && !jitActive) {
+ gDvmJit.pProfTable = gDvmJit.pProfTableCopy;
+ dvmUnlockMutex(&gDvmJit.tableLock);
+ } else if (!jitActivate && jitActive) {
+ gDvmJit.pProfTable = NULL;
+ dvmUnlockMutex(&gDvmJit.tableLock);
+ dvmJitUnchainAll();
+ }
+}