dvmCompilerDumpStats();
#endif
- if (false) {
- dvmLockMutex(&gDvm.jniGlobalRefLock);
- dvmDumpReferenceTable(&gDvm.jniGlobalRefTable, "JNI global");
- dvmUnlockMutex(&gDvm.jniGlobalRefLock);
- }
if (false) dvmDumpTrackedAllocations(true);
dvmResumeAllThreads(SUSPEND_FOR_STACK_DUMP);
}
/*
- * Respond to a SIGUSR1 by forcing a GC. If we were built with HPROF
- * support, generate an HPROF dump file.
- *
- * (The HPROF dump generation is not all that useful now that we have
- * better ways to generate it. Consider removing this in a future release.)
+ * Respond to a SIGUSR1 by forcing a GC.
*/
static void handleSigUsr1(void)
{
-#if WITH_HPROF
- LOGI("SIGUSR1 forcing GC and HPROF dump\n");
- hprofDumpHeap(NULL, false);
-#else
LOGI("SIGUSR1 forcing GC (no HPROF)\n");
- dvmCollectGarbage(false);
-#endif
+ dvmCollectGarbage();
}
#if defined(WITH_JIT) && defined(WITH_JIT_TUNING)
+/* Sample callback function for dvmJitScanAllClassPointers */
+void printAllClass(void *ptr)
+{
+ ClassObject **classPP = (ClassObject **) ptr;
+ LOGE("class %s", (*classPP)->descriptor);
+
+}
+
/*
* Respond to a SIGUSR2 by dumping some JIT stats and possibly resetting
* the code cache.
static void handleSigUsr2(void)
{
static int codeCacheResetCount = 0;
+ gDvmJit.receivedSIGUSR2 ^= true;
if ((--codeCacheResetCount & 7) == 0) {
+ /* Dump all class pointers in the traces */
+ dvmJitScanAllClassPointers(printAllClass);
gDvmJit.codeCacheFull = true;
} else {
dvmCompilerDumpStats();
/* Stress-test unchain all */
dvmJitUnchainAll();
- LOGD("Send %d more signals to rest the code cache",
+ LOGD("Send %d more signals to reset the code cache",
codeCacheResetCount & 7);
}
+ dvmCheckInterpStateConsistency();
}
#endif