Frameworks/base: Stop profiling on uncaught exception

When "handling" an uncaught exception, make an attempt to stop
profiling. In case profiling was active, this will avoid losing
the profiling buffer.

Bug: 26291225
Change-Id: Ie5f5517b46ed89d0456a4aac9d4ff3b713d1d8aa
This commit is contained in:
Andreas Gampe
2016-01-28 20:11:41 -08:00
parent a481b48dcf
commit 4c79fea9ef
2 changed files with 17 additions and 0 deletions

View File

@@ -4660,6 +4660,16 @@ public final class ActivityThread {
}
}
/**
* Public entrypoint to stop profiling. This is required to end profiling when the app crashes,
* so that profiler data won't be lost.
*
* @hide
*/
public void stopProfiling() {
mProfiler.stopProfiling();
}
static final void handleDumpHeap(boolean managed, DumpHeapData dhd) {
if (managed) {
try {

View File

@@ -86,6 +86,13 @@ public class RuntimeInit {
Clog_e(TAG, message.toString(), e);
}
// Try to end profiling. If a profiler is running at this point, and we kill the
// process (below), the in-memory buffer will be lost. So try to stop, which will
// flush the buffer. (This makes method trace profiling useful to debug crashes.)
if (ActivityThread.currentActivityThread() != null) {
ActivityThread.currentActivityThread().stopProfiling();
}
// Bring up crash dialog, wait for it to be dismissed
ActivityManagerNative.getDefault().handleApplicationCrash(
mApplicationObject, new ApplicationErrorReport.CrashInfo(e));