summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dmitri Plotnikov <dplotnikov@google.com> 2022-02-08 20:04:46 -0800
committer Dmitri Plotnikov <dplotnikov@google.com> 2022-02-09 06:26:59 +0000
commit58fff8488b204c0b3fb7b746b3a37cdf6a61cb5d (patch)
tree95734267b9fd368dd5af64d8ab7125057700f3dc
parent992d488c81228986dc605d583b06b2ee57af0548 (diff)
Remove BatteryStatsHelper and BatterySipper
These classes have been superseded by BatteryUsageStats Bug: 217618527 Test: presubmit Change-Id: Ia562365031048ad5b541dd08196e04e53e7cc547
-rw-r--r--core/java/android/os/BatteryStats.java5
-rw-r--r--core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java27
-rw-r--r--core/java/com/android/internal/os/BatteryChargeCalculator.java10
-rw-r--r--core/java/com/android/internal/os/BatterySipper.java301
-rw-r--r--core/java/com/android/internal/os/BatteryStatsHelper.java703
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java2
-rw-r--r--core/java/com/android/internal/os/BatteryUsageStatsProvider.java2
-rw-r--r--core/java/com/android/internal/os/BluetoothPowerCalculator.java70
-rw-r--r--core/java/com/android/internal/os/CameraPowerCalculator.java10
-rw-r--r--core/java/com/android/internal/os/CpuPowerCalculator.java25
-rw-r--r--core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java10
-rw-r--r--core/java/com/android/internal/os/FlashlightPowerCalculator.java10
-rw-r--r--core/java/com/android/internal/os/GnssPowerCalculator.java38
-rw-r--r--core/java/com/android/internal/os/IdlePowerCalculator.java18
-rw-r--r--core/java/com/android/internal/os/MediaPowerCalculator.java68
-rw-r--r--core/java/com/android/internal/os/MemoryPowerCalculator.java18
-rw-r--r--core/java/com/android/internal/os/MobileRadioPowerCalculator.java62
-rw-r--r--core/java/com/android/internal/os/PhonePowerCalculator.java18
-rw-r--r--core/java/com/android/internal/os/PowerCalculator.java45
-rw-r--r--core/java/com/android/internal/os/ScreenPowerCalculator.java78
-rw-r--r--core/java/com/android/internal/os/SensorPowerCalculator.java6
-rw-r--r--core/java/com/android/internal/os/SystemServicePowerCalculator.java52
-rw-r--r--core/java/com/android/internal/os/UserPowerCalculator.java38
-rw-r--r--core/java/com/android/internal/os/WakelockPowerCalculator.java39
-rw-r--r--core/java/com/android/internal/os/WifiPowerCalculator.java59
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java275
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java2
-rw-r--r--core/tests/coretests/src/com/android/internal/os/PowerCalculatorTest.java71
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java3
-rw-r--r--tests/BatteryStatsPerfTest/src/com/android/internal/os/BatteryStatsHelperPerfTest.java135
30 files changed, 9 insertions, 2191 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index cd395744592b..de1dc8091b2a 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -8591,7 +8591,10 @@ public abstract class BatteryStats implements Parcelable {
proto.end(sToken);
}
- private static boolean checkWifiOnly(Context context) {
+ /**
+ * Returns true if the device does not have data-capable telephony.
+ */
+ public static boolean checkWifiOnly(Context context) {
final TelephonyManager tm = context.getSystemService(TelephonyManager.class);
if (tm == null) {
return false;
diff --git a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java
index d8e89b4c2637..888f830960dd 100644
--- a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java
+++ b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java
@@ -22,10 +22,6 @@ import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.UserHandle;
-import android.util.SparseArray;
-
-import java.util.List;
/**
* Estimates power consumed by the ambient display
@@ -67,29 +63,6 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator {
powerMah, powerModel);
}
- /**
- * Ambient display power is the additional power the screen takes while in ambient display/
- * screen doze/ always-on display (interchangeable terms) mode. Ambient display power should
- * be hidden {@link BatteryStatsHelper#shouldHideSipper(BatterySipper)}, but should not be
- * included in smearing {@link BatteryStatsHelper#removeHiddenBatterySippers(List)}.
- */
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- final long measuredEnergyUC = batteryStats.getScreenDozeMeasuredBatteryConsumptionUC();
- final long durationMs = calculateDuration(batteryStats, rawRealtimeUs, statsType);
- final int powerModel = getPowerModel(measuredEnergyUC);
- final double powerMah = calculateTotalPower(powerModel, batteryStats, rawRealtimeUs,
- measuredEnergyUC);
- if (powerMah > 0) {
- BatterySipper bs = new BatterySipper(BatterySipper.DrainType.AMBIENT_DISPLAY, null, 0);
- bs.usagePowerMah = powerMah;
- bs.usageTimeMs = durationMs;
- bs.sumPower();
- sippers.add(bs);
- }
- }
-
private long calculateDuration(BatteryStats batteryStats, long rawRealtimeUs, int statsType) {
return batteryStats.getScreenDozeTime(rawRealtimeUs, statsType) / 1000;
}
diff --git a/core/java/com/android/internal/os/BatteryChargeCalculator.java b/core/java/com/android/internal/os/BatteryChargeCalculator.java
index 71a1463370e5..912ec8f6a6ba 100644
--- a/core/java/com/android/internal/os/BatteryChargeCalculator.java
+++ b/core/java/com/android/internal/os/BatteryChargeCalculator.java
@@ -20,10 +20,6 @@ import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.UserHandle;
-import android.util.SparseArray;
-
-import java.util.List;
/**
* Estimates the battery discharge amounts.
@@ -81,10 +77,4 @@ public class BatteryChargeCalculator extends PowerCalculator {
BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE)
.setConsumedPower(dischargeMah);
}
-
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- // Not implemented. The computation is done by BatteryStatsHelper
- }
}
diff --git a/core/java/com/android/internal/os/BatterySipper.java b/core/java/com/android/internal/os/BatterySipper.java
deleted file mode 100644
index dfd561a8cc30..000000000000
--- a/core/java/com/android/internal/os/BatterySipper.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.internal.os;
-
-import android.compat.annotation.UnsupportedAppUsage;
-import android.os.BatteryStats.Uid;
-import android.os.Build;
-
-import java.util.List;
-
-/**
- * Contains power usage of an application, system service, or hardware type.
- *
- * @deprecated Please use BatteryStatsManager.getBatteryUsageStats instead.
- */
-@Deprecated
-public class BatterySipper implements Comparable<BatterySipper> {
- @UnsupportedAppUsage
- public int userId;
- @UnsupportedAppUsage
- public Uid uidObj;
- @UnsupportedAppUsage
- public DrainType drainType;
-
- /**
- * Smeared power from screen usage.
- * We split the screen usage power and smear them among apps, based on activity time.
- * The actual screen usage power may be measured or estimated, affecting the granularity and
- * accuracy of the smearing, but the smearing algorithm is essentially the same.
- */
- public double screenPowerMah;
-
- /**
- * Smeared power using proportional method.
- *
- * we smear power usage from hidden sippers to all apps proportionally.(except for screen usage)
- *
- * @see BatteryStatsHelper#shouldHideSipper(BatterySipper)
- * @see BatteryStatsHelper#removeHiddenBatterySippers(List)
- */
- public double proportionalSmearMah;
-
- /**
- * Total power that adding the smeared power.
- *
- * @see #sumPower()
- */
- public double totalSmearedPowerMah;
-
- /**
- * Total power before smearing
- */
- @UnsupportedAppUsage
- public double totalPowerMah;
-
- /**
- * Whether we should hide this sipper
- *
- * @see BatteryStatsHelper#shouldHideSipper(BatterySipper)
- */
- public boolean shouldHide;
-
- /**
- * Generic usage time in milliseconds.
- */
- @UnsupportedAppUsage
- public long usageTimeMs;
-
- /**
- * Generic power usage in mAh.
- */
- public double usagePowerMah;
-
- // Subsystem usage times.
- public long audioTimeMs;
- public long bluetoothRunningTimeMs;
- public long cameraTimeMs;
- @UnsupportedAppUsage
- public long cpuFgTimeMs;
- @UnsupportedAppUsage
- public long cpuTimeMs;
- public long flashlightTimeMs;
- @UnsupportedAppUsage
- public long gpsTimeMs;
- public long videoTimeMs;
- @UnsupportedAppUsage
- public long wakeLockTimeMs;
- @UnsupportedAppUsage
- public long wifiRunningTimeMs;
-
- public long mobileRxPackets;
- public long mobileTxPackets;
- public long mobileActive;
- public int mobileActiveCount;
- public double mobilemspp; // milliseconds per packet
- public long wifiRxPackets;
- public long wifiTxPackets;
- public long mobileRxBytes;
- public long mobileTxBytes;
- public long wifiRxBytes;
- public long wifiTxBytes;
- public long btRxBytes;
- public long btTxBytes;
- public double percent;
- public double noCoveragePercent;
- @UnsupportedAppUsage
- public String[] mPackages;
- @UnsupportedAppUsage
- public String packageWithHighestDrain;
-
- // Measured in mAh (milli-ampere per hour).
- // These are included when summed.
- public double audioPowerMah;
- public double bluetoothPowerMah;
- public double cameraPowerMah;
- @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public double cpuPowerMah;
- public double flashlightPowerMah;
- public double gpsPowerMah;
- public double mobileRadioPowerMah;
- public double sensorPowerMah;
- public double videoPowerMah;
- public double wakeLockPowerMah;
- public double wifiPowerMah;
- public double systemServiceCpuPowerMah;
- public double[] customMeasuredPowerMah;
-
- // Power that is re-attributed to other sippers. For example, for System Server
- // this represents the power attributed to apps requesting system services.
- // The value should be negative or zero.
- public double powerReattributedToOtherSippersMah;
-
- // Do not include this sipper in results because it is included
- // in an aggregate sipper.
- public boolean isAggregated;
-
- // ****************
- // This list must be kept current with atoms.proto (frameworks/base/cmds/statsd/src/atoms.proto)
- // so the ordinal values (and therefore the order) must never change.
- // ****************
- @UnsupportedAppUsage(implicitMember =
- "values()[Lcom/android/internal/os/BatterySipper$DrainType;")
- public enum DrainType {
- AMBIENT_DISPLAY,
- @UnsupportedAppUsage
- APP,
- BLUETOOTH,
- CAMERA,
- CELL,
- FLASHLIGHT,
- IDLE,
- MEMORY,
- OVERCOUNTED,
- PHONE,
- SCREEN,
- UNACCOUNTED,
- USER,
- WIFI,
- }
-
- @UnsupportedAppUsage
- public BatterySipper(DrainType drainType, Uid uid, double value) {
- this.totalPowerMah = value;
- this.drainType = drainType;
- uidObj = uid;
- }
-
- public void computeMobilemspp() {
- long packets = mobileRxPackets + mobileTxPackets;
- mobilemspp = packets > 0 ? (mobileActive / (double) packets) : 0;
- }
-
- @Override
- public int compareTo(BatterySipper other) {
- // Over-counted always goes to the bottom.
- if (drainType != other.drainType) {
- if (drainType == DrainType.OVERCOUNTED) {
- // This is "larger"
- return 1;
- } else if (other.drainType == DrainType.OVERCOUNTED) {
- return -1;
- }
- }
- // Return the flipped value because we want the items in descending order
- return Double.compare(other.totalPowerMah, totalPowerMah);
- }
-
- /**
- * Gets a list of packages associated with the current user
- */
- @UnsupportedAppUsage
- public String[] getPackages() {
- return mPackages;
- }
-
- @UnsupportedAppUsage
- public int getUid() {
- // Bail out if the current sipper is not an App sipper.
- if (uidObj == null) {
- return 0;
- }
- return uidObj.getUid();
- }
-
- /**
- * Add stats from other to this BatterySipper.
- */
- @UnsupportedAppUsage
- public void add(BatterySipper other) {
- totalPowerMah += other.totalPowerMah;
- usageTimeMs += other.usageTimeMs;
- usagePowerMah += other.usagePowerMah;
- audioTimeMs += other.audioTimeMs;
- cpuTimeMs += other.cpuTimeMs;
- gpsTimeMs += other.gpsTimeMs;
- wifiRunningTimeMs += other.wifiRunningTimeMs;
- cpuFgTimeMs += other.cpuFgTimeMs;
- videoTimeMs += other.videoTimeMs;
- wakeLockTimeMs += other.wakeLockTimeMs;
- cameraTimeMs += other.cameraTimeMs;
- flashlightTimeMs += other.flashlightTimeMs;
- bluetoothRunningTimeMs += other.bluetoothRunningTimeMs;
- mobileRxPackets += other.mobileRxPackets;
- mobileTxPackets += other.mobileTxPackets;
- mobileActive += other.mobileActive;
- mobileActiveCount += other.mobileActiveCount;
- wifiRxPackets += other.wifiRxPackets;
- wifiTxPackets += other.wifiTxPackets;
- mobileRxBytes += other.mobileRxBytes;
- mobileTxBytes += other.mobileTxBytes;
- wifiRxBytes += other.wifiRxBytes;
- wifiTxBytes += other.wifiTxBytes;
- btRxBytes += other.btRxBytes;
- btTxBytes += other.btTxBytes;
- audioPowerMah += other.audioPowerMah;
- wifiPowerMah += other.wifiPowerMah;
- gpsPowerMah += other.gpsPowerMah;
- cpuPowerMah += other.cpuPowerMah;
- sensorPowerMah += other.sensorPowerMah;
- mobileRadioPowerMah += other.mobileRadioPowerMah;
- wakeLockPowerMah += other.wakeLockPowerMah;
- cameraPowerMah += other.cameraPowerMah;
- flashlightPowerMah += other.flashlightPowerMah;
- bluetoothPowerMah += other.bluetoothPowerMah;
- screenPowerMah += other.screenPowerMah;
- videoPowerMah += other.videoPowerMah;
- proportionalSmearMah += other.proportionalSmearMah;
- totalSmearedPowerMah += other.totalSmearedPowerMah;
- systemServiceCpuPowerMah += other.systemServiceCpuPowerMah;
- if (other.customMeasuredPowerMah != null) {
- if (customMeasuredPowerMah == null) {
- customMeasuredPowerMah = new double[other.customMeasuredPowerMah.length];
- }
- if (customMeasuredPowerMah.length == other.customMeasuredPowerMah.length) {
- // This should always be true.
- for (int idx = 0; idx < other.customMeasuredPowerMah.length; idx++) {
- customMeasuredPowerMah[idx] += other.customMeasuredPowerMah[idx];
- }
- }
- }
- powerReattributedToOtherSippersMah += other.powerReattributedToOtherSippersMah;
- }
-
- /**
- * Sum all the powers and store the value into `value`.
- * Also sum the {@code smearedTotalPowerMah} by adding smeared powerMah.
- *
- * @return the sum of all the power in this BatterySipper.
- */
- public double sumPower() {
- totalPowerMah = usagePowerMah + wifiPowerMah + gpsPowerMah + cpuPowerMah +
- sensorPowerMah + mobileRadioPowerMah + wakeLockPowerMah + cameraPowerMah +
- flashlightPowerMah + bluetoothPowerMah + audioPowerMah + videoPowerMah
- + systemServiceCpuPowerMah;
- if (customMeasuredPowerMah != null) {
- for (int idx = 0; idx < customMeasuredPowerMah.length; idx++) {
- totalPowerMah += customMeasuredPowerMah[idx];
- }
- }
-
- // powerAttributedToOtherSippersMah is negative or zero
- totalPowerMah = totalPowerMah + powerReattributedToOtherSippersMah;
-
- totalSmearedPowerMah = totalPowerMah + screenPowerMah + proportionalSmearMah;
-
- return totalPowerMah;
- }
-}
diff --git a/core/java/com/android/internal/os/BatteryStatsHelper.java b/core/java/com/android/internal/os/BatteryStatsHelper.java
deleted file mode 100644
index 7fb1d6cea6e5..000000000000
--- a/core/java/com/android/internal/os/BatteryStatsHelper.java
+++ /dev/null
@@ -1,703 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.os;
-
-import android.compat.annotation.UnsupportedAppUsage;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.hardware.SensorManager;
-import android.os.BatteryStats;
-import android.os.BatteryStats.Uid;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.MemoryFile;
-import android.os.Parcel;
-import android.os.ParcelFileDescriptor;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.SELinux;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.telephony.TelephonyManager;
-import android.util.ArrayMap;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.os.BatterySipper.DrainType;
-import com.android.internal.util.ArrayUtils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * A helper class for retrieving the power usage information for all applications and services.
- *
- * The caller must initialize this class as soon as activity object is ready to use (for example, in
- * onAttach() for Fragment), call create() in onCreate() and call destroy() in onDestroy().
- *
- * @deprecated Please use BatteryStatsManager.getBatteryUsageStats instead.
- */
-@Deprecated
-public class BatteryStatsHelper {
- private static final boolean DEBUG = false;
-
- private static final String TAG = BatteryStatsHelper.class.getSimpleName();
-
- private static BatteryStats sStatsXfer;
- private static Intent sBatteryBroadcastXfer;
- private static ArrayMap<File, BatteryStats> sFileXfer = new ArrayMap<>();
-
- final private Context mContext;
- final private boolean mCollectBatteryBroadcast;
- final private boolean mWifiOnly;
-
- private List<PowerCalculator> mPowerCalculators;
-
- @UnsupportedAppUsage
- private IBatteryStats mBatteryInfo;
- private BatteryStats mStats;
- private Intent mBatteryBroadcast;
- @UnsupportedAppUsage
- private PowerProfile mPowerProfile;
-
- private String[] mSystemPackageArray;
- private String[] mServicepackageArray;
- private PackageManager mPackageManager;
-
- /**
- * List of apps using power.
- */
- @UnsupportedAppUsage
- private final List<BatterySipper> mUsageList = new ArrayList<>();
-
- private final List<BatterySipper> mMobilemsppList = new ArrayList<>();
-
- private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
-
- long mRawRealtimeUs;
- long mRawUptimeUs;
- long mBatteryRealtimeUs;
- long mBatteryUptimeUs;
- long mBatteryTimeRemainingUs;
- long mChargeTimeRemainingUs;
-
- private long mStatsPeriod = 0;
-
- // The largest entry by power.
- private double mMaxPower = 1;
-
- // The largest real entry by power (not undercounted or overcounted).
- private double mMaxRealPower = 1;
-
- // Total computed power.
- private double mComputedPower;
- private double mTotalPower;
- private double mMinDrainedPower;
- private double mMaxDrainedPower;
-
- public static boolean checkWifiOnly(Context context) {
- final TelephonyManager tm = context.getSystemService(TelephonyManager.class);
- if (tm == null) {
- return false;
- }
- return !tm.isDataCapable();
- }
-
- @UnsupportedAppUsage
- public BatteryStatsHelper(Context context) {
- this(context, true);
- }
-
- @UnsupportedAppUsage
- public BatteryStatsHelper(Context context, boolean collectBatteryBroadcast) {
- this(context, collectBatteryBroadcast, checkWifiOnly(context));
- }
-
- @UnsupportedAppUsage
- public BatteryStatsHelper(Context context, boolean collectBatteryBroadcast, boolean wifiOnly) {
- mContext = context;
- mCollectBatteryBroadcast = collectBatteryBroadcast;
- mWifiOnly = wifiOnly;
- mPackageManager = context.getPackageManager();
-
- final Resources resources = context.getResources();
- mSystemPackageArray = resources.getStringArray(
- com.android.internal.R.array.config_batteryPackageTypeSystem);
- mServicepackageArray = resources.getStringArray(
- com.android.internal.R.array.config_batteryPackageTypeService);
- }
-
- public void storeStatsHistoryInFile(String fname) {
- synchronized (sFileXfer) {
- File path = makeFilePath(mContext, fname);
- sFileXfer.put(path, this.getStats());
- FileOutputStream fout = null;
- try {
- fout = new FileOutputStream(path);
- Parcel hist = Parcel.obtain();
- getStats().writeToParcelWithoutUids(hist, 0);
- byte[] histData = hist.marshall();
- fout.write(histData);
- } catch (IOException e) {
- Log.w(TAG, "Unable to write history to file", e);
- } finally {
- if (fout != null) {
- try {
- fout.close();
- } catch (IOException e) {
- }
- }
- }
- }
- }
-
- public static BatteryStats statsFromFile(Context context, String fname) {
- synchronized (sFileXfer) {
- File path = makeFilePath(context, fname);
- BatteryStats stats = sFileXfer.get(path);
- if (stats != null) {
- return stats;
- }
- FileInputStream fin = null;
- try {
- fin = new FileInputStream(path);
- byte[] data = readFully(fin);
- Parcel parcel = Parcel.obtain();
- parcel.unmarshall(data, 0, data.length);
- parcel.setDataPosition(0);
- return com.android.internal.os.BatteryStatsImpl.CREATOR.createFromParcel(parcel);
- } catch (IOException e) {
- Log.w(TAG, "Unable to read history to file", e);
- } finally {
- if (fin != null) {
- try {
- fin.close();
- } catch (IOException e) {
- }
- }
- }
- }
- return getStats(IBatteryStats.Stub.asInterface(
- ServiceManager.getService(BatteryStats.SERVICE_NAME)), true);
- }
-
- @UnsupportedAppUsage
- public static void dropFile(Context context, String fname) {
- makeFilePath(context, fname).delete();
- }
-
- private static File makeFilePath(Context context, String fname) {
- return new File(context.getFilesDir(), fname);
- }
-
- /** Clears the current stats and forces recreating for future use. */
- @UnsupportedAppUsage
- public void clearStats() {
- mStats = null;
- }
-
- @UnsupportedAppUsage
- public BatteryStats getStats() {
- return getStats(true /* updateAll */);
- }
-
- /** Retrieves stats from BatteryService, optionally getting updated numbers */
- public BatteryStats getStats(boolean updateAll) {
- if (mStats == null) {
- load(updateAll);
- }
- return mStats;
- }
-
- @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public Intent getBatteryBroadcast() {
- if (mBatteryBroadcast == null && mCollectBatteryBroadcast) {
- load();
- }
- return mBatteryBroadcast;
- }
-
- public PowerProfile getPowerProfile() {
- return mPowerProfile;
- }
-
- public void create(BatteryStats stats) {
- mPowerProfile = new PowerProfile(mContext);
- mStats = stats;
- }
-
- @UnsupportedAppUsage
- public void create(Bundle icicle) {
- if (icicle != null) {
- mStats = sStatsXfer;
- mBatteryBroadcast = sBatteryBroadcastXfer;
- }
- mBatteryInfo = IBatteryStats.Stub.asInterface(
- ServiceManager.getService(BatteryStats.SERVICE_NAME));
- mPowerProfile = new PowerProfile(mContext);
- }
-
- @UnsupportedAppUsage
- public void storeState() {
- sStatsXfer = mStats;
- sBatteryBroadcastXfer = mBatteryBroadcast;
- }
-
- /**
- * Refreshes the power usage list.
- */
- @UnsupportedAppUsage
- public void refreshStats(int statsType, int asUser) {
- SparseArray<UserHandle> users = new SparseArray<>(1);
- users.put(asUser, new UserHandle(asUser));
- refreshStats(statsType, users);
- }
-
- /**
- * Refreshes the power usage list.
- */
- @UnsupportedAppUsage
- public void refreshStats(int statsType, List<UserHandle> asUsers) {
- final int n = asUsers.size();
- SparseArray<UserHandle> users = new SparseArray<>(n);
- for (int i = 0; i < n; ++i) {
- UserHandle userHandle = asUsers.get(i);
- users.put(userHandle.getIdentifier(), userHandle);
- }
- refreshStats(statsType, users);
- }
-
- /**
- * Refreshes the power usage list.
- */
- @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public void refreshStats(int statsType, SparseArray<UserHandle> asUsers) {
- refreshStats(statsType, asUsers, SystemClock.elapsedRealtime() * 1000,
- SystemClock.uptimeMillis() * 1000);
- }
-
- public void refreshStats(int statsType, SparseArray<UserHandle> asUsers, long rawRealtimeUs,
- long rawUptimeUs) {
- if (statsType != BatteryStats.STATS_SINCE_CHARGED) {
- Log.w(TAG, "refreshStats called for statsType " + statsType + " but only "
- + "STATS_SINCE_CHARGED is supported. Using STATS_SINCE_CHARGED instead.");
- }
-
- // Initialize mStats if necessary.
- getStats();
-
- mMaxPower = 0;
- mMaxRealPower = 0;
- mComputedPower = 0;
- mTotalPower = 0;
-
- mUsageList.clear();
- mMobilemsppList.clear();
-
- if (mStats == null) {
- return;
- }
-
- if (mPowerCalculators == null) {
- mPowerCalculators = new ArrayList<>();
-
- // Power calculators are applied in the order of registration
- mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
- if (!mWifiOnly) {
- mPowerCalculators.add(new MobileRadioPowerCalculator(mPowerProfile));
- }
- mPowerCalculators.add(new WifiPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new BluetoothPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new SensorPowerCalculator(
- mContext.getSystemService(SensorManager.class)));
- mPowerCalculators.add(new GnssPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new CameraPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new FlashlightPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new MediaPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new PhonePowerCalculator(mPowerProfile));
- mPowerCalculators.add(new ScreenPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new AmbientDisplayPowerCalculator(mPowerProfile));
- mPowerCalculators.add(new SystemServicePowerCalculator(mPowerProfile));
- mPowerCalculators.add(new IdlePowerCalculator(mPowerProfile));
- mPowerCalculators.add(new CustomMeasuredPowerCalculator(mPowerProfile));
-
- mPowerCalculators.add(new UserPowerCalculator());
- }
-
- for (int i = 0, size = mPowerCalculators.size(); i < size; i++) {
- mPowerCalculators.get(i).reset();
- }
-
- mStatsType = statsType;
- mRawUptimeUs = rawUptimeUs;
- mRawRealtimeUs = rawRealtimeUs;
- mBatteryUptimeUs = mStats.getBatteryUptime(rawUptimeUs);
- mBatteryRealtimeUs = mStats.getBatteryRealtime(rawRealtimeUs);
- mBatteryTimeRemainingUs = mStats.computeBatteryTimeRemaining(rawRealtimeUs);
- mChargeTimeRemainingUs = mStats.computeChargeTimeRemaining(rawRealtimeUs);
- mStatsPeriod = mStats.computeBatteryRealtime(rawRealtimeUs, mStatsType);
-
- if (DEBUG) {
- Log.d(TAG, "Raw time: realtime=" + (rawRealtimeUs / 1000) + " uptime="
- + (rawUptimeUs / 1000));
- Log.d(TAG, "Battery time: realtime=" + (mBatteryRealtimeUs / 1000) + " uptime="
- + (mBatteryUptimeUs / 1000));
- Log.d(TAG, "Battery type time: realtime=" + (mStatsPeriod / 1000) + " uptime="
- + (mStats.computeBatteryUptime(rawRealtimeUs, mStatsType) / 1000));
- }
- mMinDrainedPower = (mStats.getLowDischargeAmountSinceCharge()
- * mPowerProfile.getBatteryCapacity()) / 100;
- mMaxDrainedPower = (mStats.getHighDischargeAmountSinceCharge()
- * mPowerProfile.getBatteryCapacity()) / 100;
-
- // Create list of (almost all) sippers, calculate their usage, and put them in mUsageList.
- processAppUsage(asUsers);
-
- Collections.sort(mUsageList);
-
- Collections.sort(mMobilemsppList,
- (lhs, rhs) -> Double.compare(rhs.mobilemspp, lhs.mobilemspp));
-
- // At this point, we've sorted the list so we are guaranteed the max values are at the top.
- // We have only added real powers so far.
- if (!mUsageList.isEmpty()) {
- mMaxRealPower = mMaxPower = mUsageList.get(0).totalPowerMah;
- final int usageListCount = mUsageList.size();
- for (int i = 0; i < usageListCount; i++) {
- mComputedPower += mUsageList.get(i).totalPowerMah;
- }
- }
-
- if (DEBUG) {
- Log.d(TAG, "Accuracy: total computed=" + BatteryStats.formatCharge(mComputedPower)
- + ", min discharge=" + BatteryStats.formatCharge(mMinDrainedPower)
- + ", max discharge=" + BatteryStats.formatCharge(mMaxDrainedPower));
- }
-
- mTotalPower = mComputedPower;
- if (mStats.getLowDischargeAmountSinceCharge() > 1) {
- if (mMinDrainedPower > mComputedPower) {
- double amount = mMinDrainedPower - mComputedPower;
- mTotalPower = mMinDrainedPower;
- BatterySipper bs = new BatterySipper(DrainType.UNACCOUNTED, null, amount);
-
- // Insert the BatterySipper in its sorted position.
- int index = Collections.binarySearch(mUsageList, bs);
- if (index < 0) {
- index = -(index + 1);
- }
- mUsageList.add(index, bs);
- mMaxPower = Math.max(mMaxPower, amount);
- } else if (mMaxDrainedPower < mComputedPower) {
- double amount = mComputedPower - mMaxDrainedPower;
-
- // Insert the BatterySipper in its sorted position.
- BatterySipper bs = new BatterySipper(DrainType.OVERCOUNTED, null, amount);
- int index = Collections.binarySearch(mUsageList, bs);
- if (index < 0) {
- index = -(index + 1);
- }
- mUsageList.add(index, bs);
- mMaxPower = Math.max(mMaxPower, amount);
- }
- }
-
- // Smear it!
- final double hiddenPowerMah = removeHiddenBatterySippers(mUsageList);
- final double totalRemainingPower = getTotalPower() - hiddenPowerMah;
- if (Math.abs(totalRemainingPower) > 1e-3) {
- for (int i = 0, size = mUsageList.size(); i < size; i++) {
- final BatterySipper sipper = mUsageList.get(i);
- if (!sipper.shouldHide) {
- sipper.proportionalSmearMah = hiddenPowerMah
- * ((sipper.totalPowerMah + sipper.screenPowerMah)
- / totalRemainingPower);
- sipper.sumPower();
- }
- }
- }
- }
-
- private void processAppUsage(SparseArray<UserHandle> asUsers) {
- final SparseArray<? extends Uid> uidStats = mStats.getUidStats();
-
- final ArrayList<BatterySipper> sippers = new ArrayList<>(uidStats.size());
-
- for (int iu = 0, size = uidStats.size(); iu < size; iu++) {
- final Uid u = uidStats.valueAt(iu);
- sippers.add(new BatterySipper(DrainType.APP, u, 0));
- }
-
- for (int i = 0, size = mPowerCalculators.size(); i < size; i++) {
- final PowerCalculator calculator = mPowerCalculators.get(i);
- calculator.calculate(sippers, mStats, mRawRealtimeUs, mRawUptimeUs, mStatsType,
- asUsers);
- }
-
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper sipper = sippers.get(i);
- final double totalPower = sipper.sumPower();
- if (DEBUG && totalPower != 0) {
- Log.d(TAG, String.format("UID %d: total power=%s", sipper.getUid(),
- BatteryStats.formatCharge(totalPower)));
- }
-
- // Add the sipper to the list if it is consuming power.
- if (totalPower != 0 || sipper.getUid() == 0) {
- if (sipper.drainType == DrainType.APP) {
- sipper.computeMobilemspp();
- if (sipper.mobilemspp != 0) {
- mMobilemsppList.add(sipper);
- }
- }
-
- if (!sipper.isAggregated) {
- mUsageList.add(sipper);
- }
- }
- }
- }
-
- @UnsupportedAppUsage
- public List<BatterySipper> getUsageList() {
- return mUsageList;
- }
-
- public List<BatterySipper> getMobilemsppList() {
- return mMobilemsppList;
- }
-
- public long getStatsPeriod() {
- return mStatsPeriod;
- }
-
- public int getStatsType() {
- return mStatsType;
- }
-
- @UnsupportedAppUsage
- public double getMaxPower() {
- return mMaxPower;
- }
-
- public double getMaxRealPower() {
- return mMaxRealPower;
- }
-
- @UnsupportedAppUsage
- public double getTotalPower() {
- return mTotalPower;
- }
-
- public double getComputedPower() {
- return mComputedPower;
- }
-
- public double getMinDrainedPower() {
- return mMinDrainedPower;
- }
-
- public double getMaxDrainedPower() {
- return mMaxDrainedPower;
- }
-
- public static byte[] readFully(FileInputStream stream) throws java.io.IOException {
- return readFully(stream, stream.available());
- }
-
- public static byte[] readFully(FileInputStream stream, int avail) throws java.io.IOException {
- int pos = 0;
- byte[] data = new byte[avail];
- while (true) {
- int amt = stream.read(data, pos, data.length - pos);
- //Log.i("foo", "Read " + amt + " bytes at " + pos
- // + " of avail " + data.length);
- if (amt <= 0) {
- //Log.i("foo", "**** FINISHED READING: pos=" + pos
- // + " len=" + data.length);
- return data;
- }
- pos += amt;
- avail = stream.available();
- if (avail > data.length - pos) {
- byte[] newData = new byte[pos + avail];
- System.arraycopy(data, 0, newData, 0, pos);
- data = newData;
- }
- }
- }
-
- /**
- * Mark the {@link BatterySipper} that we should hide.
- *
- * @param sippers sipper list that need to check and remove
- * @return the total power of the hidden items of {@link BatterySipper}
- * for proportional smearing
- */
- public double removeHiddenBatterySippers(List<BatterySipper> sippers) {
- double proportionalSmearPowerMah = 0;
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper sipper = sippers.get(i);
- sipper.shouldHide = shouldHideSipper(sipper);
- if (sipper.shouldHide) {
- if (sipper.drainType != DrainType.OVERCOUNTED
- && sipper.drainType != DrainType.SCREEN
- && sipper.drainType != DrainType.AMBIENT_DISPLAY
- && sipper.drainType != DrainType.UNACCOUNTED
- && sipper.drainType != DrainType.BLUETOOTH
- && sipper.drainType != DrainType.WIFI
- && sipper.drainType != DrainType.IDLE) {
- // Don't add it if it is overcounted, unaccounted or screen
- proportionalSmearPowerMah += sipper.totalPowerMah;
- }
- }
- }
- return proportionalSmearPowerMah;
- }
-
- /**
- * Check whether we should hide the battery sipper.
- */
- public boolean shouldHideSipper(BatterySipper sipper) {
- final DrainType drainType = sipper.drainType;
-
- return drainType == DrainType.IDLE
- || drainType == DrainType.CELL
- || drainType == DrainType.SCREEN
- || drainType == DrainType.AMBIENT_DISPLAY
- || drainType == DrainType.UNACCOUNTED
- || drainType == DrainType.OVERCOUNTED
- || isTypeService(sipper)
- || isTypeSystem(sipper);
- }
-
- /**
- * Check whether {@code sipper} is type service
- */
- public boolean isTypeService(BatterySipper sipper) {
- final String[] packages = mPackageManager.getPackagesForUid(sipper.getUid());
- if (packages == null) {
- return false;
- }
-
- for (String packageName : packages) {
- if (ArrayUtils.contains(mServicepackageArray, packageName)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Check whether {@code sipper} is type system
- */
- public boolean isTypeSystem(BatterySipper sipper) {
- final int uid = sipper.uidObj == null ? -1 : sipper.getUid();
- sipper.mPackages = mPackageManager.getPackagesForUid(uid);
- // Classify all the sippers to type system if the range of uid is 0...FIRST_APPLICATION_UID
- if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) {
- return true;
- } else if (sipper.mPackages != null) {
- for (final String packageName : sipper.mPackages) {
- if (ArrayUtils.contains(mSystemPackageArray, packageName)) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- public long convertUsToMs(long timeUs) {
- return timeUs / 1000;
- }
-
- public long convertMsToUs(long timeMs) {
- return timeMs * 1000;
- }
-
- @VisibleForTesting
- public void setPackageManager(PackageManager packageManager) {
- mPackageManager = packageManager;
- }
-
- @VisibleForTesting
- public void setSystemPackageArray(String[] array) {
- mSystemPackageArray = array;
- }
-
- @VisibleForTesting
- public void setServicePackageArray(String[] array) {
- mServicepackageArray = array;
- }
-
- @UnsupportedAppUsage
- private void load() {
- load(true);
- }
-
- private void load(boolean updateAll) {
- if (mBatteryInfo == null) {
- return;
- }
- mStats = getStats(mBatteryInfo, updateAll);
- if (mCollectBatteryBroadcast) {
- mBatteryBroadcast = mContext.registerReceiver(null,
- new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- }
- }
-
- private static BatteryStatsImpl getStats(IBatteryStats service, boolean updateAll) {
- try {
- ParcelFileDescriptor pfd = service.getStatisticsStream(updateAll);
- if (pfd != null) {
- if (false) {
- Log.d(TAG, "selinux context: "
- + SELinux.getFileContext(pfd.getFileDescriptor()));
- }
- try (FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(pfd)) {
- byte[] data = readFully(fis, MemoryFile.getSize(pfd.getFileDescriptor()));
- Parcel parcel = Parcel.obtain();
- parcel.unmarshall(data, 0, data.length);
- parcel.setDataPosition(0);
- BatteryStatsImpl stats = com.android.internal.os.BatteryStatsImpl.CREATOR
- .createFromParcel(parcel);
- return stats;
- } catch (IOException e) {
- Log.w(TAG, "Unable to read statistics stream", e);
- }
- }
- } catch (RemoteException e) {
- Log.w(TAG, "RemoteException:", e);
- }
- return new BatteryStatsImpl();
- }
-}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 5ba45c9b8bc3..70b96392b0e5 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -9211,7 +9211,7 @@ public class BatteryStatsImpl extends BatteryStats {
* Gets the minimum of the uid's foreground activity time and its PROCESS_STATE_TOP time
* since last marked. Also sets the mark time for both these timers.
*
- * @see BatteryStatsHelper#getProcessForegroundTimeMs
+ * @see CpuPowerCalculator
*
* @param doCalc if true, then calculate the minimum; else don't bother and return 0. Either
* way, the mark is set.
diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
index e4d5fb7a3ede..a1c1917fd83e 100644
--- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
+++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
@@ -73,7 +73,7 @@ public class BatteryUsageStatsProvider {
mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
- if (!BatteryStatsHelper.checkWifiOnly(mContext)) {
+ if (!BatteryStats.checkWifiOnly(mContext)) {
mPowerCalculators.add(new MobileRadioPowerCalculator(mPowerProfile));
}
mPowerCalculators.add(new WifiPowerCalculator(mPowerProfile));
diff --git a/core/java/com/android/internal/os/BluetoothPowerCalculator.java b/core/java/com/android/internal/os/BluetoothPowerCalculator.java
index e0eeb8990710..2ebf689e2c7f 100644
--- a/core/java/com/android/internal/os/BluetoothPowerCalculator.java
+++ b/core/java/com/android/internal/os/BluetoothPowerCalculator.java
@@ -21,14 +21,11 @@ import android.os.BatteryStats;
import android.os.BatteryStats.ControllerActivityCounter;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.Process;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.Log;
import android.util.SparseArray;
import java.util.Arrays;
-import java.util.List;
public class BluetoothPowerCalculator extends PowerCalculator {
private static final String TAG = "BluetoothPowerCalc";
@@ -159,73 +156,6 @@ public class BluetoothPowerCalculator extends PowerCalculator {
}
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- if (!mHasBluetoothPowerController || !batteryStats.hasBluetoothActivityReporting()) {
- return;
- }
-
- PowerAndDuration powerAndDuration = new PowerAndDuration();
-
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- calculateApp(app, app.uidObj, statsType, powerAndDuration);
- }
- }
-
- BatterySipper bs = new BatterySipper(BatterySipper.DrainType.BLUETOOTH, null, 0);
- final long measuredChargeUC = batteryStats.getBluetoothMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(measuredChargeUC);
- final ControllerActivityCounter activityCounter =
- batteryStats.getBluetoothControllerActivity();
- calculatePowerAndDuration(null, powerModel, measuredChargeUC, activityCounter, false,
- powerAndDuration);
-
- // Subtract what the apps used, but clamp to 0.
- final double powerMah = Math.max(0,
- powerAndDuration.powerMah - powerAndDuration.totalPowerMah);
- final long durationMs = Math.max(0,
- powerAndDuration.durationMs - powerAndDuration.totalDurationMs);
- if (DEBUG && powerMah != 0) {
- Log.d(TAG, "Bluetooth active: time=" + (durationMs)
- + " power=" + BatteryStats.formatCharge(powerMah));
- }
-
- bs.bluetoothPowerMah = powerMah;
- bs.bluetoothRunningTimeMs = durationMs;
-
- for (int i = sippers.size() - 1; i >= 0; i--) {
- BatterySipper app = sippers.get(i);
- if (app.getUid() == Process.BLUETOOTH_UID) {
- if (DEBUG) Log.d(TAG, "Bluetooth adding sipper " + app + ": cpu=" + app.cpuTimeMs);
- app.isAggregated = true;
- bs.add(app);
- }
- }
- if (bs.sumPower() > 0) {
- sippers.add(bs);
- }
- }
-
- private void calculateApp(BatterySipper app, BatteryStats.Uid u, int statsType,
- PowerAndDuration powerAndDuration) {
- final long measuredChargeUC = u.getBluetoothMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(measuredChargeUC);
- final ControllerActivityCounter activityCounter = u.getBluetoothControllerActivity();
- calculatePowerAndDuration(u, powerModel, measuredChargeUC, activityCounter,
- false, powerAndDuration);
-
- app.bluetoothRunningTimeMs = powerAndDuration.durationMs;
- app.bluetoothPowerMah = powerAndDuration.powerMah;
- app.btRxBytes = u.getNetworkActivityBytes(BatteryStats.NETWORK_BT_RX_DATA, statsType);
- app.btTxBytes = u.getNetworkActivityBytes(BatteryStats.NETWORK_BT_TX_DATA, statsType);
-
- powerAndDuration.totalDurationMs += powerAndDuration.durationMs;
- powerAndDuration.totalPowerMah += powerAndDuration.powerMah;
- }
-
/** Returns bluetooth power usage based on the best data available. */
private void calculatePowerAndDuration(@Nullable BatteryStats.Uid uid,
@BatteryConsumer.PowerModel int powerModel,
diff --git a/core/java/com/android/internal/os/CameraPowerCalculator.java b/core/java/com/android/internal/os/CameraPowerCalculator.java
index 7bccab5fc665..d0749e02abdd 100644
--- a/core/java/com/android/internal/os/CameraPowerCalculator.java
+++ b/core/java/com/android/internal/os/CameraPowerCalculator.java
@@ -69,14 +69,4 @@ public class CameraPowerCalculator extends PowerCalculator {
app.setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CAMERA, durationMs)
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_CAMERA, powerMah);
}
-
- @Override
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- long rawUptimeUs, int statsType) {
- final long durationMs = mPowerEstimator.calculateDuration(u.getCameraTurnedOnTimer(),
- rawRealtimeUs, statsType);
- final double powerMah = mPowerEstimator.calculatePower(durationMs);
- app.cameraTimeMs = durationMs;
- app.cameraPowerMah = powerMah;
- }
}
diff --git a/core/java/com/android/internal/os/CpuPowerCalculator.java b/core/java/com/android/internal/os/CpuPowerCalculator.java
index db229c082b40..1fc2baf040b6 100644
--- a/core/java/com/android/internal/os/CpuPowerCalculator.java
+++ b/core/java/com/android/internal/os/CpuPowerCalculator.java
@@ -20,13 +20,11 @@ import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseArray;
import java.util.Arrays;
-import java.util.List;
public class CpuPowerCalculator extends PowerCalculator {
private static final String TAG = "CpuPowerCalculator";
@@ -217,29 +215,6 @@ public class CpuPowerCalculator extends PowerCalculator {
}
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- Result result = new Result();
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- calculateApp(app, app.uidObj, statsType, result);
- }
- }
- }
-
- private void calculateApp(BatterySipper app, BatteryStats.Uid u, int statsType, Result result) {
- final long consumptionUC = u.getCpuMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- calculatePowerAndDuration(u, powerModel, consumptionUC, statsType, result);
-
- app.cpuPowerMah = result.powerMah;
- app.cpuTimeMs = result.durationMs;
- app.cpuFgTimeMs = result.durationFgMs;
- app.packageWithHighestDrain = result.packageWithHighestDrain;
- }
-
private void calculatePowerAndDuration(BatteryStats.Uid u,
@BatteryConsumer.PowerModel int powerModel, long consumptionUC, int statsType,
Result result) {
diff --git a/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java b/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java
index 4cb7ef114094..cbbb52621111 100644
--- a/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java
+++ b/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java
@@ -102,16 +102,6 @@ public class CustomMeasuredPowerCalculator extends PowerCalculator {
return newTotalPowerMah;
}
- @Override
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- long rawUptimeUs, int statsType) {
- updateCustomMeasuredPowerMah(app, u.getCustomConsumerMeasuredBatteryConsumptionUC());
- }
-
- private void updateCustomMeasuredPowerMah(BatterySipper sipper, long[] measuredChargeUC) {
- sipper.customMeasuredPowerMah = calculateMeasuredEnergiesMah(measuredChargeUC);
- }
-
private double[] calculateMeasuredEnergiesMah(long[] measuredChargeUC) {
if (measuredChargeUC == null) {
return null;
diff --git a/core/java/com/android/internal/os/FlashlightPowerCalculator.java b/core/java/com/android/internal/os/FlashlightPowerCalculator.java
index 7d3f9625aa4e..ce3e7b9c7484 100644
--- a/core/java/com/android/internal/os/FlashlightPowerCalculator.java
+++ b/core/java/com/android/internal/os/FlashlightPowerCalculator.java
@@ -66,14 +66,4 @@ public class FlashlightPowerCalculator extends PowerCalculator {
app.setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT, durationMs)
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT, powerMah);
}
-
- @Override
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- long rawUptimeUs, int statsType) {
- final long durationMs = mPowerEstimator.calculateDuration(u.getFlashlightTurnedOnTimer(),
- rawRealtimeUs, statsType);
- final double powerMah = mPowerEstimator.calculatePower(durationMs);
- app.flashlightTimeMs = durationMs;
- app.flashlightPowerMah = powerMah;
- }
}
diff --git a/core/java/com/android/internal/os/GnssPowerCalculator.java b/core/java/com/android/internal/os/GnssPowerCalculator.java
index a836ddb444f4..0f783062f3e7 100644
--- a/core/java/com/android/internal/os/GnssPowerCalculator.java
+++ b/core/java/com/android/internal/os/GnssPowerCalculator.java
@@ -21,11 +21,8 @@ import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.SparseArray;
-import java.util.List;
-
/**
* Estimates the amount of power consumed by the GNSS (e.g. GPS).
*/
@@ -100,41 +97,6 @@ public class GnssPowerCalculator extends PowerCalculator {
return powerMah;
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- double averageGnssPowerMa = getAverageGnssPower(batteryStats, rawRealtimeUs, statsType);
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- final long consumptionUC =
- app.uidObj.getGnssMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- calculateApp(app, app.uidObj, powerModel, rawRealtimeUs, averageGnssPowerMa,
- consumptionUC);
- }
- }
- }
-
- private void calculateApp(BatterySipper app, BatteryStats.Uid u,
- @BatteryConsumer.PowerModel int powerModel, long rawRealtimeUs,
- double averageGnssPowerMa, long measuredChargeUC) {
- final long durationMs = computeDuration(u, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
-
- final double powerMah;
- switch (powerModel) {
- case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
- powerMah = uCtoMah(measuredChargeUC);
- break;
- case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
- default:
- powerMah = computePower(durationMs, averageGnssPowerMa);
- }
-
- app.gpsTimeMs = durationMs;
- app.gpsPowerMah = powerMah;
- }
-
private long computeDuration(BatteryStats.Uid u, long rawRealtimeUs, int statsType) {
final SparseArray<? extends BatteryStats.Uid.Sensor> sensorStats = u.getSensorStats();
final BatteryStats.Uid.Sensor sensor = sensorStats.get(BatteryStats.Uid.Sensor.GPS);
diff --git a/core/java/com/android/internal/os/IdlePowerCalculator.java b/core/java/com/android/internal/os/IdlePowerCalculator.java
index 43be041f262a..5b2052e9edaa 100644
--- a/core/java/com/android/internal/os/IdlePowerCalculator.java
+++ b/core/java/com/android/internal/os/IdlePowerCalculator.java
@@ -20,11 +20,7 @@ import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.UserHandle;
import android.util.Log;
-import android.util.SparseArray;
-
-import java.util.List;
/**
* Estimates the amount of power consumed when the device is idle.
@@ -64,20 +60,6 @@ public class IdlePowerCalculator extends PowerCalculator {
}
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- calculatePowerAndDuration(batteryStats, rawRealtimeUs, rawUptimeUs, statsType);
-
- if (mPowerMah != 0) {
- BatterySipper bs = new BatterySipper(BatterySipper.DrainType.IDLE, null, 0);
- bs.usagePowerMah = mPowerMah;
- bs.usageTimeMs = mDurationMs;
- bs.sumPower();
- sippers.add(bs);
- }
- }
-
/**
* Calculates the baseline power usage for the device when it is in suspend and idle.
* The device is drawing POWER_CPU_SUSPEND power at its lowest power state.
diff --git a/core/java/com/android/internal/os/MediaPowerCalculator.java b/core/java/com/android/internal/os/MediaPowerCalculator.java
deleted file mode 100644
index fff96dacf84b..000000000000
--- a/core/java/com/android/internal/os/MediaPowerCalculator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.internal.os;
-
-import android.os.BatteryConsumer;
-import android.os.BatteryStats;
-
-/**
- * A {@link PowerCalculator} to calculate power consumed by audio and video hardware.
- *
- * Also see {@link PowerProfile#POWER_AUDIO} and {@link PowerProfile#POWER_VIDEO}.
- */
-public class MediaPowerCalculator extends PowerCalculator {
- private static final int MS_IN_HR = 1000 * 60 * 60;
- private final double mAudioAveragePowerMa;
- private final double mVideoAveragePowerMa;
-
- public MediaPowerCalculator(PowerProfile profile) {
- mAudioAveragePowerMa = profile.getAveragePower(PowerProfile.POWER_AUDIO);
- mVideoAveragePowerMa = profile.getAveragePower(PowerProfile.POWER_VIDEO);
- }
-
- @Override
- public boolean isPowerComponentSupported(@BatteryConsumer.PowerComponent int powerComponent) {
- return powerComponent == BatteryConsumer.POWER_COMPONENT_VIDEO
- || powerComponent == BatteryConsumer.POWER_COMPONENT_AUDIO;
- }
-
- @Override
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- long rawUptimeUs, int statsType) {
- // Calculate audio power usage, an estimate based on the average power routed to different
- // components like speaker, bluetooth, usb-c, earphone, etc.
- final BatteryStats.Timer audioTimer = u.getAudioTurnedOnTimer();
- if (audioTimer == null) {
- app.audioTimeMs = 0;
- app.audioPowerMah = 0;
- } else {
- final long totalTime = audioTimer.getTotalTimeLocked(rawRealtimeUs, statsType) / 1000;
- app.audioTimeMs = totalTime;
- app.audioPowerMah = (totalTime * mAudioAveragePowerMa) / MS_IN_HR;
- }
-
- // Calculate video power usage.
- final BatteryStats.Timer videoTimer = u.getVideoTurnedOnTimer();
- if (videoTimer == null) {
- app.videoTimeMs = 0;
- app.videoPowerMah = 0;
- } else {
- final long totalTime = videoTimer.getTotalTimeLocked(rawRealtimeUs, statsType) / 1000;
- app.videoTimeMs = totalTime;
- app.videoPowerMah = (totalTime * mVideoAveragePowerMa) / MS_IN_HR;
- }
- }
-}
diff --git a/core/java/com/android/internal/os/MemoryPowerCalculator.java b/core/java/com/android/internal/os/MemoryPowerCalculator.java
index 0440a588a093..0d3040cc7f92 100644
--- a/core/java/com/android/internal/os/MemoryPowerCalculator.java
+++ b/core/java/com/android/internal/os/MemoryPowerCalculator.java
@@ -4,11 +4,7 @@ import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.UserHandle;
import android.util.LongSparseArray;
-import android.util.SparseArray;
-
-import java.util.List;
public class MemoryPowerCalculator extends PowerCalculator {
public static final String TAG = "MemoryPowerCalculator";
@@ -41,20 +37,6 @@ public class MemoryPowerCalculator extends PowerCalculator {
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_MEMORY, powerMah);
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- final long durationMs = calculateDuration(batteryStats, rawRealtimeUs, statsType);
- final double powerMah = calculatePower(batteryStats, rawRealtimeUs, statsType);
- BatterySipper memory = new BatterySipper(BatterySipper.DrainType.MEMORY, null, 0);
- memory.usageTimeMs = durationMs;
- memory.usagePowerMah = powerMah;
- memory.sumPower();
- if (memory.totalPowerMah > 0) {
- sippers.add(memory);
- }
- }
-
private long calculateDuration(BatteryStats batteryStats, long rawRealtimeUs, int statsType) {
long usageDurationMs = 0;
LongSparseArray<? extends BatteryStats.Timer> timers = batteryStats.getKernelMemoryStats();
diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
index 5d0bd104267c..f4624de289be 100644
--- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
+++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
@@ -20,13 +20,10 @@ import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.telephony.CellSignalStrength;
import android.util.Log;
import android.util.SparseArray;
-import java.util.List;
-
public class MobileRadioPowerCalculator extends PowerCalculator {
private static final String TAG = "MobRadioPowerCalculator";
private static final boolean DEBUG = PowerCalculator.DEBUG;
@@ -170,65 +167,6 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
}
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- PowerAndDuration total = new PowerAndDuration();
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- final BatteryStats.Uid u = app.uidObj;
- calculateApp(app, u, statsType, total);
- }
- }
-
- BatterySipper radio = new BatterySipper(BatterySipper.DrainType.CELL, null, 0);
- final long consumptionUC = batteryStats.getMobileRadioMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- calculateRemaining(total, powerModel, batteryStats, rawRealtimeUs, consumptionUC);
- if (total.remainingPowerMah != 0) {
- if (total.signalDurationMs != 0) {
- radio.noCoveragePercent =
- total.noCoverageDurationMs * 100.0 / total.signalDurationMs;
- }
- radio.mobileActive = total.durationMs;
- radio.mobileActiveCount = batteryStats.getMobileRadioActiveUnknownCount(statsType);
- radio.mobileRadioPowerMah = total.remainingPowerMah;
- radio.sumPower();
- }
- if (radio.totalPowerMah > 0) {
- sippers.add(radio);
- }
- }
-
- private void calculateApp(BatterySipper app, BatteryStats.Uid u, int statsType,
- PowerAndDuration total) {
- app.mobileActive = calculateDuration(u, statsType);
-
- final long consumptionUC = u.getMobileRadioMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- app.mobileRadioPowerMah = calculatePower(u, powerModel, app.mobileActive, consumptionUC);
- total.totalAppDurationMs += app.mobileActive;
-
- // Add cost of mobile traffic.
- app.mobileRxPackets = u.getNetworkActivityPackets(BatteryStats.NETWORK_MOBILE_RX_DATA,
- statsType);
- app.mobileTxPackets = u.getNetworkActivityPackets(BatteryStats.NETWORK_MOBILE_TX_DATA,
- statsType);
- app.mobileActiveCount = u.getMobileRadioActiveCount(statsType);
- app.mobileRxBytes = u.getNetworkActivityBytes(BatteryStats.NETWORK_MOBILE_RX_DATA,
- statsType);
- app.mobileTxBytes = u.getNetworkActivityBytes(BatteryStats.NETWORK_MOBILE_TX_DATA,
- statsType);
-
- if (DEBUG && app.mobileRadioPowerMah != 0) {
- Log.d(TAG, "UID " + u.getUid() + ": mobile packets "
- + (app.mobileRxPackets + app.mobileTxPackets)
- + " active time " + app.mobileActive
- + " power=" + BatteryStats.formatCharge(app.mobileRadioPowerMah));
- }
- }
-
private long calculateDuration(BatteryStats.Uid u, int statsType) {
return u.getMobileRadioActiveTime(statsType) / 1000;
}
diff --git a/core/java/com/android/internal/os/PhonePowerCalculator.java b/core/java/com/android/internal/os/PhonePowerCalculator.java
index 73103148a945..cb893defab14 100644
--- a/core/java/com/android/internal/os/PhonePowerCalculator.java
+++ b/core/java/com/android/internal/os/PhonePowerCalculator.java
@@ -20,10 +20,6 @@ import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.UserHandle;
-import android.util.SparseArray;
-
-import java.util.List;
/**
* Estimates power consumed by telephony.
@@ -54,18 +50,4 @@ public class PhonePowerCalculator extends PowerCalculator {
.setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_PHONE, phoneOnTimeMs);
}
}
-
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- final long phoneOnTimeMs = batteryStats.getPhoneOnTime(rawRealtimeUs, statsType) / 1000;
- final double phoneOnPower = mPowerEstimator.calculatePower(phoneOnTimeMs);
- if (phoneOnPower != 0) {
- BatterySipper bs = new BatterySipper(BatterySipper.DrainType.PHONE, null, 0);
- bs.usagePowerMah = phoneOnPower;
- bs.usageTimeMs = phoneOnTimeMs;
- bs.sumPower();
- sippers.add(bs);
- }
- }
}
diff --git a/core/java/com/android/internal/os/PowerCalculator.java b/core/java/com/android/internal/os/PowerCalculator.java
index fa7acf22bd90..ec785b8ac502 100644
--- a/core/java/com/android/internal/os/PowerCalculator.java
+++ b/core/java/com/android/internal/os/PowerCalculator.java
@@ -21,11 +21,9 @@ import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.SparseArray;
import java.io.PrintWriter;
-import java.util.List;
/**
* Calculates power use of a device subsystem for an app.
@@ -42,34 +40,6 @@ public abstract class PowerCalculator {
public abstract boolean isPowerComponentSupported(
@BatteryConsumer.PowerComponent int powerComponent);
-
- /**
- * Attributes the total amount of power used by this subsystem to various consumers such
- * as apps.
- *
- * @param sippers A list of battery sippers that contains battery attribution data.
- * The calculator may modify the list.
- * @param batteryStats The recorded battery stats.
- * @param rawRealtimeUs The raw system realtime in microseconds.
- * @param rawUptimeUs The raw system uptime in microseconds.
- * @param statsType The type of stats. As of {@link android.os.Build.VERSION_CODES#Q}, this
- * can only be {@link BatteryStats#STATS_SINCE_CHARGED}, since
- * {@link BatteryStats#STATS_CURRENT} and
- * {@link BatteryStats#STATS_SINCE_UNPLUGGED} are deprecated.
- * @param asUsers An array of users for which the attribution is requested. It may
- * contain {@link UserHandle#USER_ALL} to indicate that the attribution
- * should be performed for all users.
- */
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- calculateApp(app, app.uidObj, rawRealtimeUs, rawUptimeUs, statsType);
- }
- }
- }
-
/**
* Attributes the total amount of power used by this subsystem to various consumers such
* as apps.
@@ -94,21 +64,6 @@ public abstract class PowerCalculator {
/**
* Calculate the amount of power an app used for this subsystem.
- * @param app The BatterySipper that represents the power use of an app.
- * @param u The recorded stats for the app.
- * @param rawRealtimeUs The raw system realtime in microseconds.
- * @param rawUptimeUs The raw system uptime in microseconds.
- * @param statsType The type of stats. As of {@link android.os.Build.VERSION_CODES#Q}, this can
- * only be {@link BatteryStats#STATS_SINCE_CHARGED}, since
- * {@link BatteryStats#STATS_CURRENT} and
- * {@link BatteryStats#STATS_SINCE_UNPLUGGED} are deprecated.
- */
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- long rawUptimeUs, int statsType) {
- }
-
- /**
- * Calculate the amount of power an app used for this subsystem.
* @param app The UidBatteryConsumer.Builder that represents the power use of an app.
* @param u The recorded stats for the app.
* @param rawRealtimeUs The raw system realtime in microseconds.
diff --git a/core/java/com/android/internal/os/ScreenPowerCalculator.java b/core/java/com/android/internal/os/ScreenPowerCalculator.java
index aa902d7ec781..67d3d6e7bede 100644
--- a/core/java/com/android/internal/os/ScreenPowerCalculator.java
+++ b/core/java/com/android/internal/os/ScreenPowerCalculator.java
@@ -24,7 +24,6 @@ import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.text.format.DateUtils;
import android.util.Slog;
import android.util.SparseArray;
@@ -32,8 +31,6 @@ import android.util.SparseLongArray;
import com.android.internal.annotations.VisibleForTesting;
-import java.util.List;
-
/**
* Estimates power consumed by the screen(s)
*/
@@ -125,48 +122,6 @@ public class ScreenPowerCalculator extends PowerCalculator {
}
/**
- * Screen power is the additional power the screen takes while the device is running.
- */
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- final PowerAndDuration totalPowerAndDuration = new PowerAndDuration();
- final long consumptionUC = batteryStats.getScreenOnMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- calculateTotalDurationAndPower(totalPowerAndDuration, powerModel, batteryStats,
- rawRealtimeUs, statsType, consumptionUC);
- if (totalPowerAndDuration.powerMah == 0) {
- return;
- }
-
- // First deal with the SCREEN BatterySipper (since we need this for smearing over apps).
- final BatterySipper bs = new BatterySipper(BatterySipper.DrainType.SCREEN, null, 0);
- bs.usagePowerMah = totalPowerAndDuration.powerMah;
- bs.usageTimeMs = totalPowerAndDuration.durationMs;
- bs.sumPower();
- sippers.add(bs);
-
- // Now deal with each app's BatterySipper. The results are stored in the screenPowerMah
- // field, which is considered smeared, but the method depends on the data source.
- switch (powerModel) {
- case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
- final PowerAndDuration appPowerAndDuration = new PowerAndDuration();
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- calculateAppUsingMeasuredEnergy(appPowerAndDuration, app.uidObj,
- rawRealtimeUs);
- app.screenPowerMah = appPowerAndDuration.powerMah;
- }
- }
- break;
- case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
- default:
- smearScreenBatterySipper(sippers, bs, rawRealtimeUs);
- }
- }
-
- /**
* Stores duration and power information in totalPowerAndDuration.
*/
private void calculateTotalDurationAndPower(PowerAndDuration totalPowerAndDuration,
@@ -228,37 +183,8 @@ public class ScreenPowerCalculator extends PowerCalculator {
}
/**
- * Smear the screen on power usage among {@code sippers}, based on ratio of foreground activity
- * time, and store this in the {@link BatterySipper#screenPowerMah} field.
- */
- @VisibleForTesting
- public void smearScreenBatterySipper(List<BatterySipper> sippers, BatterySipper screenSipper,
- long rawRealtimeUs) {
- long totalActivityTimeMs = 0;
- final SparseLongArray activityTimeArray = new SparseLongArray();
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatteryStats.Uid uid = sippers.get(i).uidObj;
- if (uid != null) {
- final long timeMs = getProcessForegroundTimeMs(uid, rawRealtimeUs);
- activityTimeArray.put(uid.getUid(), timeMs);
- totalActivityTimeMs += timeMs;
- }
- }
-
- if (screenSipper != null && totalActivityTimeMs >= MIN_ACTIVE_TIME_FOR_SMEARING) {
- final double totalScreenPowerMah = screenSipper.totalPowerMah;
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper sipper = sippers.get(i);
- sipper.screenPowerMah = totalScreenPowerMah
- * activityTimeArray.get(sipper.getUid(), 0)
- / totalActivityTimeMs;
- }
- }
- }
-
- /**
- * Smear the screen on power usage among {@code sippers}, based on ratio of foreground activity
- * time, and store this in the {@link BatterySipper#screenPowerMah} field.
+ * Smear the screen on power usage among {@code UidBatteryConsumers}, based on ratio of
+ * foreground activity time.
*/
private void smearScreenBatteryDrain(
SparseArray<UidBatteryConsumer.Builder> uidBatteryConsumerBuilders,
diff --git a/core/java/com/android/internal/os/SensorPowerCalculator.java b/core/java/com/android/internal/os/SensorPowerCalculator.java
index 495a6d9aae50..4a9c91d14c4c 100644
--- a/core/java/com/android/internal/os/SensorPowerCalculator.java
+++ b/core/java/com/android/internal/os/SensorPowerCalculator.java
@@ -72,12 +72,6 @@ public class SensorPowerCalculator extends PowerCalculator {
return powerMah;
}
- @Override
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- long rawUptimeUs, int statsType) {
- app.sensorPowerMah = calculatePowerMah(u, rawRealtimeUs, statsType);
- }
-
private long calculateDuration(BatteryStats.Uid u, long rawRealtimeUs, int statsType) {
long durationMs = 0;
final SparseArray<? extends BatteryStats.Uid.Sensor> sensorStats = u.getSensorStats();
diff --git a/core/java/com/android/internal/os/SystemServicePowerCalculator.java b/core/java/com/android/internal/os/SystemServicePowerCalculator.java
index d7872badd0a2..3a3df87f94af 100644
--- a/core/java/com/android/internal/os/SystemServicePowerCalculator.java
+++ b/core/java/com/android/internal/os/SystemServicePowerCalculator.java
@@ -22,12 +22,9 @@ import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.Log;
import android.util.SparseArray;
-import java.util.List;
-
/**
* Estimates the amount of power consumed by the System Server handling requests from
* a given app.
@@ -121,55 +118,6 @@ public class SystemServicePowerCalculator extends PowerCalculator {
systemServicePowerMah);
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType,
- SparseArray<UserHandle> asUsers) {
- final BatteryStats.Uid systemUid = batteryStats.getUidStats().get(Process.SYSTEM_UID);
- if (systemUid == null) {
- return;
- }
-
- final long consumptionUC = systemUid.getCpuMeasuredBatteryConsumptionUC();
- double systemServicePowerMah;
- if (getPowerModel(consumptionUC) == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) {
- systemServicePowerMah = calculatePowerUsingMeasuredConsumption(batteryStats,
- systemUid, consumptionUC);
- } else {
- systemServicePowerMah = calculatePowerUsingPowerProfile(batteryStats);
- }
-
- BatterySipper systemServerSipper = null;
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- if (app.getUid() == Process.SYSTEM_UID) {
- systemServerSipper = app;
- break;
- }
- }
- }
-
- if (systemServerSipper != null) {
- systemServicePowerMah = Math.min(systemServicePowerMah, systemServerSipper.sumPower());
-
- // The system server power needs to be adjusted because part of it got
- // distributed to applications
- systemServerSipper.powerReattributedToOtherSippersMah = -systemServicePowerMah;
- }
-
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- if (app != systemServerSipper) {
- final BatteryStats.Uid uid = app.uidObj;
- app.systemServiceCpuPowerMah =
- systemServicePowerMah * uid.getProportionalSystemServiceUsage();
- }
- }
- }
- }
-
private double calculatePowerUsingMeasuredConsumption(BatteryStats batteryStats,
BatteryStats.Uid systemUid, long consumptionUC) {
// Use the PowerProfile based model to estimate the ratio between the power consumed
diff --git a/core/java/com/android/internal/os/UserPowerCalculator.java b/core/java/com/android/internal/os/UserPowerCalculator.java
index b590bf77283b..22cff6e2435a 100644
--- a/core/java/com/android/internal/os/UserPowerCalculator.java
+++ b/core/java/com/android/internal/os/UserPowerCalculator.java
@@ -27,8 +27,6 @@ import android.util.SparseArray;
import com.android.internal.util.ArrayUtils;
-import java.util.List;
-
/**
* Computes power consumed by Users
*/
@@ -65,40 +63,4 @@ public class UserPowerCalculator extends PowerCalculator {
}
}
}
-
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- final boolean forAllUsers = (asUsers.get(UserHandle.USER_ALL) != null);
- if (forAllUsers) {
- return;
- }
-
- SparseArray<BatterySipper> userSippers = new SparseArray<>();
-
- for (int i = sippers.size() - 1; i >= 0; i--) {
- BatterySipper sipper = sippers.get(i);
- final int uid = sipper.getUid();
- final int userId = UserHandle.getUserId(uid);
- if (asUsers.get(userId) == null
- && UserHandle.getAppId(uid) >= Process.FIRST_APPLICATION_UID) {
- // We are told to just report this user's apps as one accumulated entry.
- BatterySipper userSipper = userSippers.get(userId);
- if (userSipper == null) {
- userSipper = new BatterySipper(BatterySipper.DrainType.USER, null, 0);
- userSipper.userId = userId;
- userSippers.put(userId, userSipper);
- }
- userSipper.add(sipper);
- sipper.isAggregated = true;
- }
- }
-
- for (int i = 0; i < userSippers.size(); i++) {
- BatterySipper sipper = userSippers.valueAt(i);
- if (sipper.sumPower() > 0) {
- sippers.add(sipper);
- }
- }
- }
}
diff --git a/core/java/com/android/internal/os/WakelockPowerCalculator.java b/core/java/com/android/internal/os/WakelockPowerCalculator.java
index 53d6335bc23e..0251e1ccc885 100644
--- a/core/java/com/android/internal/os/WakelockPowerCalculator.java
+++ b/core/java/com/android/internal/os/WakelockPowerCalculator.java
@@ -21,13 +21,10 @@ import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseArray;
-import java.util.List;
-
public class WakelockPowerCalculator extends PowerCalculator {
private static final String TAG = "WakelockPowerCalculator";
private static final boolean DEBUG = PowerCalculator.DEBUG;
@@ -105,42 +102,6 @@ public class WakelockPowerCalculator extends PowerCalculator {
appPowerMah);
}
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
- final PowerAndDuration result = new PowerAndDuration();
- BatterySipper osSipper = null;
- double osPowerMah = 0;
- long osDurationMs = 0;
- long totalAppDurationMs = 0;
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- calculateApp(result, app.uidObj, rawRealtimeUs, statsType);
- app.wakeLockTimeMs = result.durationMs;
- app.wakeLockPowerMah = result.powerMah;
- totalAppDurationMs += result.durationMs;
-
- if (app.getUid() == Process.ROOT_UID) {
- osSipper = app;
- osPowerMah = result.powerMah;
- osDurationMs = result.durationMs;
- }
- }
- }
-
- // The device has probably been awake for longer than the screen on
- // time and application wake lock time would account for. Assign
- // this remainder to the OS, if possible.
- if (osSipper != null) {
- calculateRemaining(result, batteryStats, rawRealtimeUs, rawUptimeUs, statsType,
- osPowerMah, osDurationMs, totalAppDurationMs);
- osSipper.wakeLockTimeMs = result.durationMs;
- osSipper.wakeLockPowerMah = result.powerMah;
- osSipper.sumPower();
- }
- }
-
private void calculateApp(PowerAndDuration result, BatteryStats.Uid u, long rawRealtimeUs,
int statsType) {
long wakeLockTimeUs = 0;
diff --git a/core/java/com/android/internal/os/WifiPowerCalculator.java b/core/java/com/android/internal/os/WifiPowerCalculator.java
index b1935cdc07b9..8c3fb86331b2 100644
--- a/core/java/com/android/internal/os/WifiPowerCalculator.java
+++ b/core/java/com/android/internal/os/WifiPowerCalculator.java
@@ -19,14 +19,11 @@ import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
-import android.os.Process;
import android.os.UidBatteryConsumer;
-import android.os.UserHandle;
import android.util.Log;
import android.util.SparseArray;
import java.util.Arrays;
-import java.util.List;
/**
* WiFi power calculator for when BatteryStats supports energy reporting
@@ -156,62 +153,6 @@ public class WifiPowerCalculator extends PowerCalculator {
totalAppPowerMah, powerModel);
}
- /**
- * We do per-app blaming of WiFi activity. If energy info is reported from the controller,
- * then only the WiFi process gets blamed here since we normalize power calculations and
- * assign all the power drain to apps. If energy info is not reported, we attribute the
- * difference between total running time of WiFi for all apps and the actual running time
- * of WiFi to the WiFi subsystem.
- */
- @Override
- public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
- long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
-
- final BatterySipper bs = new BatterySipper(BatterySipper.DrainType.WIFI, null, 0);
-
- long totalAppDurationMs = 0;
- double totalAppPowerMah = 0;
- final PowerDurationAndTraffic powerDurationAndTraffic = new PowerDurationAndTraffic();
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- final long consumptionUC =
- app.uidObj.getWifiMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- calculateApp(powerDurationAndTraffic, app.uidObj, powerModel, rawRealtimeUs,
- statsType, batteryStats.hasWifiActivityReporting(), consumptionUC);
-
- totalAppDurationMs += powerDurationAndTraffic.durationMs;
- totalAppPowerMah += powerDurationAndTraffic.powerMah;
-
- app.wifiPowerMah = powerDurationAndTraffic.powerMah;
- app.wifiRunningTimeMs = powerDurationAndTraffic.durationMs;
- app.wifiRxBytes = powerDurationAndTraffic.wifiRxBytes;
- app.wifiRxPackets = powerDurationAndTraffic.wifiRxPackets;
- app.wifiTxBytes = powerDurationAndTraffic.wifiTxBytes;
- app.wifiTxPackets = powerDurationAndTraffic.wifiTxPackets;
- if (app.getUid() == Process.WIFI_UID) {
- if (DEBUG) Log.d(TAG, "WiFi adding sipper " + app + ": cpu=" + app.cpuTimeMs);
- app.isAggregated = true;
- bs.add(app);
- }
- }
- }
-
- final long consumptionUC = batteryStats.getWifiMeasuredBatteryConsumptionUC();
- final int powerModel = getPowerModel(consumptionUC);
- calculateRemaining(powerDurationAndTraffic, powerModel, batteryStats, rawRealtimeUs,
- statsType, batteryStats.hasWifiActivityReporting(), totalAppDurationMs,
- totalAppPowerMah, consumptionUC);
-
- bs.wifiRunningTimeMs += powerDurationAndTraffic.durationMs;
- bs.wifiPowerMah += powerDurationAndTraffic.powerMah;
-
- if (bs.sumPower() > 0) {
- sippers.add(bs);
- }
- }
-
private void calculateApp(PowerDurationAndTraffic powerDurationAndTraffic,
BatteryStats.Uid u, @BatteryConsumer.PowerModel int powerModel,
long rawRealtimeUs, int statsType, boolean hasWifiActivityReporting,
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java
deleted file mode 100644
index 260b65a8b463..000000000000
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-
-package com.android.internal.os;
-
-import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.BatteryStats;
-import android.os.Process;
-import android.text.format.DateUtils;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import junit.framework.TestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class BatteryStatsHelperTest extends TestCase {
- private static final long TIME_FOREGROUND_ACTIVITY_ZERO = 0;
- private static final long TIME_FOREGROUND_ACTIVITY = 100 * DateUtils.MINUTE_IN_MILLIS * 1000;
- private static final long TIME_STATE_FOREGROUND_MS = 10 * DateUtils.MINUTE_IN_MILLIS;
- private static final long TIME_STATE_FOREGROUND_US = TIME_STATE_FOREGROUND_MS * 1000;
-
- private static final int UID = 123456;
- private static final double BATTERY_SCREEN_USAGE = 300;
- private static final double BATTERY_SYSTEM_USAGE = 600;
- private static final double BATTERY_WIFI_USAGE = 200;
- private static final double BATTERY_IDLE_USAGE = 600;
- private static final double BATTERY_BLUETOOTH_USAGE = 300;
- private static final double BATTERY_OVERACCOUNTED_USAGE = 500;
- private static final double BATTERY_UNACCOUNTED_USAGE = 700;
- private static final double BATTERY_APP_USAGE = 100;
- private static final double TOTAL_BATTERY_USAGE = 1000;
- private static final double PRECISION = 0.001;
-
- @Mock
- private BatteryStats.Uid mUid;
- @Mock
- private BatterySipper mWifiBatterySipper;
- @Mock
- private BatterySipper mBluetoothBatterySipper;
- @Mock
- private BatterySipper mIdleBatterySipper;
- @Mock
- private BatterySipper mNormalBatterySipper;
- @Mock
- private BatterySipper mScreenBatterySipper;
- @Mock
- private BatterySipper mOvercountedBatterySipper;
- @Mock
- private BatterySipper mUnaccountedBatterySipper;
- @Mock
- private BatterySipper mSystemBatterySipper;
- @Mock
- private BatterySipper mCellBatterySipper;
- @Mock
- private PackageManager mPackageManager;
-
- private BatteryStatsHelper mBatteryStatsHelper;
- private Context mContext;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
- mNormalBatterySipper.totalPowerMah = TOTAL_BATTERY_USAGE;
- when(mNormalBatterySipper.getUid()).thenReturn(UID);
- mNormalBatterySipper.uidObj = mUid;
-
-
- mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
- mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE;
-
- mSystemBatterySipper.drainType = BatterySipper.DrainType.APP;
- mSystemBatterySipper.totalPowerMah = BATTERY_SYSTEM_USAGE;
- mSystemBatterySipper.uidObj = mUid;
- when(mSystemBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
-
- mOvercountedBatterySipper.drainType = BatterySipper.DrainType.OVERCOUNTED;
- mOvercountedBatterySipper.totalPowerMah = BATTERY_OVERACCOUNTED_USAGE;
-
- mUnaccountedBatterySipper.drainType = BatterySipper.DrainType.UNACCOUNTED;
- mUnaccountedBatterySipper.totalPowerMah = BATTERY_UNACCOUNTED_USAGE;
-
- mWifiBatterySipper.drainType = BatterySipper.DrainType.WIFI;
- mWifiBatterySipper.totalPowerMah = BATTERY_WIFI_USAGE;
-
- mBluetoothBatterySipper.drainType = BatterySipper.DrainType.BLUETOOTH;
- mBluetoothBatterySipper.totalPowerMah = BATTERY_BLUETOOTH_USAGE;
-
- mIdleBatterySipper.drainType = BatterySipper.DrainType.IDLE;
- mIdleBatterySipper.totalPowerMah = BATTERY_IDLE_USAGE;
-
- mContext = InstrumentationRegistry.getContext();
- mBatteryStatsHelper = spy(new BatteryStatsHelper(mContext));
- mBatteryStatsHelper.setPackageManager(mPackageManager);
- }
-
- @Test
- public void testShouldHideSipper_TypeUnAccounted_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.UNACCOUNTED;
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_TypeOverAccounted_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.OVERCOUNTED;
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_TypeIdle_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE;
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_TypeCell_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.CELL;
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_TypeScreen_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_TypeSystem_ReturnTrue() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
- when(mNormalBatterySipper.getUid()).thenReturn(Process.ROOT_UID);
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testShouldHideSipper_UidNormal_ReturnFalse() {
- mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
- assertThat(mBatteryStatsHelper.shouldHideSipper(mNormalBatterySipper)).isFalse();
- }
-
- @Test
- public void testRemoveHiddenBatterySippers_ContainsHiddenSippers_RemoveAndReturnValue() {
- final List<BatterySipper> sippers = new ArrayList<>();
- sippers.add(mNormalBatterySipper);
- sippers.add(mScreenBatterySipper);
- sippers.add(mSystemBatterySipper);
- sippers.add(mOvercountedBatterySipper);
- sippers.add(mUnaccountedBatterySipper);
- sippers.add(mWifiBatterySipper);
- sippers.add(mBluetoothBatterySipper);
- sippers.add(mIdleBatterySipper);
- doReturn(true).when(mBatteryStatsHelper).isTypeSystem(mSystemBatterySipper);
-
- final double totalUsage = mBatteryStatsHelper.removeHiddenBatterySippers(sippers);
-
- assertThat(mNormalBatterySipper.shouldHide).isFalse();
- assertThat(mScreenBatterySipper.shouldHide).isTrue();
- assertThat(mSystemBatterySipper.shouldHide).isTrue();
- assertThat(mOvercountedBatterySipper.shouldHide).isTrue();
- assertThat(mUnaccountedBatterySipper.shouldHide).isTrue();
- assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SYSTEM_USAGE);
- }
-
- @Test
- public void testSmearScreenBatterySipper() {
- final ScreenPowerCalculator spc = spy(ScreenPowerCalculator.class);
- final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY_ZERO,
- BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */, spc);
- final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY_ZERO,
- BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */, spc);
- final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY,
- BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */, spc);
-
- final List<BatterySipper> sippers = new ArrayList<>();
- sippers.add(sipperNull);
- sippers.add(sipperBg);
- sippers.add(sipperFg);
-
- spc.smearScreenBatterySipper(sippers, mScreenBatterySipper, 0);
-
- assertThat(sipperNull.screenPowerMah).isWithin(PRECISION).of(0);
- assertThat(sipperBg.screenPowerMah).isWithin(PRECISION).of(0);
- assertThat(sipperFg.screenPowerMah).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE);
- }
-
- @Test
- public void testIsTypeSystem_systemPackage_returnTrue() {
- final String[] systemPackages = {"com.android.system"};
- mBatteryStatsHelper.setSystemPackageArray(systemPackages);
- doReturn(UID).when(mNormalBatterySipper).getUid();
- doReturn(systemPackages).when(mPackageManager).getPackagesForUid(UID);
-
- assertThat(mBatteryStatsHelper.isTypeSystem(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testIsTypeService_servicePackage_returnTrue() {
- final String[] servicePackages = {"com.android.service"};
- mBatteryStatsHelper.setServicePackageArray(servicePackages);
- doReturn(UID).when(mNormalBatterySipper).getUid();
- doReturn(servicePackages).when(mPackageManager).getPackagesForUid(UID);
-
- assertThat(mBatteryStatsHelper.isTypeService(mNormalBatterySipper)).isTrue();
- }
-
- @Test
- public void testGetProcessForegroundTimeMs_largerActivityTime_returnMinTime() {
- final ScreenPowerCalculator spc = spy(ScreenPowerCalculator.class);
- doReturn(TIME_STATE_FOREGROUND_US + 500).when(spc)
- .getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
- doReturn(TIME_STATE_FOREGROUND_US).when(mUid).getProcessStateTime(eq(PROCESS_STATE_TOP),
- anyLong(), anyInt());
-
- final long time = spc.getProcessForegroundTimeMs(mUid, 1000);
-
- assertThat(time).isEqualTo(TIME_STATE_FOREGROUND_MS);
- }
-
- private BatterySipper createTestSmearBatterySipper(long activityTime, double totalPowerMah,
- int uidCode, boolean isUidNull, ScreenPowerCalculator spc) {
- final BatterySipper sipper = mock(BatterySipper.class);
- sipper.drainType = BatterySipper.DrainType.APP;
- sipper.totalPowerMah = totalPowerMah;
- doReturn(uidCode).when(sipper).getUid();
- if (!isUidNull) {
- final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS);
- doReturn(activityTime).when(spc).getProcessForegroundTimeMs(eq(uid), anyLong());
- doReturn(uidCode).when(uid).getUid();
- sipper.uidObj = uid;
- }
-
- return sipper;
- }
-
-}
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
index 92c2d43ea2a3..ace39fb74b8f 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java
@@ -30,7 +30,6 @@ import org.junit.runners.Suite;
BatteryStatsCounterTest.class,
BatteryStatsDualTimerTest.class,
BatteryStatsDurationTimerTest.class,
- BatteryStatsHelperTest.class,
BatteryStatsHistoryIteratorTest.class,
BatteryStatsHistoryTest.class,
BatteryStatsImplTest.class,
@@ -69,7 +68,6 @@ import org.junit.runners.Suite;
LongSamplingCounterTest.class,
LongSamplingCounterArrayTest.class,
MobileRadioPowerCalculatorTest.class,
- PowerCalculatorTest.class,
PowerProfileTest.class,
ScreenPowerCalculatorTest.class,
SensorPowerCalculatorTest.class,
diff --git a/core/tests/coretests/src/com/android/internal/os/PowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/PowerCalculatorTest.java
deleted file mode 100644
index 4bd5724ed9ea..000000000000
--- a/core/tests/coretests/src/com/android/internal/os/PowerCalculatorTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-
-package com.android.internal.os;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.os.BatteryStats;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import junit.framework.TestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class PowerCalculatorTest extends TestCase {
- private static final long US_IN_HR = 1000L * 1000L * 60L * 60L;
-
- @Mock
- private PowerProfile mPowerProfile;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- }
-
- /** Test {@link MediaPowerCalculator#calculateApp} */
- @Test
- public void testMediaPowerCalculator() {
- when(mPowerProfile.getAveragePower(PowerProfile.POWER_AUDIO)).thenReturn(12.0);
- when(mPowerProfile.getAveragePower(PowerProfile.POWER_VIDEO)).thenReturn(25.0);
-
- BatteryStats.Uid u = mock(BatteryStats.Uid.class);
- BatteryStats.Timer audioTimer = mock(BatteryStats.Timer.class);
- when(u.getAudioTurnedOnTimer()).thenReturn(audioTimer);
- when(audioTimer.getTotalTimeLocked(2L * US_IN_HR, 0)).thenReturn(2L * US_IN_HR);
- BatteryStats.Timer videoTimer = mock(BatteryStats.Timer.class);
- when(u.getVideoTurnedOnTimer()).thenReturn(videoTimer);
- when(videoTimer.getTotalTimeLocked(2L * US_IN_HR, 0)).thenReturn(1L * US_IN_HR);
-
- MediaPowerCalculator mediaPowerCalculator = new MediaPowerCalculator(mPowerProfile);
- BatterySipper app = new BatterySipper(BatterySipper.DrainType.APP, u, 0);
-
- mediaPowerCalculator.calculate(List.of(app), null, 2L * US_IN_HR, 2L * US_IN_HR, 0, null);
- assertEquals(49.0, app.sumPower());
- }
-}
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 2f7249ea5d84..91822ac353ab 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -79,7 +79,6 @@ import android.util.StatsEvent;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.IBatteryStats;
import com.android.internal.os.BackgroundThread;
-import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.os.BatteryStatsImpl;
import com.android.internal.os.BatteryUsageStatsProvider;
import com.android.internal.os.BatteryUsageStatsStore;
@@ -2488,7 +2487,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
final long ident = Binder.clearCallingIdentity();
try {
- if (BatteryStatsHelper.checkWifiOnly(mContext)) {
+ if (BatteryStats.checkWifiOnly(mContext)) {
flags |= BatteryStats.DUMP_DEVICE_WIFI_ONLY;
}
awaitCompletion();
diff --git a/tests/BatteryStatsPerfTest/src/com/android/internal/os/BatteryStatsHelperPerfTest.java b/tests/BatteryStatsPerfTest/src/com/android/internal/os/BatteryStatsHelperPerfTest.java
deleted file mode 100644
index 6266cda204b0..000000000000
--- a/tests/BatteryStatsPerfTest/src/com/android/internal/os/BatteryStatsHelperPerfTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.os;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-import android.os.BatteryStats;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.perftests.utils.BenchmarkState;
-import android.perftests.utils.PerfStatusReporter;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@LargeTest
-public class BatteryStatsHelperPerfTest {
-
- @Rule
- public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
-
- /**
- * Measures the performance of {@link BatteryStatsHelper#getStats()}, which triggers
- * a battery stats sync on every iteration.
- */
- @Test
- public void testGetStats_forceUpdate() {
- final Context context = InstrumentationRegistry.getContext();
- final BatteryStatsHelper statsHelper = new BatteryStatsHelper(context,
- true /* collectBatteryBroadcast */);
- statsHelper.create((Bundle) null);
- statsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, UserHandle.myUserId());
-
- final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- while (state.keepRunning()) {
- state.pauseTiming();
- statsHelper.clearStats();
- state.resumeTiming();
-
- statsHelper.getStats();
-
- assertThat(statsHelper.getUsageList()).isNotEmpty();
- }
- }
-
- /**
- * Measures performance of the {@link BatteryStatsHelper#getStats(boolean)}, which does
- * not trigger a sync and just returns current values.
- */
- @Test
- public void testGetStats_cached() {
- final Context context = InstrumentationRegistry.getContext();
- final BatteryStatsHelper statsHelper = new BatteryStatsHelper(context,
- true /* collectBatteryBroadcast */);
- statsHelper.create((Bundle) null);
- statsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, UserHandle.myUserId());
-
- final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- while (state.keepRunning()) {
- state.pauseTiming();
- statsHelper.clearStats();
- state.resumeTiming();
-
- statsHelper.getStats(false /* forceUpdate */);
-
- assertThat(statsHelper.getUsageList()).isNotEmpty();
- }
- }
-
- @Test
- public void testPowerCalculation() {
- final Context context = InstrumentationRegistry.getContext();
- final BatteryStatsHelper statsHelper = new BatteryStatsHelper(context,
- true /* collectBatteryBroadcast */);
- statsHelper.create((Bundle) null);
- statsHelper.getStats();
-
- final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- while (state.keepRunning()) {
- // This will use the cached BatteryStatsObject
- statsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, UserHandle.myUserId());
-
- assertThat(statsHelper.getUsageList()).isNotEmpty();
- }
- }
-
- @Test
- public void testEndToEnd() {
- final Context context = InstrumentationRegistry.getContext();
- final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- while (state.keepRunning()) {
- final BatteryStatsHelper statsHelper = new BatteryStatsHelper(context,
- true /* collectBatteryBroadcast */);
- statsHelper.create((Bundle) null);
- statsHelper.clearStats();
- statsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, UserHandle.myUserId());
-
- state.pauseTiming();
-
- List<BatterySipper> usageList = statsHelper.getUsageList();
- double power = 0;
- for (int i = 0; i < usageList.size(); i++) {
- BatterySipper sipper = usageList.get(i);
- power += sipper.sumPower();
- }
-
- assertThat(power).isGreaterThan(0.0);
-
- state.resumeTiming();
- }
- }
-}