Loading services/core/java/com/android/server/pm/BroadcastHelper.java +5 −1 Original line number Diff line number Diff line Loading @@ -363,6 +363,10 @@ public final class BroadcastHelper { final boolean isForWholeApp = componentNames.contains(packageName); final String callingPackageNameForTrace = mContext.getPackageManager().getNameForUid( callingUidForTrace); PackageMetrics.reportPackageChangedBroadcast(callingUidForTrace, packageUid, isForWholeApp, reasonForTrace); if (isForWholeApp) { tracePackageChangedBroadcastEvent(true /* applyFlag */, reasonForTrace, packageName, "<implicit>" /* targetPackageName */, "whole" /* targetComponent */, Loading Loading @@ -779,7 +783,7 @@ public final class BroadcastHelper { dontKillApp, new ArrayList<>(Collections.singletonList(pkg.getPackageName())), pkg.getUid(), null /* reason */, "static_shared_library_changed" /* reasonForTrace */, PackageMetrics.STRING_STATIC_SHARED_LIBRARY_CHANGED, Process.SYSTEM_UID); } } Loading services/core/java/com/android/server/pm/PackageManagerService.java +6 −6 Original line number Diff line number Diff line Loading @@ -3588,7 +3588,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (!mHandler.hasMessages(SEND_PENDING_BROADCAST)) { mHandler.sendMessageDelayed( mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */, "reset_component_state_changed" /* obj */), BROADCAST_DELAY); PackageMetrics.STRING_RESET_COMPONENT_STATE_CHANGED), BROADCAST_DELAY); } } Loading Loading @@ -3923,7 +3923,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (!mHandler.hasMessages(SEND_PENDING_BROADCAST)) { mHandler.sendMessageDelayed( mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */, "component_label_icon_changed" /* obj */), BROADCAST_DELAY); PackageMetrics.STRING_COMPONENT_LABEL_ICON_CHANGED), BROADCAST_DELAY); } } Loading Loading @@ -4180,7 +4180,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService : BROADCAST_DELAY_DURING_STARTUP; mHandler.sendMessageDelayed( mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */, "component_state_changed" /* obj */), 0 /* arg2 */, PackageMetrics.STRING_COMPONENT_STATE_CHANGED), broadcastDelay); } } Loading Loading @@ -4220,7 +4220,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService userId, pkgSettings.get(packageName).getAppId()); mBroadcastHelper.sendPackageChangedBroadcast(newSnapshot, packageName, false /* dontKillApp */, components, packageUid, null /* reason */, "component_state_changed" /* reasonForTrace */, callingUid); PackageMetrics.STRING_COMPONENT_STATE_CHANGED, callingUid); } } finally { Binder.restoreCallingIdentity(callingId); Loading Loading @@ -4444,7 +4444,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService true /* dontKillApp */, new ArrayList<>(Collections.singletonList(pkg.getPackageName())), pkg.getUid(), Intent.ACTION_OVERLAY_CHANGED, "overlay_changed" /* reasonForTrace */, Intent.ACTION_OVERLAY_CHANGED, PackageMetrics.STRING_OVERLAY_CHANGED, Process.SYSTEM_UID); } }, overlayFilter); Loading Loading @@ -6482,7 +6482,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService final int packageUid = UserHandle.getUid(userIds[i], appId); mBroadcastHelper.sendPackageChangedBroadcast(snapShot, packageName, true /* dontKillApp */, components, packageUid, reason, "mime_group_changed" /* reasonForTrace */, callingUid); PackageMetrics.STRING_MIME_GROUP_CHANGED, callingUid); } } }); Loading services/core/java/com/android/server/pm/PackageMetrics.java +41 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,16 @@ final class PackageMetrics { public @interface StepInt { } public static final String STRING_COMPONENT_STATE_CHANGED = "component_state_changed"; public static final String STRING_COMPONENT_LABEL_ICON_CHANGED = "component_label_icon_changed"; public static final String STRING_RESET_COMPONENT_STATE_CHANGED = "reset_component_state_changed"; public static final String STRING_MIME_GROUP_CHANGED = "mime_group_changed"; public static final String STRING_OVERLAY_CHANGED = "overlay_changed"; public static final String STRING_STATIC_SHARED_LIBRARY_CHANGED = "static_shared_library_changed"; public static final String STRING_TEST = "test"; private final long mInstallStartTimestampMillis; private final SparseArray<InstallStep> mInstallSteps = new SparseArray<>(); private final InstallRequest mInstallRequest; Loading Loading @@ -492,4 +502,35 @@ final class PackageMetrics { FrameworkStatsLog.write(FrameworkStatsLog.COMPONENT_STATE_CHANGED_REPORTED, uid, componentOldState, componentNewState, isLauncher, isForWholeApp, callingUid); } public static void reportPackageChangedBroadcast(int callingUid, int targetUid, boolean isForWholeApp, String reason) { FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED, callingUid, targetUid, convertPackageChangedReasonStringToInteger(reason, isForWholeApp)); } private static int convertPackageChangedReasonStringToInteger(String reason, boolean isForWholeApp) { return switch (reason) { case STRING_COMPONENT_STATE_CHANGED -> isForWholeApp ? FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_PACKAGE_STATE_CHANGED : FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_COMPONENT_STATE_CHANGED; case STRING_COMPONENT_LABEL_ICON_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_COMPONENT_LABEL_ICON_CHANGED; case STRING_RESET_COMPONENT_STATE_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_COMPONENT_STATE_RESET; case STRING_MIME_GROUP_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_MIME_GROUP_CHANGED; case STRING_OVERLAY_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_OVERLAY_CHANGED; case STRING_STATIC_SHARED_LIBRARY_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_STATIC_SHARED_LIBRARY_CHANGED; case STRING_TEST -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_TEST; default -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_UNSPECIFIED; }; } } services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/BroadcastHelperTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -199,7 +199,7 @@ public class BroadcastHelperTest { mBroadcastHelper.sendPackageChangedBroadcast(mMockSnapshot, PACKAGE_CHANGED_TEST_PACKAGE_NAME, true /* dontKillApp */, componentNames, UserHandle.USER_SYSTEM, "test" /* reason */, "test" /* reasonForTrace */, UserHandle.USER_SYSTEM, "test" /* reason */, PackageMetrics.STRING_TEST, Binder.getCallingUid()); } } Loading
services/core/java/com/android/server/pm/BroadcastHelper.java +5 −1 Original line number Diff line number Diff line Loading @@ -363,6 +363,10 @@ public final class BroadcastHelper { final boolean isForWholeApp = componentNames.contains(packageName); final String callingPackageNameForTrace = mContext.getPackageManager().getNameForUid( callingUidForTrace); PackageMetrics.reportPackageChangedBroadcast(callingUidForTrace, packageUid, isForWholeApp, reasonForTrace); if (isForWholeApp) { tracePackageChangedBroadcastEvent(true /* applyFlag */, reasonForTrace, packageName, "<implicit>" /* targetPackageName */, "whole" /* targetComponent */, Loading Loading @@ -779,7 +783,7 @@ public final class BroadcastHelper { dontKillApp, new ArrayList<>(Collections.singletonList(pkg.getPackageName())), pkg.getUid(), null /* reason */, "static_shared_library_changed" /* reasonForTrace */, PackageMetrics.STRING_STATIC_SHARED_LIBRARY_CHANGED, Process.SYSTEM_UID); } } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +6 −6 Original line number Diff line number Diff line Loading @@ -3588,7 +3588,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (!mHandler.hasMessages(SEND_PENDING_BROADCAST)) { mHandler.sendMessageDelayed( mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */, "reset_component_state_changed" /* obj */), BROADCAST_DELAY); PackageMetrics.STRING_RESET_COMPONENT_STATE_CHANGED), BROADCAST_DELAY); } } Loading Loading @@ -3923,7 +3923,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (!mHandler.hasMessages(SEND_PENDING_BROADCAST)) { mHandler.sendMessageDelayed( mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */, "component_label_icon_changed" /* obj */), BROADCAST_DELAY); PackageMetrics.STRING_COMPONENT_LABEL_ICON_CHANGED), BROADCAST_DELAY); } } Loading Loading @@ -4180,7 +4180,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService : BROADCAST_DELAY_DURING_STARTUP; mHandler.sendMessageDelayed( mHandler.obtainMessage(SEND_PENDING_BROADCAST, callingUid, 0 /* arg2 */, "component_state_changed" /* obj */), 0 /* arg2 */, PackageMetrics.STRING_COMPONENT_STATE_CHANGED), broadcastDelay); } } Loading Loading @@ -4220,7 +4220,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService userId, pkgSettings.get(packageName).getAppId()); mBroadcastHelper.sendPackageChangedBroadcast(newSnapshot, packageName, false /* dontKillApp */, components, packageUid, null /* reason */, "component_state_changed" /* reasonForTrace */, callingUid); PackageMetrics.STRING_COMPONENT_STATE_CHANGED, callingUid); } } finally { Binder.restoreCallingIdentity(callingId); Loading Loading @@ -4444,7 +4444,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService true /* dontKillApp */, new ArrayList<>(Collections.singletonList(pkg.getPackageName())), pkg.getUid(), Intent.ACTION_OVERLAY_CHANGED, "overlay_changed" /* reasonForTrace */, Intent.ACTION_OVERLAY_CHANGED, PackageMetrics.STRING_OVERLAY_CHANGED, Process.SYSTEM_UID); } }, overlayFilter); Loading Loading @@ -6482,7 +6482,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService final int packageUid = UserHandle.getUid(userIds[i], appId); mBroadcastHelper.sendPackageChangedBroadcast(snapShot, packageName, true /* dontKillApp */, components, packageUid, reason, "mime_group_changed" /* reasonForTrace */, callingUid); PackageMetrics.STRING_MIME_GROUP_CHANGED, callingUid); } } }); Loading
services/core/java/com/android/server/pm/PackageMetrics.java +41 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,16 @@ final class PackageMetrics { public @interface StepInt { } public static final String STRING_COMPONENT_STATE_CHANGED = "component_state_changed"; public static final String STRING_COMPONENT_LABEL_ICON_CHANGED = "component_label_icon_changed"; public static final String STRING_RESET_COMPONENT_STATE_CHANGED = "reset_component_state_changed"; public static final String STRING_MIME_GROUP_CHANGED = "mime_group_changed"; public static final String STRING_OVERLAY_CHANGED = "overlay_changed"; public static final String STRING_STATIC_SHARED_LIBRARY_CHANGED = "static_shared_library_changed"; public static final String STRING_TEST = "test"; private final long mInstallStartTimestampMillis; private final SparseArray<InstallStep> mInstallSteps = new SparseArray<>(); private final InstallRequest mInstallRequest; Loading Loading @@ -492,4 +502,35 @@ final class PackageMetrics { FrameworkStatsLog.write(FrameworkStatsLog.COMPONENT_STATE_CHANGED_REPORTED, uid, componentOldState, componentNewState, isLauncher, isForWholeApp, callingUid); } public static void reportPackageChangedBroadcast(int callingUid, int targetUid, boolean isForWholeApp, String reason) { FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED, callingUid, targetUid, convertPackageChangedReasonStringToInteger(reason, isForWholeApp)); } private static int convertPackageChangedReasonStringToInteger(String reason, boolean isForWholeApp) { return switch (reason) { case STRING_COMPONENT_STATE_CHANGED -> isForWholeApp ? FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_PACKAGE_STATE_CHANGED : FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_COMPONENT_STATE_CHANGED; case STRING_COMPONENT_LABEL_ICON_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_COMPONENT_LABEL_ICON_CHANGED; case STRING_RESET_COMPONENT_STATE_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_COMPONENT_STATE_RESET; case STRING_MIME_GROUP_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_MIME_GROUP_CHANGED; case STRING_OVERLAY_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_OVERLAY_CHANGED; case STRING_STATIC_SHARED_LIBRARY_CHANGED -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_STATIC_SHARED_LIBRARY_CHANGED; case STRING_TEST -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_TEST; default -> FrameworkStatsLog.PACKAGE_CHANGED_BROADCAST_REPORTED__REASON__PACKAGE_CHANGED_REASON_UNSPECIFIED; }; } }
services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/BroadcastHelperTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -199,7 +199,7 @@ public class BroadcastHelperTest { mBroadcastHelper.sendPackageChangedBroadcast(mMockSnapshot, PACKAGE_CHANGED_TEST_PACKAGE_NAME, true /* dontKillApp */, componentNames, UserHandle.USER_SYSTEM, "test" /* reason */, "test" /* reasonForTrace */, UserHandle.USER_SYSTEM, "test" /* reason */, PackageMetrics.STRING_TEST, Binder.getCallingUid()); } }