Merge "Migrate PowerStatsExporter test to Ravenwood" into main
diff --git a/core/java/android/os/AggregateBatteryConsumer.java b/core/java/android/os/AggregateBatteryConsumer.java
index c5f5614..67e2195 100644
--- a/core/java/android/os/AggregateBatteryConsumer.java
+++ b/core/java/android/os/AggregateBatteryConsumer.java
@@ -33,6 +33,7 @@
*
* {@hide}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class AggregateBatteryConsumer extends BatteryConsumer {
static final int CONSUMER_TYPE_AGGREGATE = 0;
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 1a0ce70..b68b94d 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -37,6 +37,7 @@
import android.service.batterystats.BatteryStatsServiceDumpHistoryProto;
import android.service.batterystats.BatteryStatsServiceDumpProto;
import android.telephony.CellSignalStrength;
+import android.telephony.ModemActivityInfo;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.text.format.DateFormat;
@@ -83,6 +84,7 @@
* except where indicated otherwise.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class BatteryStats {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
@@ -463,6 +465,7 @@
/**
* State for keeping track of long counting information.
*/
+ @android.ravenwood.annotation.RavenwoodKeepWholeClass
public static abstract class LongCounter {
/**
@@ -2724,12 +2727,6 @@
*/
public abstract int getMobileRadioActiveUnknownCount(int which);
- public static final int DATA_CONNECTION_OUT_OF_SERVICE = 0;
- public static final int DATA_CONNECTION_EMERGENCY_SERVICE =
- TelephonyManager.getAllNetworkTypes().length + 1;
- public static final int DATA_CONNECTION_OTHER = DATA_CONNECTION_EMERGENCY_SERVICE + 1;
-
-
static final String[] DATA_CONNECTION_NAMES = {
"oos", "gprs", "edge", "umts", "cdma", "evdo_0", "evdo_A",
"1xrtt", "hsdpa", "hsupa", "hspa", "iden", "evdo_b", "lte",
@@ -2737,9 +2734,28 @@
"emngcy", "other"
};
+ public static final int DATA_CONNECTION_OUT_OF_SERVICE = 0;
+ public static final int DATA_CONNECTION_EMERGENCY_SERVICE = getEmergencyNetworkConnectionType();
+ public static final int DATA_CONNECTION_OTHER = DATA_CONNECTION_EMERGENCY_SERVICE + 1;
+
@UnsupportedAppUsage
public static final int NUM_DATA_CONNECTION_TYPES = DATA_CONNECTION_OTHER + 1;
+ @android.ravenwood.annotation.RavenwoodReplace
+ private static int getEmergencyNetworkConnectionType() {
+ int count = TelephonyManager.getAllNetworkTypes().length;
+ if (DATA_CONNECTION_NAMES.length != count + 3) { // oos, emngcy, other
+ throw new IllegalStateException(
+ "DATA_CONNECTION_NAMES length does not match network type count. "
+ + "Expected: " + (count + 3) + ", actual:" + DATA_CONNECTION_NAMES.length);
+ }
+ return count + 1;
+ }
+
+ private static int getEmergencyNetworkConnectionType$ravenwood() {
+ return DATA_CONNECTION_NAMES.length - 2;
+ }
+
/**
* Returns the time in microseconds that the phone has been running with
* the given data connection.
@@ -9015,4 +9031,44 @@
(lhs, rhs) -> Double.compare(rhs.millisecondsPerPacket, lhs.millisecondsPerPacket));
return uidMobileRadioStats;
}
+
+ @android.ravenwood.annotation.RavenwoodReplace
+ @VisibleForTesting
+ protected static boolean isLowRamDevice() {
+ return ActivityManager.isLowRamDeviceStatic();
+ }
+
+ protected static boolean isLowRamDevice$ravenwood() {
+ return false;
+ }
+
+ @android.ravenwood.annotation.RavenwoodReplace
+ @VisibleForTesting
+ protected static int getCellSignalStrengthLevelCount() {
+ return CellSignalStrength.getNumSignalStrengthLevels();
+ }
+
+ protected static int getCellSignalStrengthLevelCount$ravenwood() {
+ return 5;
+ }
+
+ @android.ravenwood.annotation.RavenwoodReplace
+ @VisibleForTesting
+ protected static int getModemTxPowerLevelCount() {
+ return ModemActivityInfo.getNumTxPowerLevels();
+ }
+
+ protected static int getModemTxPowerLevelCount$ravenwood() {
+ return 5;
+ }
+
+ @android.ravenwood.annotation.RavenwoodReplace
+ @VisibleForTesting
+ protected static boolean isKernelStatsAvailable() {
+ return true;
+ }
+
+ protected static boolean isKernelStatsAvailable$ravenwood() {
+ return false;
+ }
}
diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java
index 511f464..90d82e7 100644
--- a/core/java/android/os/BatteryUsageStats.java
+++ b/core/java/android/os/BatteryUsageStats.java
@@ -56,6 +56,7 @@
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class BatteryUsageStats implements Parcelable, Closeable {
/**
diff --git a/core/java/android/os/BatteryUsageStatsQuery.java b/core/java/android/os/BatteryUsageStatsQuery.java
index 32840d4..203ef47 100644
--- a/core/java/android/os/BatteryUsageStatsQuery.java
+++ b/core/java/android/os/BatteryUsageStatsQuery.java
@@ -28,6 +28,7 @@
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class BatteryUsageStatsQuery implements Parcelable {
@NonNull
diff --git a/core/java/android/os/PowerComponents.java b/core/java/android/os/PowerComponents.java
index 9c11ad4..164e265 100644
--- a/core/java/android/os/PowerComponents.java
+++ b/core/java/android/os/PowerComponents.java
@@ -40,6 +40,7 @@
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
class PowerComponents {
private final BatteryConsumer.BatteryConsumerData mData;
diff --git a/core/java/android/os/UidBatteryConsumer.java b/core/java/android/os/UidBatteryConsumer.java
index 3eea94e..53af838 100644
--- a/core/java/android/os/UidBatteryConsumer.java
+++ b/core/java/android/os/UidBatteryConsumer.java
@@ -37,6 +37,7 @@
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class UidBatteryConsumer extends BatteryConsumer {
static final int CONSUMER_TYPE_UID = 1;
@@ -223,6 +224,7 @@
/**
* Builder for UidBatteryConsumer.
*/
+ @android.ravenwood.annotation.RavenwoodKeepWholeClass
public static final class Builder extends BaseBuilder<Builder> {
private static final String PACKAGE_NAME_UNINITIALIZED = "";
private final BatteryStats.Uid mBatteryStatsUid;
diff --git a/core/java/com/android/internal/os/BatteryStatsHistory.java b/core/java/com/android/internal/os/BatteryStatsHistory.java
index 1330e16..7a79e0f 100644
--- a/core/java/com/android/internal/os/BatteryStatsHistory.java
+++ b/core/java/com/android/internal/os/BatteryStatsHistory.java
@@ -977,11 +977,16 @@
/**
* @return true if there is more than 100MB free disk space left.
*/
+ @android.ravenwood.annotation.RavenwoodReplace
private boolean hasFreeDiskSpace() {
final StatFs stats = new StatFs(mHistoryDir.getAbsolutePath());
return stats.getAvailableBytes() > MIN_FREE_SPACE;
}
+ private boolean hasFreeDiskSpace$ravenwood() {
+ return true;
+ }
+
@VisibleForTesting
public List<String> getFilesNames() {
List<String> names = new ArrayList<>();
diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java
index 2298cbd..ab982f5 100644
--- a/core/java/com/android/internal/os/PowerProfile.java
+++ b/core/java/com/android/internal/os/PowerProfile.java
@@ -50,6 +50,7 @@
* Customize the XML file for different devices.
* [hidden]
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PowerProfile {
public static final String TAG = "PowerProfile";
@@ -321,6 +322,13 @@
private int mCpuPowerBracketCount;
@VisibleForTesting
+ public PowerProfile() {
+ synchronized (sLock) {
+ initLocked();
+ }
+ }
+
+ @VisibleForTesting
@UnsupportedAppUsage
public PowerProfile(Context context) {
this(context, false);
@@ -358,6 +366,10 @@
if (sPowerItemMap.size() == 0 && sPowerArrayMap.size() == 0) {
readPowerValuesFromXml(context, xmlId);
}
+ initLocked();
+ }
+
+ private void initLocked() {
initCpuClusters();
initCpuScalingPolicies();
initCpuPowerBrackets();
diff --git a/core/java/com/android/internal/power/ModemPowerProfile.java b/core/java/com/android/internal/power/ModemPowerProfile.java
index a555ae3..b15c10e 100644
--- a/core/java/com/android/internal/power/ModemPowerProfile.java
+++ b/core/java/com/android/internal/power/ModemPowerProfile.java
@@ -39,6 +39,7 @@
/**
* ModemPowerProfile for handling the modem element in the power_profile.xml
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ModemPowerProfile {
private static final String TAG = "ModemPowerProfile";
diff --git a/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java b/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
index c9536b9..533b799 100644
--- a/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
@@ -22,7 +22,6 @@
import android.os.BadParcelableException;
import android.os.Parcel;
-import android.platform.test.annotations.IgnoreUnderRavenwood;
import android.platform.test.ravenwood.RavenwoodRule;
import androidx.test.filters.SmallTest;
@@ -34,7 +33,6 @@
@RunWith(AndroidJUnit4.class)
@SmallTest
-@IgnoreUnderRavenwood(blockedBy = LongArrayMultiStateCounter.class)
public class LongArrayMultiStateCounterTest {
@Rule
public final RavenwoodRule mRavenwood = new RavenwoodRule();
diff --git a/ravenwood/ravenwood-annotation-allowed-classes.txt b/ravenwood/ravenwood-annotation-allowed-classes.txt
index 491ed22..ab2546b 100644
--- a/ravenwood/ravenwood-annotation-allowed-classes.txt
+++ b/ravenwood/ravenwood-annotation-allowed-classes.txt
@@ -9,8 +9,10 @@
com.android.internal.os.LongArrayMultiStateCounter
com.android.internal.os.LongArrayMultiStateCounter$LongArrayContainer
com.android.internal.os.MonotonicClock
+com.android.internal.os.PowerProfile
com.android.internal.os.PowerStats
com.android.internal.os.PowerStats$Descriptor
+com.android.internal.power.ModemPowerProfile
android.util.AtomicFile
android.util.DataUnit
@@ -32,11 +34,16 @@
android.util.TimeUtils
android.util.Xml
+android.os.AggregateBatteryConsumer
android.os.BatteryConsumer
+android.os.BatteryStats
android.os.BatteryStats$HistoryItem
android.os.BatteryStats$HistoryStepDetails
android.os.BatteryStats$HistoryTag
+android.os.BatteryStats$LongCounter
android.os.BatteryStats$ProcessStateChange
+android.os.BatteryUsageStats
+android.os.BatteryUsageStatsQuery
android.os.Binder
android.os.Binder$IdentitySupplier
android.os.Broadcaster
@@ -54,11 +61,14 @@
android.os.PackageTagsList
android.os.Parcel
android.os.Parcelable
+android.os.PowerComponents
android.os.Process
android.os.ServiceSpecificException
android.os.SystemClock
android.os.ThreadLocalWorkSource
android.os.TimestampedValue
+android.os.UidBatteryConsumer
+android.os.UidBatteryConsumer$Builder
android.os.UserHandle
android.os.WorkSource
@@ -117,6 +127,7 @@
android.content.ContentProvider
com.android.server.LocalServices
+com.android.server.power.stats.BatteryStatsImpl
com.android.internal.util.BitUtils
com.android.internal.util.BitwiseInputStream
diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
index 03f3763..09b19e6 100644
--- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
+++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
@@ -190,15 +190,11 @@
// The maximum number of names wakelocks we will keep track of
// per uid; once the limit is reached, we batch the remaining wakelocks
// in to one common name.
- private static final int MAX_WAKELOCKS_PER_UID;
+ private static final int MAX_WAKELOCKS_PER_UID = isLowRamDevice() ? 40 : 200;
- static {
- if (ActivityManager.isLowRamDeviceStatic()) {
- MAX_WAKELOCKS_PER_UID = 40;
- } else {
- MAX_WAKELOCKS_PER_UID = 200;
- }
- }
+ private static final int CELL_SIGNAL_STRENGTH_LEVEL_COUNT = getCellSignalStrengthLevelCount();
+
+ private static final int MODEM_TX_POWER_LEVEL_COUNT = getModemTxPowerLevelCount();
// Number of transmit power states the Wifi controller can be in.
private static final int NUM_WIFI_TX_LEVELS = 1;
@@ -278,11 +274,9 @@
@VisibleForTesting
protected KernelSingleUidTimeReader mKernelSingleUidTimeReader;
@VisibleForTesting
- protected SystemServerCpuThreadReader mSystemServerCpuThreadReader =
- SystemServerCpuThreadReader.create();
+ protected SystemServerCpuThreadReader mSystemServerCpuThreadReader;
- private final KernelMemoryBandwidthStats mKernelMemoryBandwidthStats
- = new KernelMemoryBandwidthStats();
+ private KernelMemoryBandwidthStats mKernelMemoryBandwidthStats;
private final LongSparseArray<SamplingTimer> mKernelMemoryStats = new LongSparseArray<>();
private int[] mCpuPowerBracketMap;
private final CpuPowerStatsCollector mCpuPowerStatsCollector;
@@ -323,7 +317,7 @@
private long mLastRpmStatsUpdateTimeMs = -RPM_STATS_UPDATE_FREQ_MS;
/** Container for Rail Energy Data stats. */
- private final RailStats mTmpRailStats = new RailStats();
+ private RailStats mTmpRailStats;
/**
* Estimate UID modem power usage based on their estimated mobile radio active time.
@@ -1031,7 +1025,7 @@
int mPhoneSignalStrengthBin = -1;
int mPhoneSignalStrengthBinRaw = -1;
final StopwatchTimer[] mPhoneSignalStrengthsTimer =
- new StopwatchTimer[CellSignalStrength.getNumSignalStrengthLevels()];
+ new StopwatchTimer[CELL_SIGNAL_STRENGTH_LEVEL_COUNT];
StopwatchTimer mPhoneSignalScanningTimer;
@@ -1723,7 +1717,8 @@
@VisibleForTesting
public BatteryStatsImpl(Clock clock, File historyDirectory, @NonNull Handler handler,
@NonNull PowerStatsUidResolver powerStatsUidResolver) {
- init(clock);
+ mClock = clock;
+ initKernelStatsReaders();
mBatteryStatsConfig = new BatteryStatsConfig.Builder().build();
mHandler = handler;
mPowerStatsUidResolver = powerStatsUidResolver;
@@ -1748,13 +1743,19 @@
mCpuPowerStatsCollector = null;
}
- private void init(Clock clock) {
- mClock = clock;
- mCpuUidUserSysTimeReader = new KernelCpuUidUserSysTimeReader(true, clock);
- mCpuUidFreqTimeReader = new KernelCpuUidFreqTimeReader(true, clock);
- mCpuUidActiveTimeReader = new KernelCpuUidActiveTimeReader(true, clock);
- mCpuUidClusterTimeReader = new KernelCpuUidClusterTimeReader(true, clock);
+ private void initKernelStatsReaders() {
+ if (!isKernelStatsAvailable()) {
+ return;
+ }
+
+ mCpuUidUserSysTimeReader = new KernelCpuUidUserSysTimeReader(true, mClock);
+ mCpuUidFreqTimeReader = new KernelCpuUidFreqTimeReader(true, mClock);
+ mCpuUidActiveTimeReader = new KernelCpuUidActiveTimeReader(true, mClock);
+ mCpuUidClusterTimeReader = new KernelCpuUidClusterTimeReader(true, mClock);
mKernelWakelockReader = new KernelWakelockReader();
+ mSystemServerCpuThreadReader = SystemServerCpuThreadReader.create();
+ mKernelMemoryBandwidthStats = new KernelMemoryBandwidthStats();
+ mTmpRailStats = new RailStats();
}
/**
@@ -5878,7 +5879,7 @@
@GuardedBy("this")
void stopAllPhoneSignalStrengthTimersLocked(int except, long elapsedRealtimeMs) {
- for (int i = 0; i < CellSignalStrength.getNumSignalStrengthLevels(); i++) {
+ for (int i = 0; i < CELL_SIGNAL_STRENGTH_LEVEL_COUNT; i++) {
if (i == except) {
continue;
}
@@ -8450,7 +8451,7 @@
public ControllerActivityCounterImpl getOrCreateModemControllerActivityLocked() {
if (mModemControllerActivity == null) {
mModemControllerActivity = new ControllerActivityCounterImpl(mBsi.mClock,
- mBsi.mOnBatteryTimeBase, ModemActivityInfo.getNumTxPowerLevels());
+ mBsi.mOnBatteryTimeBase, mBsi.MODEM_TX_POWER_LEVEL_COUNT);
}
return mModemControllerActivity;
}
@@ -10896,7 +10897,8 @@
@NonNull UserInfoProvider userInfoProvider, @NonNull PowerProfile powerProfile,
@NonNull CpuScalingPolicies cpuScalingPolicies,
@NonNull PowerStatsUidResolver powerStatsUidResolver) {
- init(clock);
+ mClock = clock;
+ initKernelStatsReaders();
mBatteryStatsConfig = config;
mMonotonicClock = monotonicClock;
@@ -10992,7 +10994,7 @@
mDeviceLightIdlingTimer = new StopwatchTimer(mClock, null, -15, null, mOnBatteryTimeBase);
mDeviceIdlingTimer = new StopwatchTimer(mClock, null, -12, null, mOnBatteryTimeBase);
mPhoneOnTimer = new StopwatchTimer(mClock, null, -3, null, mOnBatteryTimeBase);
- for (int i = 0; i < CellSignalStrength.getNumSignalStrengthLevels(); i++) {
+ for (int i = 0; i < CELL_SIGNAL_STRENGTH_LEVEL_COUNT; i++) {
mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(mClock, null, -200 - i, null,
mOnBatteryTimeBase);
}
@@ -11012,7 +11014,7 @@
mBluetoothActivity = new ControllerActivityCounterImpl(mClock, mOnBatteryTimeBase,
NUM_BT_TX_LEVELS);
mModemActivity = new ControllerActivityCounterImpl(mClock, mOnBatteryTimeBase,
- ModemActivityInfo.getNumTxPowerLevels());
+ MODEM_TX_POWER_LEVEL_COUNT);
mMobileRadioActiveTimer = new StopwatchTimer(mClock, null, -400, null, mOnBatteryTimeBase);
mMobileRadioActivePerAppTimer = new StopwatchTimer(mClock, null, -401, null,
mOnBatteryTimeBase);
@@ -11611,7 +11613,7 @@
mFlashlightOnTimer.reset(false, elapsedRealtimeUs);
mCameraOnTimer.reset(false, elapsedRealtimeUs);
mBluetoothScanTimer.reset(false, elapsedRealtimeUs);
- for (int i = 0; i < CellSignalStrength.getNumSignalStrengthLevels(); i++) {
+ for (int i = 0; i < CELL_SIGNAL_STRENGTH_LEVEL_COUNT; i++) {
mPhoneSignalStrengthsTimer[i].reset(false, elapsedRealtimeUs);
}
mPhoneSignalScanningTimer.reset(false, elapsedRealtimeUs);
@@ -11834,7 +11836,7 @@
private String[] mWifiIfaces = EmptyArray.STRING;
@GuardedBy("mWifiNetworkLock")
- private NetworkStats mLastWifiNetworkStats = new NetworkStats(0, -1);
+ private NetworkStats mLastWifiNetworkStats;
private final Object mModemNetworkLock = new Object();
@@ -11842,7 +11844,7 @@
private String[] mModemIfaces = EmptyArray.STRING;
@GuardedBy("mModemNetworkLock")
- private NetworkStats mLastModemNetworkStats = new NetworkStats(0, -1);
+ private NetworkStats mLastModemNetworkStats;
@VisibleForTesting
protected NetworkStats readMobileNetworkStatsLocked(
@@ -11875,7 +11877,9 @@
synchronized (mWifiNetworkLock) {
final NetworkStats latestStats = readWifiNetworkStatsLocked(networkStatsManager);
if (latestStats != null) {
- delta = latestStats.subtract(mLastWifiNetworkStats);
+ delta = mLastWifiNetworkStats != null
+ ? latestStats.subtract(mLastWifiNetworkStats)
+ : latestStats.subtract(new NetworkStats(0, -1));
mLastWifiNetworkStats = latestStats;
}
}
@@ -12248,7 +12252,9 @@
synchronized (mModemNetworkLock) {
final NetworkStats latestStats = readMobileNetworkStatsLocked(networkStatsManager);
if (latestStats != null) {
- delta = latestStats.subtract(mLastModemNetworkStats);
+ delta = latestStats.subtract(mLastModemNetworkStats != null
+ ? mLastModemNetworkStats
+ : new NetworkStats(0, -1));
mLastModemNetworkStats = latestStats;
}
}
@@ -12301,7 +12307,7 @@
deltaInfo.getSleepTimeMillis());
mModemActivity.getOrCreateRxTimeCounter()
.increment(deltaInfo.getReceiveTimeMillis(), elapsedRealtimeMs);
- for (int lvl = 0; lvl < ModemActivityInfo.getNumTxPowerLevels(); lvl++) {
+ for (int lvl = 0; lvl < MODEM_TX_POWER_LEVEL_COUNT; lvl++) {
mModemActivity.getOrCreateTxTimeCounters()[lvl]
.increment(deltaInfo.getTransmitDurationMillisAtPowerLevel(lvl),
elapsedRealtimeMs);
@@ -12318,8 +12324,8 @@
mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_IDLE)
+ deltaInfo.getReceiveTimeMillis() *
mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_RX);
- for (int i = 0; i < Math.min(ModemActivityInfo.getNumTxPowerLevels(),
- CellSignalStrength.getNumSignalStrengthLevels()); i++) {
+ for (int i = 0; i < Math.min(MODEM_TX_POWER_LEVEL_COUNT,
+ CELL_SIGNAL_STRENGTH_LEVEL_COUNT); i++) {
energyUsed += deltaInfo.getTransmitDurationMillisAtPowerLevel(i)
* mPowerProfile.getAveragePower(
PowerProfile.POWER_MODEM_CONTROLLER_TX, i);
@@ -12441,7 +12447,7 @@
}
if (totalTxPackets > 0 && entry.getTxPackets() > 0) {
- for (int lvl = 0; lvl < ModemActivityInfo.getNumTxPowerLevels();
+ for (int lvl = 0; lvl < MODEM_TX_POWER_LEVEL_COUNT;
lvl++) {
long txMs = entry.getTxPackets()
* deltaInfo.getTransmitDurationMillisAtPowerLevel(lvl);
@@ -12550,7 +12556,7 @@
&& deltaInfo.getSpecificInfoFrequencyRange(0)
== ServiceState.FREQUENCY_RANGE_UNKNOWN) {
// Specific info data unavailable. Proportionally smear Rx and Tx times across each RAT.
- final int levelCount = CellSignalStrength.getNumSignalStrengthLevels();
+ final int levelCount = CELL_SIGNAL_STRENGTH_LEVEL_COUNT;
long[] perSignalStrengthActiveTimeMs = new long[levelCount];
long totalActiveTimeMs = 0;
@@ -12726,13 +12732,13 @@
return;
}
int levelMaxTimeSpent = 0;
- for (int i = 1; i < ModemActivityInfo.getNumTxPowerLevels(); i++) {
+ for (int i = 1; i < MODEM_TX_POWER_LEVEL_COUNT; i++) {
if (activityInfo.getTransmitDurationMillisAtPowerLevel(i)
> activityInfo.getTransmitDurationMillisAtPowerLevel(levelMaxTimeSpent)) {
levelMaxTimeSpent = i;
}
}
- if (levelMaxTimeSpent == ModemActivityInfo.getNumTxPowerLevels() - 1) {
+ if (levelMaxTimeSpent == MODEM_TX_POWER_LEVEL_COUNT - 1) {
mHistory.recordState2StartEvent(elapsedRealtimeMs, uptimeMs,
HistoryItem.STATE2_CELLULAR_HIGH_TX_POWER_FLAG);
}
@@ -14821,12 +14827,12 @@
timeInRatMs[i] = getPhoneDataConnectionTime(i, rawRealTimeUs, which) / 1000;
}
long[] timeInRxSignalStrengthLevelMs =
- new long[CellSignalStrength.getNumSignalStrengthLevels()];
+ new long[CELL_SIGNAL_STRENGTH_LEVEL_COUNT];
for (int i = 0; i < timeInRxSignalStrengthLevelMs.length; i++) {
timeInRxSignalStrengthLevelMs[i] =
getPhoneSignalStrengthTime(i, rawRealTimeUs, which) / 1000;
}
- long[] txTimeMs = new long[Math.min(ModemActivityInfo.getNumTxPowerLevels(),
+ long[] txTimeMs = new long[Math.min(MODEM_TX_POWER_LEVEL_COUNT,
counter.getTxTimeCounters().length)];
long totalTxTimeMs = 0;
for (int i = 0; i < txTimeMs.length; i++) {
@@ -15458,7 +15464,7 @@
public Constants(Handler handler) {
super(handler);
- if (ActivityManager.isLowRamDeviceStatic()) {
+ if (isLowRamDevice()) {
MAX_HISTORY_FILES = DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE;
MAX_HISTORY_BUFFER = DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB * 1024;
} else {
@@ -15528,12 +15534,10 @@
KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS,
DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS);
MAX_HISTORY_FILES = mParser.getInt(KEY_MAX_HISTORY_FILES,
- ActivityManager.isLowRamDeviceStatic() ?
- DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE
- : DEFAULT_MAX_HISTORY_FILES);
+ isLowRamDevice() ? DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE
+ : DEFAULT_MAX_HISTORY_FILES);
MAX_HISTORY_BUFFER = mParser.getInt(KEY_MAX_HISTORY_BUFFER_KB,
- ActivityManager.isLowRamDeviceStatic() ?
- DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB
+ isLowRamDevice() ? DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB
: DEFAULT_MAX_HISTORY_BUFFER_KB)
* 1024;
final String perUidModemModel = mParser.getString(KEY_PER_UID_MODEM_POWER_MODEL,
@@ -16014,7 +16018,7 @@
mDeviceLightIdlingTimer.readSummaryFromParcelLocked(in);
mDeviceIdlingTimer.readSummaryFromParcelLocked(in);
mPhoneOnTimer.readSummaryFromParcelLocked(in);
- for (int i = 0; i < CellSignalStrength.getNumSignalStrengthLevels(); i++) {
+ for (int i = 0; i < CELL_SIGNAL_STRENGTH_LEVEL_COUNT; i++) {
mPhoneSignalStrengthsTimer[i].readSummaryFromParcelLocked(in);
}
mPhoneSignalScanningTimer.readSummaryFromParcelLocked(in);
@@ -16520,7 +16524,7 @@
mDeviceLightIdlingTimer.writeSummaryFromParcelLocked(out, nowRealtime);
mDeviceIdlingTimer.writeSummaryFromParcelLocked(out, nowRealtime);
mPhoneOnTimer.writeSummaryFromParcelLocked(out, nowRealtime);
- for (int i = 0; i < CellSignalStrength.getNumSignalStrengthLevels(); i++) {
+ for (int i = 0; i < CELL_SIGNAL_STRENGTH_LEVEL_COUNT; i++) {
mPhoneSignalStrengthsTimer[i].writeSummaryFromParcelLocked(out, nowRealtime);
}
mPhoneSignalScanningTimer.writeSummaryFromParcelLocked(out, nowRealtime);
@@ -17015,7 +17019,7 @@
mDeviceIdlingTimer.logState(pr, " ");
pr.println("*** Phone timer:");
mPhoneOnTimer.logState(pr, " ");
- for (int i = 0; i < CellSignalStrength.getNumSignalStrengthLevels(); i++) {
+ for (int i = 0; i < CELL_SIGNAL_STRENGTH_LEVEL_COUNT; i++) {
pr.println("*** Phone signal strength #" + i + ":");
mPhoneSignalStrengthsTimer[i].logState(pr, " ");
}
diff --git a/services/tests/powerstatstests/Android.bp b/services/tests/powerstatstests/Android.bp
index 05e0e8f..654d7a8d 100644
--- a/services/tests/powerstatstests/Android.bp
+++ b/services/tests/powerstatstests/Android.bp
@@ -11,6 +11,7 @@
"src/com/android/server/power/stats/MultiStateStatsTest.java",
"src/com/android/server/power/stats/PowerStatsAggregatorTest.java",
"src/com/android/server/power/stats/PowerStatsCollectorTest.java",
+ "src/com/android/server/power/stats/PowerStatsExporterTest.java",
"src/com/android/server/power/stats/PowerStatsSchedulerTest.java",
"src/com/android/server/power/stats/PowerStatsStoreTest.java",
"src/com/android/server/power/stats/PowerStatsUidResolverTest.java",
@@ -83,6 +84,9 @@
],
srcs: [
":power_stats_ravenwood_tests",
+
+ "src/com/android/server/power/stats/BatteryUsageStatsRule.java",
+ "src/com/android/server/power/stats/MockBatteryStatsImpl.java",
"src/com/android/server/power/stats/MockClock.java",
],
auto_gen_config: true,
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java
index 4ea0805..3f058a2 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java
@@ -37,12 +37,12 @@
private static final double PRECISION = 0.00001;
@Rule
- public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule();
+ public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
+ .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0);
@Test
public void testDischargeTotals() {
// Nominal battery capacity should be ignored
- mStatsRule.setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 1234.0);
final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
@@ -84,8 +84,6 @@
@Test
public void testDischargeTotals_chargeUahUnavailable() {
- mStatsRule.setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0);
-
final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100,
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
index e61dd0b..ca162e0 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
@@ -18,11 +18,11 @@
import static org.mockito.ArgumentMatchers.anyDouble;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.annotation.XmlRes;
-import android.content.Context;
import android.net.NetworkStats;
import android.os.BatteryConsumer;
import android.os.BatteryStats;
@@ -54,12 +54,11 @@
.powerProfileModeledOnly()
.includePowerModels()
.build();
- private final Context mContext;
private final PowerProfile mPowerProfile;
private final MockClock mMockClock = new MockClock();
private final MockBatteryStatsImpl mBatteryStats;
- private final Handler mHandler;
+ private Handler mHandler;
private BatteryUsageStats mBatteryUsageStats;
private boolean mScreenOn;
@@ -76,11 +75,8 @@
}
public BatteryUsageStatsRule(long currentTime, File historyDir) {
- HandlerThread bgThread = new HandlerThread("bg thread");
- bgThread.start();
- mHandler = new Handler(bgThread.getLooper());
- mContext = InstrumentationRegistry.getContext();
- mPowerProfile = spy(new PowerProfile(mContext, true /* forTest */));
+ mHandler = mock(Handler.class);
+ mPowerProfile = spy(new PowerProfile());
mMockClock.currentTime = currentTime;
mBatteryStats = new MockBatteryStatsImpl(mMockClock, historyDir, mHandler);
mBatteryStats.setPowerProfile(mPowerProfile);
@@ -103,7 +99,7 @@
}
public BatteryUsageStatsRule setTestPowerProfile(@XmlRes int xmlId) {
- mPowerProfile.forceInitForTesting(mContext, xmlId);
+ mPowerProfile.forceInitForTesting(InstrumentationRegistry.getContext(), xmlId);
return this;
}
@@ -222,13 +218,17 @@
return new Statement() {
@Override
public void evaluate() throws Throwable {
- noteOnBattery();
+ before();
base.evaluate();
}
};
}
- private void noteOnBattery() {
+ private void before() {
+ HandlerThread bgThread = new HandlerThread("bg thread");
+ bgThread.start();
+ mHandler = new Handler(bgThread.getLooper());
+ mBatteryStats.setHandler(mHandler);
mBatteryStats.setOnBatteryInternal(true);
mBatteryStats.getOnBatteryTimeBase().setRunning(true, 0, 0);
mBatteryStats.getOnBatteryScreenOffTimeBase().setRunning(!mScreenOn, 0, 0);
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
index fb71ac8..78c4bac 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
@@ -271,6 +271,10 @@
public void writeSyncLocked() {
}
+ public void setHandler(Handler handler) {
+ mHandler = handler;
+ }
+
public static class DummyExternalStatsSync implements ExternalStatsSync {
public int flags = 0;
@@ -315,4 +319,3 @@
}
}
}
-
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java
index 3c48262..3560a26 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java
@@ -16,8 +16,6 @@
package com.android.server.power.stats;
-import static androidx.test.InstrumentationRegistry.getContext;
-
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -34,6 +32,7 @@
import android.os.Parcel;
import android.os.PersistableBundle;
import android.os.UidBatteryConsumer;
+import android.platform.test.ravenwood.RavenwoodRule;
import androidx.test.runner.AndroidJUnit4;
@@ -48,6 +47,8 @@
import org.junit.runner.RunWith;
import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
import java.util.List;
@RunWith(AndroidJUnit4.class)
@@ -57,7 +58,12 @@
private static final int APP_UID2 = 84;
private static final double TOLERANCE = 0.01;
- @Rule
+ @Rule(order = 0)
+ public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder()
+ .setProvideMainThread(true)
+ .build();
+
+ @Rule(order = 1)
public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
.setAveragePower(PowerProfile.POWER_CPU_ACTIVE, 720)
.setCpuScalingPolicy(0, new int[]{0}, new int[]{100})
@@ -75,8 +81,8 @@
private PowerStats.Descriptor mPowerStatsDescriptor;
@Before
- public void setup() {
- File storeDirectory = new File(getContext().getCacheDir(), getClass().getSimpleName());
+ public void setup() throws IOException {
+ File storeDirectory = Files.createTempDirectory("PowerStatsExporterTest").toFile();
clearDirectory(storeDirectory);
AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig();