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

Commit 4164dfa9 authored by Varun Shah's avatar Varun Shah
Browse files

Update logging of AppBackgroundRestrictionsInfo atom.

Clean up how the AppBackgroundRestrictionsInfo atom is logged
by using the generated class file.

Bug: 217744262
Test: statsd_testdrive 441
Change-Id: Idde098c438a5fe8be3e6cee0e0831ec596d77d83
parent 5dc38453
Loading
Loading
Loading
Loading
+17 −75
Original line number Diff line number Diff line
@@ -32,8 +32,6 @@ import android.annotation.SystemService;
import android.annotation.UserHandleAware;
import android.content.Context;

import com.android.internal.util.FrameworkStatsLog;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections;
@@ -453,62 +451,6 @@ public class PowerExemptionManager {
    @Retention(RetentionPolicy.SOURCE)
    public @interface ReasonCode {}

    private static final int EXEMPTION_REASON_SYSTEM_UID = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_SYSTEM_UID;
    private static final int EXEMPTION_REASON_ALLOWLISTED_PACKAGE = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_ALLOWLISTED_PACKAGE;
    private static final int EXEMPTION_REASON_COMPANION_DEVICE_MANAGER = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_COMPANION_DEVICE_MANAGER;
    private static final int EXEMPTION_REASON_DEVICE_DEMO_MODE = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_DEVICE_DEMO_MODE;
    private static final int EXEMPTION_REASON_DEVICE_OWNER = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_DEVICE_OWNER;
    private static final int EXEMPTION_REASON_PROFILE_OWNER = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_PROFILE_OWNER;
    private static final int EXEMPTION_REASON_PROC_STATE_PERSISTENT = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_PROC_STATE_PERSISTENT;
    private static final int EXEMPTION_REASON_PROC_STATE_PERSISTENT_UI = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_PROC_STATE_PERSISTENT_UI;
    private static final int EXEMPTION_REASON_OP_ACTIVATE_VPN = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_OP_ACTIVATE_VPN;
    private static final int EXEMPTION_REASON_OP_ACTIVATE_PLATFORM_VPN = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_OP_ACTIVATE_PLATFORM_VPN;
    private static final int EXEMPTION_REASON_SYSTEM_MODULE = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_SYSTEM_MODULE;
    private static final int EXEMPTION_REASON_CARRIER_PRIVILEGED_APP = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_CARRIER_PRIVILEGED_APP;
    private static final int EXEMPTION_REASON_SYSTEM_ALLOW_LISTED = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_SYSTEM_ALLOW_LISTED;
    private static final int EXEMPTION_REASON_ROLE_DIALER = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_ROLE_DIALER;
    private static final int EXEMPTION_REASON_ROLE_EMERGENCY = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_ROLE_EMERGENCY;
    private static final int EXEMPTION_REASON_DENIED = FrameworkStatsLog
            .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_DENIED;
    /**
     * List of exemption reason codes used for statsd logging in AppBackgroundRestrictionsInfo atom.
     * @hide
     */
    @IntDef(prefix = { "EXEMPTION_REASON_" }, value = {
            EXEMPTION_REASON_SYSTEM_UID,
            EXEMPTION_REASON_ALLOWLISTED_PACKAGE,
            EXEMPTION_REASON_COMPANION_DEVICE_MANAGER,
            EXEMPTION_REASON_DEVICE_DEMO_MODE,
            EXEMPTION_REASON_DEVICE_OWNER,
            EXEMPTION_REASON_PROFILE_OWNER,
            EXEMPTION_REASON_PROC_STATE_PERSISTENT,
            EXEMPTION_REASON_PROC_STATE_PERSISTENT_UI,
            EXEMPTION_REASON_OP_ACTIVATE_VPN,
            EXEMPTION_REASON_OP_ACTIVATE_PLATFORM_VPN,
            EXEMPTION_REASON_SYSTEM_MODULE,
            EXEMPTION_REASON_CARRIER_PRIVILEGED_APP,
            EXEMPTION_REASON_SYSTEM_ALLOW_LISTED,
            EXEMPTION_REASON_ROLE_DIALER,
            EXEMPTION_REASON_ROLE_EMERGENCY,
            EXEMPTION_REASON_DENIED,
    })
    public @interface ExemptionReason {}

    /**
     * @hide
     */
@@ -679,40 +621,40 @@ public class PowerExemptionManager {
     * @hide
     * @return the reason code mapped to statsd for the AppBackgroundRestrictionsInfo atom.
     */
    public static @ExemptionReason int getExemptionReasonForStatsd(@ReasonCode int reasonCode) {
    public static int getExemptionReasonForStatsd(@ReasonCode int reasonCode) {
        switch (reasonCode) {
            case REASON_SYSTEM_UID:
                return EXEMPTION_REASON_SYSTEM_UID;
                return AppBackgroundRestrictionsInfo.REASON_SYSTEM_UID;
            case REASON_ALLOWLISTED_PACKAGE:
                return EXEMPTION_REASON_ALLOWLISTED_PACKAGE;
                return AppBackgroundRestrictionsInfo.REASON_ALLOWLISTED_PACKAGE;
            case REASON_COMPANION_DEVICE_MANAGER:
                return EXEMPTION_REASON_COMPANION_DEVICE_MANAGER;
                return AppBackgroundRestrictionsInfo.REASON_COMPANION_DEVICE_MANAGER;
            case REASON_DEVICE_DEMO_MODE:
                return EXEMPTION_REASON_DEVICE_DEMO_MODE;
                return AppBackgroundRestrictionsInfo.REASON_DEVICE_DEMO_MODE;
            case REASON_DEVICE_OWNER:
                return EXEMPTION_REASON_DEVICE_OWNER;
                return AppBackgroundRestrictionsInfo.REASON_DEVICE_OWNER;
            case REASON_PROFILE_OWNER:
                return EXEMPTION_REASON_PROFILE_OWNER;
                return AppBackgroundRestrictionsInfo.REASON_PROFILE_OWNER;
            case REASON_PROC_STATE_PERSISTENT:
                return EXEMPTION_REASON_PROC_STATE_PERSISTENT;
                return AppBackgroundRestrictionsInfo.REASON_PROC_STATE_PERSISTENT;
            case REASON_PROC_STATE_PERSISTENT_UI:
                return EXEMPTION_REASON_PROC_STATE_PERSISTENT_UI;
                return AppBackgroundRestrictionsInfo.REASON_PROC_STATE_PERSISTENT_UI;
            case REASON_OP_ACTIVATE_VPN:
                return EXEMPTION_REASON_OP_ACTIVATE_VPN;
                return AppBackgroundRestrictionsInfo.REASON_OP_ACTIVATE_VPN;
            case REASON_OP_ACTIVATE_PLATFORM_VPN:
                return EXEMPTION_REASON_OP_ACTIVATE_PLATFORM_VPN;
                return AppBackgroundRestrictionsInfo.REASON_OP_ACTIVATE_PLATFORM_VPN;
            case REASON_SYSTEM_MODULE:
                return EXEMPTION_REASON_SYSTEM_MODULE;
                return AppBackgroundRestrictionsInfo.REASON_SYSTEM_MODULE;
            case REASON_CARRIER_PRIVILEGED_APP:
                return EXEMPTION_REASON_CARRIER_PRIVILEGED_APP;
                return AppBackgroundRestrictionsInfo.REASON_CARRIER_PRIVILEGED_APP;
            case REASON_SYSTEM_ALLOW_LISTED:
                return EXEMPTION_REASON_SYSTEM_ALLOW_LISTED;
                return AppBackgroundRestrictionsInfo.REASON_SYSTEM_ALLOW_LISTED;
            case REASON_ROLE_DIALER:
                return EXEMPTION_REASON_ROLE_DIALER;
                return AppBackgroundRestrictionsInfo.REASON_ROLE_DIALER;
            case REASON_ROLE_EMERGENCY:
                return EXEMPTION_REASON_ROLE_EMERGENCY;
                return AppBackgroundRestrictionsInfo.REASON_ROLE_EMERGENCY;
            default:
                return EXEMPTION_REASON_DENIED;
                return AppBackgroundRestrictionsInfo.REASON_DENIED;
        }
    }

+6 −12
Original line number Diff line number Diff line
@@ -266,22 +266,16 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy>
                }
                FrameworkStatsLog.write(FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO,
                        uid,
                        FrameworkStatsLog
                                .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_UNKNOWN,
                        FrameworkStatsLog
                                .APP_BACKGROUND_RESTRICTIONS_INFO__THRESHOLD__THRESHOLD_UNKNOWN,
                        FrameworkStatsLog
                                .APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__UNKNOWN_TRACKER,
                        AppBackgroundRestrictionsInfo.LEVEL_UNKNOWN, // RestrictionLevel
                        AppBackgroundRestrictionsInfo.THRESHOLD_UNKNOWN,
                        AppBackgroundRestrictionsInfo.UNKNOWN_TRACKER,
                        null /*byte[] fgs_tracker_info*/,
                        getBatteryTrackerInfoProtoLocked(uid) /*byte[] battery_tracker_info*/,
                        null /*byte[] broadcast_events_tracker_info*/,
                        null /*byte[] bind_service_events_tracker_info*/,
                        FrameworkStatsLog
                                .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_UNKNOWN,
                        FrameworkStatsLog
                                .APP_BACKGROUND_RESTRICTIONS_INFO__OPT_LEVEL__UNKNOWN,
                        FrameworkStatsLog
                                .APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_UNKNOWN,
                        AppBackgroundRestrictionsInfo.REASON_UNKNOWN, // ExemptionReason
                        AppBackgroundRestrictionsInfo.UNKNOWN, // OptimizationLevel
                        AppBackgroundRestrictionsInfo.SDK_UNKNOWN, // TargetSdk
                        isLowRamDeviceStatic());
            }
        }
+34 −52
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ import android.content.pm.ServiceInfo.ForegroundServiceType;
import android.database.ContentObserver;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.AppBackgroundRestrictionsInfo;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
@@ -123,7 +124,6 @@ import android.os.HandlerExecutor;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.PowerExemptionManager.ExemptionReason;
import android.os.PowerExemptionManager.ReasonCode;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -1881,76 +1881,59 @@ public final class AppRestrictionController {
    private int getRestrictionLevelStatsd(@RestrictionLevel int level) {
        switch (level) {
            case RESTRICTION_LEVEL_UNKNOWN:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_UNKNOWN;
                return AppBackgroundRestrictionsInfo.LEVEL_UNKNOWN;
            case RESTRICTION_LEVEL_UNRESTRICTED:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_UNRESTRICTED;
                return AppBackgroundRestrictionsInfo.LEVEL_UNRESTRICTED;
            case RESTRICTION_LEVEL_EXEMPTED:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_EXEMPTED;
                return AppBackgroundRestrictionsInfo.LEVEL_EXEMPTED;
            case RESTRICTION_LEVEL_ADAPTIVE_BUCKET:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_ADAPTIVE_BUCKET;
                return AppBackgroundRestrictionsInfo.LEVEL_ADAPTIVE_BUCKET;
            case RESTRICTION_LEVEL_RESTRICTED_BUCKET:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_RESTRICTED_BUCKET;
                return AppBackgroundRestrictionsInfo.LEVEL_RESTRICTED_BUCKET;
            case RESTRICTION_LEVEL_BACKGROUND_RESTRICTED:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_BACKGROUND_RESTRICTED;
                return AppBackgroundRestrictionsInfo.LEVEL_BACKGROUND_RESTRICTED;
            case RESTRICTION_LEVEL_HIBERNATION:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_HIBERNATION;
                return AppBackgroundRestrictionsInfo.LEVEL_HIBERNATION;
            default:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__RESTRICTION_LEVEL__LEVEL_UNKNOWN;
                return AppBackgroundRestrictionsInfo.LEVEL_UNKNOWN;
        }
    }

    private int getThresholdStatsd(int reason) {
        switch (reason) {
            case REASON_MAIN_FORCED_BY_SYSTEM:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__THRESHOLD__THRESHOLD_RESTRICTED;
                return AppBackgroundRestrictionsInfo.THRESHOLD_RESTRICTED;
            case REASON_MAIN_FORCED_BY_USER:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__THRESHOLD__THRESHOLD_USER;
                return AppBackgroundRestrictionsInfo.THRESHOLD_USER;
            default:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__THRESHOLD__THRESHOLD_UNKNOWN;
                return AppBackgroundRestrictionsInfo.THRESHOLD_UNKNOWN;
        }
    }

    private int getTrackerTypeStatsd(@TrackerType int type) {
        switch (type) {
            case TRACKER_TYPE_BATTERY:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__BATTERY_TRACKER;
                return AppBackgroundRestrictionsInfo.BATTERY_TRACKER;
            case TRACKER_TYPE_BATTERY_EXEMPTION:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__BATTERY_EXEMPTION_TRACKER;
                return AppBackgroundRestrictionsInfo.BATTERY_EXEMPTION_TRACKER;
            case TRACKER_TYPE_FGS:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__FGS_TRACKER;
                return AppBackgroundRestrictionsInfo.FGS_TRACKER;
            case TRACKER_TYPE_MEDIA_SESSION:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__MEDIA_SESSION_TRACKER;
                return AppBackgroundRestrictionsInfo.MEDIA_SESSION_TRACKER;
            case TRACKER_TYPE_PERMISSION:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__PERMISSION_TRACKER;
                return AppBackgroundRestrictionsInfo.PERMISSION_TRACKER;
            case TRACKER_TYPE_BROADCAST_EVENTS:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__BROADCAST_EVENTS_TRACKER;
                return AppBackgroundRestrictionsInfo.BROADCAST_EVENTS_TRACKER;
            case TRACKER_TYPE_BIND_SERVICE_EVENTS:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__BIND_SERVICE_EVENTS_TRACKER;
                return AppBackgroundRestrictionsInfo.BIND_SERVICE_EVENTS_TRACKER;
            default:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TRACKER__UNKNOWN_TRACKER;
                return AppBackgroundRestrictionsInfo.UNKNOWN_TRACKER;
        }
    }

    private @ExemptionReason int getExemptionReasonStatsd(int uid, @RestrictionLevel int level) {
    private int getExemptionReasonStatsd(int uid, @RestrictionLevel int level) {
        if (level != RESTRICTION_LEVEL_EXEMPTED) {
            return FrameworkStatsLog
                    .APP_BACKGROUND_RESTRICTIONS_INFO__EXEMPTION_REASON__REASON_DENIED;
            return AppBackgroundRestrictionsInfo.REASON_DENIED;
        }

        @ReasonCode final int reasonCode = getBackgroundRestrictionExemptionReason(uid);
@@ -1960,16 +1943,15 @@ public final class AppRestrictionController {
    private int getOptimizationLevelStatsd(@RestrictionLevel int level) {
        switch (level) {
            case RESTRICTION_LEVEL_UNKNOWN:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__OPT_LEVEL__UNKNOWN;
                return AppBackgroundRestrictionsInfo.UNKNOWN;
            case RESTRICTION_LEVEL_UNRESTRICTED:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__OPT_LEVEL__NOT_OPTIMIZED;
                return AppBackgroundRestrictionsInfo.NOT_OPTIMIZED;
            case RESTRICTION_LEVEL_ADAPTIVE_BUCKET:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__OPT_LEVEL__OPTIMIZED;
                return AppBackgroundRestrictionsInfo.OPTIMIZED;
            case RESTRICTION_LEVEL_BACKGROUND_RESTRICTED:
                return FrameworkStatsLog
                        .APP_BACKGROUND_RESTRICTIONS_INFO__OPT_LEVEL__BACKGROUND_RESTRICTED;
                return AppBackgroundRestrictionsInfo.BACKGROUND_RESTRICTED;
            default:
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__OPT_LEVEL__UNKNOWN;
                return AppBackgroundRestrictionsInfo.UNKNOWN;
        }
    }

@@ -1977,26 +1959,26 @@ public final class AppRestrictionController {
    private int getTargetSdkStatsd(String packageName) {
        final PackageManager pm = mInjector.getPackageManager();
        if (pm == null) {
            return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_UNKNOWN;
            return AppBackgroundRestrictionsInfo.SDK_UNKNOWN;
        }
        try {
            final PackageInfo pkg = pm.getPackageInfo(packageName, 0 /* flags */);
            if (pkg == null || pkg.applicationInfo == null) {
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_UNKNOWN;
                return AppBackgroundRestrictionsInfo.SDK_UNKNOWN;
            }
            final int targetSdk = pkg.applicationInfo.targetSdkVersion;
            if (targetSdk < Build.VERSION_CODES.S) {
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_PRE_S;
                return AppBackgroundRestrictionsInfo.SDK_PRE_S;
            } else if (targetSdk < Build.VERSION_CODES.TIRAMISU) {
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_S;
                return AppBackgroundRestrictionsInfo.SDK_S;
            } else if (targetSdk == Build.VERSION_CODES.TIRAMISU) {
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_T;
                return AppBackgroundRestrictionsInfo.SDK_T;
            } else {
                return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_UNKNOWN;
                return AppBackgroundRestrictionsInfo.SDK_UNKNOWN;
            }
        } catch (PackageManager.NameNotFoundException ignored) {
        }
        return FrameworkStatsLog.APP_BACKGROUND_RESTRICTIONS_INFO__TARGET_SDK__SDK_UNKNOWN;
        return AppBackgroundRestrictionsInfo.SDK_UNKNOWN;
    }

    private void applyRestrictionLevel(String pkgName, int uid,