fix an issue where sensors power usage wasn't reported properly

the battery service records a sensor's *handle*, but the
PowerUsageSummary code used it as a sensor *type*.

Change-Id: I0d2cbdffc24238d5e02f0d6369fa44ed990176a4
This commit is contained in:
Mathias Agopian
2013-02-04 19:24:46 -08:00
parent 596f0cfb46
commit b287ba3e2b

View File

@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.hardware.Sensor;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.net.Uri; import android.net.Uri;
import android.os.BatteryStats; import android.os.BatteryStats;
@@ -559,20 +560,23 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable {
for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> sensorEntry for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> sensorEntry
: sensorStats.entrySet()) { : sensorStats.entrySet()) {
Uid.Sensor sensor = sensorEntry.getValue(); Uid.Sensor sensor = sensorEntry.getValue();
int sensorType = sensor.getHandle(); int sensorHandle = sensor.getHandle();
BatteryStats.Timer timer = sensor.getSensorTime(); BatteryStats.Timer timer = sensor.getSensorTime();
long sensorTime = timer.getTotalTimeLocked(uSecTime, which) / 1000; long sensorTime = timer.getTotalTimeLocked(uSecTime, which) / 1000;
double multiplier = 0; double multiplier = 0;
switch (sensorType) { switch (sensorHandle) {
case Uid.Sensor.GPS: case Uid.Sensor.GPS:
multiplier = mPowerProfile.getAveragePower(PowerProfile.POWER_GPS_ON); multiplier = mPowerProfile.getAveragePower(PowerProfile.POWER_GPS_ON);
gpsTime = sensorTime; gpsTime = sensorTime;
break; break;
default: default:
android.hardware.Sensor sensorData = List<Sensor> sensorList = sensorManager.getSensorList(
sensorManager.getDefaultSensor(sensorType); android.hardware.Sensor.TYPE_ALL);
if (sensorData != null) { for (android.hardware.Sensor s : sensorList) {
multiplier = sensorData.getPower(); if (s.getHandle() == sensorHandle) {
multiplier = s.getPower();
break;
}
} }
} }
p = (multiplier * sensorTime) / 1000; p = (multiplier * sensorTime) / 1000;