diff --git a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java index 167ed864fbcdf..c1b2a9c1987a0 100644 --- a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java +++ b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java @@ -299,32 +299,6 @@ class ProcessErrorStateRecord { } } - // Check if package is still being loaded - float loadingProgress = 1; - IncrementalMetrics incrementalMetrics = null; - final PackageManagerInternal packageManagerInternal = mService.getPackageManagerInternal(); - if (mApp.info != null && mApp.info.packageName != null) { - IncrementalStatesInfo incrementalStatesInfo = - packageManagerInternal.getIncrementalStatesInfo( - mApp.info.packageName, mApp.uid, mApp.userId); - if (incrementalStatesInfo != null) { - loadingProgress = incrementalStatesInfo.getProgress(); - } - final String codePath = mApp.info.getCodePath(); - if (IncrementalManager.isIncrementalPath(codePath)) { - // Report in the main log that the incremental package is still loading - Slog.e(TAG, "App ANR on incremental package " + mApp.info.packageName - + " which is " + ((int) (loadingProgress * 100)) + "% loaded."); - final IBinder incrementalService = ServiceManager.getService( - Context.INCREMENTAL_SERVICE); - if (incrementalService != null) { - final IncrementalManager incrementalManager = new IncrementalManager( - IIncrementalService.Stub.asInterface(incrementalService)); - incrementalMetrics = incrementalManager.getMetrics(codePath); - } - } - } - // Log the ANR to the main log. StringBuilder info = new StringBuilder(); info.setLength(0); @@ -342,11 +316,6 @@ class ProcessErrorStateRecord { info.append("Parent: ").append(parentShortComponentName).append("\n"); } - if (incrementalMetrics != null) { - // Report in the main log about the incremental package - 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 @@ -418,6 +387,37 @@ class ProcessErrorStateRecord { mService.mProcessList.mAppExitInfoTracker.scheduleLogAnrTrace( pid, mApp.uid, mApp.getPackageList(), tracesFile, offsets[0], offsets[1]); } + + // Check if package is still being loaded + float loadingProgress = 1; + IncrementalMetrics incrementalMetrics = null; + final PackageManagerInternal packageManagerInternal = mService.getPackageManagerInternal(); + if (mApp.info != null && mApp.info.packageName != null) { + IncrementalStatesInfo incrementalStatesInfo = + packageManagerInternal.getIncrementalStatesInfo( + mApp.info.packageName, mApp.uid, mApp.userId); + if (incrementalStatesInfo != null) { + loadingProgress = incrementalStatesInfo.getProgress(); + } + final String codePath = mApp.info.getCodePath(); + if (IncrementalManager.isIncrementalPath(codePath)) { + // Report in the main log that the incremental package is still loading + Slog.e(TAG, "App ANR on incremental package " + mApp.info.packageName + + " which is " + ((int) (loadingProgress * 100)) + "% loaded."); + final IBinder incrementalService = ServiceManager.getService( + Context.INCREMENTAL_SERVICE); + if (incrementalService != null) { + final IncrementalManager incrementalManager = new IncrementalManager( + IIncrementalService.Stub.asInterface(incrementalService)); + incrementalMetrics = incrementalManager.getMetrics(codePath); + } + } + } + if (incrementalMetrics != null) { + // Report in the main log about the incremental package + info.append("Package is ").append((int) (loadingProgress * 100)).append("% loaded.\n"); + } + FrameworkStatsLog.write(FrameworkStatsLog.ANR_OCCURRED, mApp.uid, mApp.processName, activityShortComponentName == null ? "unknown" : activityShortComponentName, annotation,