Merge "Merge "Fix per app GPS power usage." into pi-dev am: da4c54e9da" into pi-dev-plus-aosp
This commit is contained in:
committed by
Android (Google) Code Review
commit
df34735c50
@@ -409,10 +409,9 @@ public class BatteryStatsHelper {
|
||||
}
|
||||
mBluetoothPowerCalculator.reset();
|
||||
|
||||
if (mSensorPowerCalculator == null) {
|
||||
mSensorPowerCalculator = new SensorPowerCalculator(mPowerProfile,
|
||||
(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE));
|
||||
}
|
||||
mSensorPowerCalculator = new SensorPowerCalculator(mPowerProfile,
|
||||
(SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE),
|
||||
mStats, rawRealtimeUs, statsType);
|
||||
mSensorPowerCalculator.reset();
|
||||
|
||||
if (mCameraPowerCalculator == null) {
|
||||
|
||||
@@ -20,20 +20,23 @@ import android.hardware.SensorManager;
|
||||
import android.os.BatteryStats;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import com.android.internal.location.gnssmetrics.GnssMetrics;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class SensorPowerCalculator extends PowerCalculator {
|
||||
private final List<Sensor> mSensors;
|
||||
private final double mGpsPowerOn;
|
||||
private final double mGpsPower;
|
||||
|
||||
public SensorPowerCalculator(PowerProfile profile, SensorManager sensorManager) {
|
||||
public SensorPowerCalculator(PowerProfile profile, SensorManager sensorManager,
|
||||
BatteryStats stats, long rawRealtimeUs, int statsType) {
|
||||
mSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
|
||||
mGpsPowerOn = profile.getAveragePower(PowerProfile.POWER_GPS_ON);
|
||||
mGpsPower = getAverageGpsPower(profile, stats, rawRealtimeUs, statsType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
|
||||
long rawUptimeUs, int statsType) {
|
||||
long rawUptimeUs, int statsType) {
|
||||
// Process Sensor usage
|
||||
final SparseArray<? extends BatteryStats.Uid.Sensor> sensorStats = u.getSensorStats();
|
||||
final int NSE = sensorStats.size();
|
||||
@@ -42,10 +45,11 @@ public class SensorPowerCalculator extends PowerCalculator {
|
||||
final int sensorHandle = sensorStats.keyAt(ise);
|
||||
final BatteryStats.Timer timer = sensor.getSensorTime();
|
||||
final long sensorTime = timer.getTotalTimeLocked(rawRealtimeUs, statsType) / 1000;
|
||||
|
||||
switch (sensorHandle) {
|
||||
case BatteryStats.Uid.Sensor.GPS:
|
||||
app.gpsTimeMs = sensorTime;
|
||||
app.gpsPowerMah = (app.gpsTimeMs * mGpsPowerOn) / (1000*60*60);
|
||||
app.gpsPowerMah = (app.gpsTimeMs * mGpsPower) / (1000*60*60);
|
||||
break;
|
||||
default:
|
||||
final int sensorsCount = mSensors.size();
|
||||
@@ -60,4 +64,26 @@ public class SensorPowerCalculator extends PowerCalculator {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private double getAverageGpsPower(PowerProfile profile, BatteryStats stats, long rawRealtimeUs,
|
||||
int statsType) {
|
||||
double averagePower =
|
||||
profile.getAveragePowerOrDefault(PowerProfile.POWER_GPS_ON, -1);
|
||||
if (averagePower != -1) {
|
||||
return averagePower;
|
||||
}
|
||||
averagePower = 0;
|
||||
long totalTime = 0;
|
||||
double totalPower = 0;
|
||||
for (int i = 0; i < GnssMetrics.NUM_GPS_SIGNAL_QUALITY_LEVELS; i++) {
|
||||
long timePerLevel = stats.getGpsSignalQualityTime(i, rawRealtimeUs, statsType);
|
||||
totalTime += timePerLevel;
|
||||
totalPower += profile.getAveragePower(PowerProfile.POWER_GPS_SIGNAL_QUALITY_BASED, i)
|
||||
* timePerLevel;
|
||||
}
|
||||
if (totalTime != 0) {
|
||||
averagePower = totalPower / totalTime;
|
||||
}
|
||||
return averagePower;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user