Merge "Force save profiles for SIGUSR1"
diff --git a/runtime/jit/profile_saver.h b/runtime/jit/profile_saver.h
index 4dd8e60..be2bffc 100644
--- a/runtime/jit/profile_saver.h
+++ b/runtime/jit/profile_saver.h
@@ -52,8 +52,10 @@
REQUIRES(!Locks::profiler_lock_, !wait_lock_)
NO_THREAD_SAFETY_ANALYSIS;
- // Just for testing purpose.
+ // For testing or manual purposes (SIGUSR1).
static void ForceProcessProfiles();
+
+ // Just for testing purpose.
static bool HasSeenMethod(const std::string& profile,
const DexFile* dex_file,
uint16_t method_idx);
diff --git a/runtime/signal_catcher.cc b/runtime/signal_catcher.cc
index 674459d..0b7ea2f 100644
--- a/runtime/signal_catcher.cc
+++ b/runtime/signal_catcher.cc
@@ -32,6 +32,7 @@
#include "base/unix_file/fd_file.h"
#include "class_linker.h"
#include "gc/heap.h"
+#include "jit/profile_saver.h"
#include "os.h"
#include "runtime.h"
#include "scoped_thread_state_change-inl.h"
@@ -154,8 +155,9 @@
}
void SignalCatcher::HandleSigUsr1() {
- LOG(INFO) << "SIGUSR1 forcing GC (no HPROF)";
+ LOG(INFO) << "SIGUSR1 forcing GC (no HPROF) and profile save";
Runtime::Current()->GetHeap()->CollectGarbage(false);
+ ProfileSaver::ForceProcessProfiles();
}
int SignalCatcher::WaitForSignal(Thread* self, SignalSet& signals) {