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:
@@ -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 {
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user