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:
@@ -38,13 +38,16 @@ import android.os.UserManager;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.util.Log;
|
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.os.BatteryStatsHelper;
|
||||||
import com.android.internal.util.ArrayUtils;
|
import com.android.internal.util.ArrayUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
|
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||||
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
|
import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
@@ -78,6 +81,7 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onStartJob(JobParameters params) {
|
public boolean onStartJob(JobParameters params) {
|
||||||
ThreadUtils.postOnBackgroundThread(() -> {
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
|
final Context context = AnomalyDetectionJobService.this;
|
||||||
final BatteryDatabaseManager batteryDatabaseManager =
|
final BatteryDatabaseManager batteryDatabaseManager =
|
||||||
BatteryDatabaseManager.getInstance(this);
|
BatteryDatabaseManager.getInstance(this);
|
||||||
final BatteryTipPolicy policy = new BatteryTipPolicy(this);
|
final BatteryTipPolicy policy = new BatteryTipPolicy(this);
|
||||||
@@ -89,12 +93,14 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
final PowerWhitelistBackend powerWhitelistBackend = PowerWhitelistBackend.getInstance();
|
final PowerWhitelistBackend powerWhitelistBackend = PowerWhitelistBackend.getInstance();
|
||||||
final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
|
final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
|
||||||
.getFactory(this).getPowerUsageFeatureProvider(this);
|
.getFactory(this).getPowerUsageFeatureProvider(this);
|
||||||
|
final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory
|
||||||
|
.getFactory(this).getMetricsFeatureProvider();
|
||||||
|
|
||||||
for (JobWorkItem item = params.dequeueWork(); item != null;
|
for (JobWorkItem item = params.dequeueWork(); item != null;
|
||||||
item = params.dequeueWork()) {
|
item = params.dequeueWork()) {
|
||||||
saveAnomalyToDatabase(batteryStatsHelper, userManager, batteryDatabaseManager,
|
saveAnomalyToDatabase(context, batteryStatsHelper, userManager,
|
||||||
batteryUtils, policy, powerWhitelistBackend, contentResolver,
|
batteryDatabaseManager, batteryUtils, policy, powerWhitelistBackend,
|
||||||
powerUsageFeatureProvider,
|
contentResolver, powerUsageFeatureProvider, metricsFeatureProvider,
|
||||||
item.getIntent().getExtras());
|
item.getIntent().getExtras());
|
||||||
}
|
}
|
||||||
jobFinished(params, false /* wantsReschedule */);
|
jobFinished(params, false /* wantsReschedule */);
|
||||||
@@ -109,11 +115,12 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void saveAnomalyToDatabase(BatteryStatsHelper batteryStatsHelper, UserManager userManager,
|
void saveAnomalyToDatabase(Context context, BatteryStatsHelper batteryStatsHelper,
|
||||||
|
UserManager userManager,
|
||||||
BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
|
BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
|
||||||
BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend,
|
BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend,
|
||||||
ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider,
|
ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider,
|
||||||
Bundle bundle) {
|
MetricsFeatureProvider metricsFeatureProvider, Bundle bundle) {
|
||||||
// The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|}
|
// The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|}
|
||||||
final StatsDimensionsValue intentDimsValue =
|
final StatsDimensionsValue intentDimsValue =
|
||||||
bundle.getParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE);
|
bundle.getParcelable(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE);
|
||||||
@@ -158,6 +165,11 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
AnomalyDatabaseHelper.State.NEW,
|
AnomalyDatabaseHelper.State.NEW,
|
||||||
timeMs);
|
timeMs);
|
||||||
}
|
}
|
||||||
|
metricsFeatureProvider.action(context,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
||||||
|
packageName,
|
||||||
|
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT,
|
||||||
|
anomalyInfo.anomalyType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (NullPointerException | IndexOutOfBoundsException e) {
|
} catch (NullPointerException | IndexOutOfBoundsException e) {
|
||||||
|
@@ -38,7 +38,9 @@ import android.os.Bundle;
|
|||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.StatsDimensionsValue;
|
import android.os.StatsDimensionsValue;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.internal.os.BatteryStatsHelper;
|
import com.android.internal.os.BatteryStatsHelper;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
@@ -67,6 +69,7 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
"anomaly_type=6,auto_restriction=true";
|
"anomaly_type=6,auto_restriction=true";
|
||||||
private static final String SUBSCRIBER_COOKIES_NOT_AUTO_RESTRICTION =
|
private static final String SUBSCRIBER_COOKIES_NOT_AUTO_RESTRICTION =
|
||||||
"anomaly_type=6,auto_restriction=false";
|
"anomaly_type=6,auto_restriction=false";
|
||||||
|
private static final int ANOMALY_TYPE = 6;
|
||||||
@Mock
|
@Mock
|
||||||
private BatteryStatsHelper mBatteryStatsHelper;
|
private BatteryStatsHelper mBatteryStatsHelper;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -119,9 +122,11 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||||
doReturn(true).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE);
|
doReturn(true).when(mPowerWhitelistBackend).isSysWhitelisted(SYSTEM_PACKAGE);
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
|
||||||
mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
|
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||||
mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
|
mPowerWhitelistBackend, mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
|
mFeatureFactory.metricsFeatureProvider, mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||||
anyInt(), anyLong());
|
anyInt(), anyLong());
|
||||||
@@ -132,9 +137,11 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
doReturn(Process.SYSTEM_UID).when(
|
doReturn(Process.SYSTEM_UID).when(
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
|
||||||
mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
|
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||||
mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
|
mPowerWhitelistBackend, mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||||
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||||
anyInt(), anyLong());
|
anyInt(), anyLong());
|
||||||
@@ -149,12 +156,18 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
doReturn(Process.FIRST_APPLICATION_UID).when(
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
|
||||||
mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
|
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||||
mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
|
mPowerWhitelistBackend, mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||||
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
||||||
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong());
|
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(
|
doReturn(Process.FIRST_APPLICATION_UID).when(
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mBatteryStatsHelper, mUserManager,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
|
||||||
mBatteryDatabaseManager, mBatteryUtils, mPolicy, mPowerWhitelistBackend,
|
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||||
mContext.getContentResolver(), mFeatureFactory.powerUsageFeatureProvider, mBundle);
|
mPowerWhitelistBackend, mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||||
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
||||||
eq(AnomalyDatabaseHelper.State.NEW), anyLong());
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user