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.

This change is required as a base in order for
https://android-review.googlesource.com/#/c/249721/
to merge cleanly.

(Cherry picked from commit 4c79fea9ef)
Bug: 26291225
Change-Id: I35f352e5f28eafe4702da9eae587c3b65c360b3a
This commit is contained in:
Tobias Thierer
2016-08-02 17:32:26 +01:00
parent 6eb30f2060
commit 8ad86a3d1a
2 changed files with 17 additions and 0 deletions

View File

@@ -4294,6 +4294,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));