Add log for AnomalyDetectionJobService

When anomaly is detected, also log it in AnomalyDetectionJobService

Bug: 73888115
Test: RunSettingsRoboTests
Change-Id: I0a42f8935d9a83eb763dd1f9dedfb71301853104
This commit is contained in:
Lei Yu
2018-03-20 11:33:13 -07:00
parent baf8a0cf9e
commit 2246ea9e89
2 changed files with 48 additions and 17 deletions

View File

@@ -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) {

View File

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