diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityMetricsLogger.java | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index 1ab402d804fc..e1b7dd3a081b 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -76,6 +76,7 @@ import android.app.WindowConfiguration.WindowingMode; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.IncrementalStatesInfo; import android.content.pm.dex.ArtManagerInternal; import android.content.pm.dex.PackageOptimizationInfo; import android.metrics.LogMaker; @@ -84,6 +85,7 @@ import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.os.Trace; +import android.os.incremental.IncrementalManager; import android.util.ArrayMap; import android.util.EventLog; import android.util.Log; @@ -948,6 +950,14 @@ class ActivityMetricsLogger { builder.addTaggedData(PACKAGE_OPTIMIZATION_COMPILATION_FILTER, packageOptimizationInfo.getCompilationFilter()); mMetricsLogger.write(builder); + + // Incremental info + boolean isIncremental = false, isLoading = false; + final String codePath = info.applicationInfo.getCodePath(); + if (codePath != null && IncrementalManager.isIncrementalPath(codePath)) { + isIncremental = true; + isLoading = isIncrementalLoading(info.packageName, info.userId); + } FrameworkStatsLog.write( FrameworkStatsLog.APP_START_OCCURRED, info.applicationInfo.uid, @@ -967,7 +977,10 @@ class ActivityMetricsLogger { packageOptimizationInfo.getCompilationFilter(), info.sourceType, info.sourceEventDelayMs, - isHibernating); + isHibernating, + isIncremental, + isLoading, + info.launchedActivityName.hashCode()); if (DEBUG_METRICS) { Slog.i(TAG, String.format("APP_START_OCCURRED(%s, %s, %s, %s, %s)", @@ -982,6 +995,12 @@ class ActivityMetricsLogger { logAppStartMemoryStateCapture(info); } + private boolean isIncrementalLoading(String packageName, int userId) { + final IncrementalStatesInfo info = mSupervisor.mService.getPackageManagerInternalLocked() + .getIncrementalStatesInfo(packageName, 0 /* filterCallingUid */, userId); + return info != null && info.isLoading(); + } + private void logAppDisplayed(TransitionInfoSnapshot info) { if (info.type != TYPE_TRANSITION_WARM_LAUNCH && info.type != TYPE_TRANSITION_COLD_LAUNCH) { return; @@ -1063,6 +1082,14 @@ class ActivityMetricsLogger { mMetricsLogger.write(builder); final PackageOptimizationInfo packageOptimizationInfo = infoSnapshot.getPackageOptimizationInfo(getArtManagerInternal()); + // Incremental info + boolean isIncremental = false, isLoading = false; + final String codePath = info.mLastLaunchedActivity.info.applicationInfo.getCodePath(); + if (codePath != null && IncrementalManager.isIncrementalPath(codePath)) { + isIncremental = true; + isLoading = isIncrementalLoading(info.mLastLaunchedActivity.packageName, + info.mLastLaunchedActivity.mUserId); + } FrameworkStatsLog.write( FrameworkStatsLog.APP_START_FULLY_DRAWN, info.mLastLaunchedActivity.info.applicationInfo.uid, @@ -1076,7 +1103,10 @@ class ActivityMetricsLogger { packageOptimizationInfo.getCompilationReason(), packageOptimizationInfo.getCompilationFilter(), info.mSourceType, - info.mSourceEventDelayMs); + info.mSourceEventDelayMs, + isIncremental, + isLoading, + info.mLastLaunchedActivity.info.name.hashCode()); // Ends the trace started at the beginning of this function. This is located here to allow // the trace slice to have a noticable duration. |