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

Commit b4b2a626 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Add log for AnomalyDetectionJobService" into pi-dev

parents f88dcfad 2246ea9e
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -38,13 +38,16 @@ import android.os.UserManager;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.util.Pair;

import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
import com.android.settingslib.utils.ThreadUtils;

@@ -78,6 +81,7 @@ public class AnomalyDetectionJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        ThreadUtils.postOnBackgroundThread(() -> {
            final Context context = AnomalyDetectionJobService.this;
            final BatteryDatabaseManager batteryDatabaseManager =
                    BatteryDatabaseManager.getInstance(this);
            final BatteryTipPolicy policy = new BatteryTipPolicy(this);
@@ -89,12 +93,14 @@ public class AnomalyDetectionJobService extends JobService {
            final PowerWhitelistBackend powerWhitelistBackend = PowerWhitelistBackend.getInstance();
            final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
                    .getFactory(this).getPowerUsageFeatureProvider(this);
            final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory
                    .getFactory(this).getMetricsFeatureProvider();

            for (JobWorkItem item = params.dequeueWork(); item != null;
                    item = params.dequeueWork()) {
                saveAnomalyToDatabase(batteryStatsHelper, userManager, batteryDatabaseManager,
                        batteryUtils, policy, powerWhitelistBackend, contentResolver,
                        powerUsageFeatureProvider,
                saveAnomalyToDatabase(context, batteryStatsHelper, userManager,
                        batteryDatabaseManager, batteryUtils, policy, powerWhitelistBackend,
                        contentResolver, powerUsageFeatureProvider, metricsFeatureProvider,
                        item.getIntent().getExtras());
            }
            jobFinished(params, false /* wantsReschedule */);
@@ -109,11 +115,12 @@ public class AnomalyDetectionJobService extends JobService {
    }

    @VisibleForTesting
    void saveAnomalyToDatabase(BatteryStatsHelper batteryStatsHelper, UserManager userManager,
    void saveAnomalyToDatabase(Context context, BatteryStatsHelper batteryStatsHelper,
            UserManager userManager,
            BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
            BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend,
            ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider,
            Bundle bundle) {
            MetricsFeatureProvider metricsFeatureProvider, Bundle bundle) {
        // The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|}
        final StatsDimensionsValue intentDimsValue =
                bundle.getParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE);
@@ -158,6 +165,11 @@ public class AnomalyDetectionJobService extends JobService {
                                AnomalyDatabaseHelper.State.NEW,
                                timeMs);
                    }
                    metricsFeatureProvider.action(context,
                            MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
                            packageName,
                            Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT,
                                    anomalyInfo.anomalyType));
                }
            }
        } catch (NullPointerException | IndexOutOfBoundsException e) {
+31 −12
Original line number Diff line number Diff line
@@ -38,7 +38,9 @@ import android.os.Bundle;
import android.os.Process;
import android.os.StatsDimensionsValue;
import android.os.UserManager;
import android.util.Pair;

import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.R;
import com.android.settings.fuelgauge.BatteryUtils;
@@ -67,6 +69,7 @@ public class AnomalyDetectionJobServiceTest {
            "anomaly_type=6,auto_restriction=true";
    private static final String SUBSCRIBER_COOKIES_NOT_AUTO_RESTRICTION =
            "anomaly_type=6,auto_restriction=false";
    private static final int ANOMALY_TYPE = 6;
    @Mock
    private BatteryStatsHelper mBatteryStatsHelper;
    @Mock
@@ -119,9 +122,11 @@ public class AnomalyDetectionJobServiceTest {
        doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
        doReturn(true).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE);

        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                mPowerWhitelistBackend, mContext.getContentResolver(),
                mFeatureFactory.powerUsageFeatureProvider,
                mFeatureFactory.metricsFeatureProvider, mBundle);

        verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
                anyInt(), anyLong());
@@ -132,9 +137,11 @@ public class AnomalyDetectionJobServiceTest {
        doReturn(Process.SYSTEM_UID).when(
                mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());

        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                mPowerWhitelistBackend, mContext.getContentResolver(),
                mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
                mBundle);

        verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
                anyInt(), anyLong());
@@ -149,12 +156,18 @@ public class AnomalyDetectionJobServiceTest {
        doReturn(Process.FIRST_APPLICATION_UID).when(
                mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());

        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                mPowerWhitelistBackend, mContext.getContentResolver(),
                mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
                mBundle);

        verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
                eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong());
        verify(mFeatureFactory.metricsFeatureProvider).action(mContext,
                MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
                SYSTEM_PACKAGE,
                Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE));
    }


@@ -167,11 +180,17 @@ public class AnomalyDetectionJobServiceTest {
        doReturn(Process.FIRST_APPLICATION_UID).when(
                mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());

        mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
                mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
                mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
        mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
                mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
                mPowerWhitelistBackend, mContext.getContentResolver(),
                mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
                mBundle);

        verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
                eq(AnomalyDatabaseHelper.State.NEW), anyLong());
        verify(mFeatureFactory.metricsFeatureProvider).action(mContext,
                MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
                SYSTEM_PACKAGE,
                Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE));
    }
}