Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5e235f6 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue Committed by Automerger Merge Worker
Browse files

Merge "Retrieve max ANR dialog before dumping thread stacks" into sc-dev am: ca94adde

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13699585

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I43487d242874b08aecf0ecdd3f99d38a2333378b
parents 02f1e465 ca94adde
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -329,6 +329,22 @@ class ProcessErrorStateRecord {
            info.append("Package is ").append((int) (loadingProgress * 100)).append("% loaded.\n");
        }

        // Retrieve controller with max ANR delay from AnrControllers
        // Note that we retrieve the controller before dumping stacks because dumping stacks can
        // take a few seconds, after which the cause of the ANR delay might have completed and
        // there might no longer be a valid ANR controller to cancel the dialog in that case
        AnrController anrController = mService.mActivityTaskManager.getAnrController(aInfo);
        long anrDialogDelayMs = 0;
        if (anrController != null) {
            String packageName = aInfo.packageName;
            int uid = aInfo.uid;
            anrDialogDelayMs = anrController.getAnrDelayMillis(packageName, uid);
            // Might execute an async binder call to a system app to show an interim
            // ANR progress UI
            anrController.onAnrDelayStarted(packageName, uid);
            Slog.i(TAG, "ANR delay of " + anrDialogDelayMs + "ms started for " + packageName);
        }

        StringBuilder report = new StringBuilder();
        report.append(MemoryPressureUtil.currentPsiState());
        ProcessCpuTracker processCpuTracker = new ProcessCpuTracker(true);
@@ -417,20 +433,6 @@ class ProcessErrorStateRecord {
            return;
        }

        // Retrieve max ANR delay from AnrControllers without the mService lock since the
        // controllers might in turn call into apps
        AnrController anrController = mService.mActivityTaskManager.getAnrController(aInfo);
        long anrDialogDelayMs = 0;
        if (anrController != null) {
            String packageName = aInfo.packageName;
            int uid = aInfo.uid;
            anrDialogDelayMs = anrController.getAnrDelayMillis(packageName, uid);
            // Might execute an async binder call to a system app to show an interim
            // ANR progress UI
            anrController.onAnrDelayStarted(packageName, uid);
            Slog.i(TAG, "ANR delay of " + anrDialogDelayMs + "ms started for " + packageName);
        }

        synchronized (mService) {
            // mBatteryStatsService can be null if the AMS is constructed with injector only. This
            // will only happen in tests.