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

Commit 69716fca authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Implement metrics to log the reason of the PACKAGE_CHANGED broadcast is sent." into main

parents b5c3c931 5884003c
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());
    }
}