diff options
Diffstat (limited to 'vm/compiler/Compiler.c')
-rw-r--r-- | vm/compiler/Compiler.c | 21 |
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(); + } +} |