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

Commit e1b717d7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fixing empty PendingAlarmInfo after alarm store changes" into sc-dev am: ea1b5d87

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14342258

Change-Id: I55a1989aa1c9c0f00ea7b3f3bae70eb430aaa70e
parents d84075d6 ea1b5d87
Loading
Loading
Loading
Loading
+31 −30
Original line number Diff line number Diff line
@@ -205,12 +205,11 @@ public class AlarmManagerService extends SystemService {
    final LocalLog mLog = new LocalLog(TAG);

    AppOpsManager mAppOps;
    IAppOpsService mAppOpsService;
    DeviceIdleInternal mLocalDeviceIdleController;
    private UsageStatsManagerInternal mUsageStatsManagerInternal;
    private ActivityManagerInternal mActivityManagerInternal;
    private PackageManagerInternal mPackageManagerInternal;
    private PermissionManagerServiceInternal mLocalPermissionManager;
    private volatile PermissionManagerServiceInternal mLocalPermissionManager;

    final Object mLock = new Object();

@@ -1506,7 +1505,7 @@ public class AlarmManagerService extends SystemService {
    @Override
    public void onStart() {
        mInjector.init();
        mMetricsHelper = new MetricsHelper(getContext());
        mMetricsHelper = new MetricsHelper(getContext(), mLock);

        mListenerDeathRecipient = new IBinder.DeathRecipient() {
            @Override
@@ -1630,10 +1629,24 @@ public class AlarmManagerService extends SystemService {
        if (phase == PHASE_SYSTEM_SERVICES_READY) {
            synchronized (mLock) {
                mConstants.start();

                mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
                mAppOpsService = mInjector.getAppOpsService();

                mLocalDeviceIdleController =
                        LocalServices.getService(DeviceIdleInternal.class);
                mUsageStatsManagerInternal =
                        LocalServices.getService(UsageStatsManagerInternal.class);

                mAppStateTracker =
                        (AppStateTrackerImpl) LocalServices.getService(AppStateTracker.class);
                mAppStateTracker.addListener(mForceAppStandbyListener);

                mClockReceiver.scheduleTimeTickEvent();
                mClockReceiver.scheduleDateChangedEvent();
            }
            IAppOpsService iAppOpsService = mInjector.getAppOpsService();
            try {
                    mAppOpsService.startWatchingMode(AppOpsManager.OP_SCHEDULE_EXACT_ALARM, null,
                iAppOpsService.startWatchingMode(AppOpsManager.OP_SCHEDULE_EXACT_ALARM, null,
                        new IAppOpsCallback.Stub() {
                            @Override
                            public void opChanged(int op, int uid, String packageName)
@@ -1649,12 +1662,6 @@ public class AlarmManagerService extends SystemService {
                        });
            } catch (RemoteException e) {
            }
                mMetricsHelper.registerPuller(mAlarmStore);

                mLocalDeviceIdleController =
                        LocalServices.getService(DeviceIdleInternal.class);
                mUsageStatsManagerInternal =
                        LocalServices.getService(UsageStatsManagerInternal.class);

            mLocalPermissionManager = LocalServices.getService(
                    PermissionManagerServiceInternal.class);
@@ -1664,13 +1671,7 @@ public class AlarmManagerService extends SystemService {
                    LocalServices.getService(AppStandbyInternal.class);
            appStandbyInternal.addListener(new AppStandbyTracker());

                mAppStateTracker =
                        (AppStateTrackerImpl) LocalServices.getService(AppStateTracker.class);
                mAppStateTracker.addListener(mForceAppStandbyListener);

                mClockReceiver.scheduleTimeTickEvent();
                mClockReceiver.scheduleDateChangedEvent();
            }
            mMetricsHelper.registerPuller(() -> mAlarmStore);
        }
    }

+31 −23
Original line number Diff line number Diff line
@@ -30,17 +30,21 @@ import android.os.SystemClock;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.FrameworkStatsLog;

import java.util.function.Supplier;

/**
 * A helper class to write logs to statsd.
 */
class MetricsHelper {
    private Context mContext;
    private final Context mContext;
    private final Object mLock;

    MetricsHelper(Context context) {
    MetricsHelper(Context context, Object lock) {
        mContext = context;
        mLock = lock;
    }

    void registerPuller(AlarmStore alarmStore) {
    void registerPuller(Supplier<AlarmStore> alarmStoreSupplier) {
        final StatsManager statsManager = mContext.getSystemService(StatsManager.class);
        statsManager.setPullAtomCallback(FrameworkStatsLog.PENDING_ALARM_INFO, null,
                BackgroundThread.getExecutor(), (atomTag, data) -> {
@@ -48,13 +52,16 @@ class MetricsHelper {
                        throw new UnsupportedOperationException("Unknown tag" + atomTag);
                    }
                    final long now = SystemClock.elapsedRealtime();
                    synchronized (mLock) {
                        final AlarmStore alarmStore = alarmStoreSupplier.get();
                        data.add(FrameworkStatsLog.buildStatsEvent(atomTag,
                                alarmStore.size(),
                                alarmStore.getCount(a -> a.windowLength == 0),
                                alarmStore.getCount(a -> a.wakeup),
                                alarmStore.getCount(
                                        a -> (a.flags & AlarmManager.FLAG_ALLOW_WHILE_IDLE) != 0),
                            alarmStore.getCount(a -> (a.flags & AlarmManager.FLAG_PRIORITIZE) != 0),
                                alarmStore.getCount(
                                        a -> (a.flags & AlarmManager.FLAG_PRIORITIZE) != 0),
                                alarmStore.getCount(a -> (a.operation != null
                                        && a.operation.isForegroundService())),
                                alarmStore.getCount(
@@ -68,6 +75,7 @@ class MetricsHelper {
                                alarmStore.getCount(a -> (a.alarmClock != null))
                        ));
                        return StatsManager.PULL_SUCCESS;
                    }
                });
    }