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

Commit 5884003c authored by lpeter's avatar lpeter
Browse files

Implement metrics to log the reason of the PACKAGE_CHANGED broadcast is sent.

Flag: EXEMPT bugfix

Bug: 339674378
Test: Manual test
Change-Id: Iddf8c651188c17c2b54d0d1bec4e2cadd9155f95
parent 7cd4858f
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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 */,
@@ -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);
                }
            }
+6 −6
Original line number Diff line number Diff line
@@ -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);
        }
    }

@@ -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);
        }
    }

@@ -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);
            }
        }
@@ -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);
@@ -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);
@@ -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);
                        }
                    }
                });
+41 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
        };
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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());
    }
}