Hook up the anomaly policy to wakelockanomaly
Bug: 38233034 Test: RunSettingsRoboTests Change-Id: Id8c13480e08f609a1ba9927ba35558f82664904c
This commit is contained in:
@@ -31,6 +31,7 @@ import com.android.internal.os.BatteryStatsHelper;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.fuelgauge.anomaly.Anomaly;
|
||||
import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -40,17 +41,24 @@ import java.util.List;
|
||||
*/
|
||||
public class WakeLockAnomalyDetector implements AnomalyDetector {
|
||||
private static final String TAG = "WakeLockAnomalyChecker";
|
||||
// TODO: get threshold form server side
|
||||
private static final long WAKE_LOCK_THRESHOLD_MS = 2 * DateUtils.MINUTE_IN_MILLIS;
|
||||
private PackageManager mPackageManager;
|
||||
private Context mContext;
|
||||
@VisibleForTesting
|
||||
BatteryUtils mBatteryUtils;
|
||||
@VisibleForTesting
|
||||
long mWakeLockThresholdMs;
|
||||
|
||||
public WakeLockAnomalyDetector(Context context) {
|
||||
this(context, new AnomalyDetectionPolicy(context));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
WakeLockAnomalyDetector(Context context, AnomalyDetectionPolicy policy) {
|
||||
mContext = context;
|
||||
mPackageManager = context.getPackageManager();
|
||||
mBatteryUtils = BatteryUtils.getInstance(context);
|
||||
|
||||
mWakeLockThresholdMs = policy.wakeLockThreshold;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,7 +90,7 @@ public class WakeLockAnomalyDetector implements AnomalyDetector {
|
||||
|
||||
// Report it if wakelock time is too long and it is not a hidden batterysipper
|
||||
// TODO: add more attributes to detect wakelock anomaly
|
||||
if (maxPartialWakeLockMs > WAKE_LOCK_THRESHOLD_MS
|
||||
if (maxPartialWakeLockMs > mWakeLockThresholdMs
|
||||
&& !mBatteryUtils.shouldHideSipper(sipper)) {
|
||||
final String packageName = getPackageName(uid.getUid());
|
||||
final CharSequence displayName = Utils.getApplicationLabel(mContext,
|
||||
|
@@ -49,6 +49,7 @@ public class AnomalyLoaderTest {
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private BatteryStatsHelper mBatteryStatsHelper;
|
||||
@Mock
|
||||
private WakeLockAnomalyDetector mWakeLockAnomalyDetector;
|
||||
private Anomaly mWakeLockAnomaly;
|
||||
private List<Anomaly> mWakeLockAnomalies;
|
||||
@@ -62,7 +63,6 @@ public class AnomalyLoaderTest {
|
||||
FakeFeatureFactory.setupForTest(mContext);
|
||||
mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
|
||||
|
||||
mWakeLockAnomalyDetector = spy(new WakeLockAnomalyDetector(mContext));
|
||||
mWakeLockAnomalies = new ArrayList<>();
|
||||
mWakeLockAnomaly = new Anomaly.Builder()
|
||||
.setType(Anomaly.AnomalyType.WAKE_LOCK)
|
||||
|
@@ -22,6 +22,7 @@ import com.android.settings.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.TestConfig;
|
||||
import com.android.settings.fuelgauge.anomaly.action.ForceStopAction;
|
||||
import com.android.settings.fuelgauge.anomaly.checker.WakeLockAnomalyDetector;
|
||||
import com.android.settings.testutils.shadow.ShadowKeyValueListParserWrapperImpl;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -30,7 +31,8 @@ import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
|
||||
ShadowKeyValueListParserWrapperImpl.class})
|
||||
public class AnomalyUtilsTest {
|
||||
private AnomalyUtils mAnomalyUtils;
|
||||
|
||||
|
@@ -39,6 +39,7 @@ import com.android.settings.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.TestConfig;
|
||||
import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.fuelgauge.anomaly.Anomaly;
|
||||
import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -47,6 +48,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -54,8 +56,9 @@ import java.util.List;
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||
public class WakeLockAnomalyDetectorTest {
|
||||
private static final long ANOMALY_WAKELOCK_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
private static final long ANOMALY_WAKELOCK_TIME_MS = 2 * DateUtils.HOUR_IN_MILLIS;
|
||||
private static final long NORMAL_WAKELOCK_TIME_MS = DateUtils.SECOND_IN_MILLIS;
|
||||
private static final long WAKELOCK_THRESHOLD_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
private static final int ANOMALY_UID = 111;
|
||||
private static final int NORMAL_UID = 222;
|
||||
@Mock
|
||||
@@ -82,6 +85,8 @@ public class WakeLockAnomalyDetectorTest {
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private ApplicationInfo mApplicationInfo;
|
||||
@Mock
|
||||
private AnomalyDetectionPolicy mPolicy;
|
||||
|
||||
private ArrayMap<String, BatteryStats.Uid.Wakelock> mAnomalyWakelocks;
|
||||
private ArrayMap<String, BatteryStats.Uid.Wakelock> mNormalWakelocks;
|
||||
@@ -94,6 +99,7 @@ public class WakeLockAnomalyDetectorTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
ReflectionHelpers.setField(mPolicy, "wakeLockThreshold", WAKELOCK_THRESHOLD_MS);
|
||||
|
||||
doReturn(false).when(mBatteryUtils).shouldHideSipper(any());
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
@@ -118,7 +124,7 @@ public class WakeLockAnomalyDetectorTest {
|
||||
mUsageList.add(mNormalSipper);
|
||||
doReturn(mUsageList).when(mBatteryStatsHelper).getUsageList();
|
||||
|
||||
mWakelockAnomalyDetector = spy(new WakeLockAnomalyDetector(mContext));
|
||||
mWakelockAnomalyDetector = spy(new WakeLockAnomalyDetector(mContext, mPolicy));
|
||||
mWakelockAnomalyDetector.mBatteryUtils = mBatteryUtils;
|
||||
doReturn(ANOMALY_WAKELOCK_TIME_MS).when(mWakelockAnomalyDetector).getTotalDurationMs(
|
||||
eq(mAnomalyTimer), anyLong());
|
||||
@@ -137,4 +143,9 @@ public class WakeLockAnomalyDetectorTest {
|
||||
|
||||
assertThat(mAnomalies).containsExactly(anomaly);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContainsThresholdFromPolicy() {
|
||||
assertThat(mWakelockAnomalyDetector.mWakeLockThresholdMs).isEqualTo(WAKELOCK_THRESHOLD_MS);
|
||||
}
|
||||
}
|
||||
|
@@ -37,6 +37,7 @@ import com.android.settings.core.PreferenceController;
|
||||
import com.android.settings.dashboard.SummaryLoader;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.XmlTestUtils;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.shadow.ShadowSecureSettings;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.android.settings.testutils.shadow;
|
||||
|
||||
import com.android.settings.fuelgauge.anomaly.KeyValueListParserWrapperImpl;
|
||||
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
|
||||
/**
|
||||
* Shadow for {@link KeyValueListParserWrapperImpl} so we could implement
|
||||
* {@link #getBoolean(String, boolean)} that doesn't support in the current
|
||||
* robolectric
|
||||
*/
|
||||
@Implements(KeyValueListParserWrapperImpl.class)
|
||||
public class ShadowKeyValueListParserWrapperImpl {
|
||||
|
||||
@Implementation
|
||||
public boolean getBoolean(String key, boolean defaultValue) {
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user