in metrics/src/main/java/com/facebook/battery/metrics/sensor/SensorMetricsCollector.java [85:135]
public synchronized void unregister(SensorEventListener listener, @Nullable Sensor sensor) {
if (!mEnabled) {
return;
}
long currentTimeMs = SystemClock.elapsedRealtime();
Iterator<SensorListenerData> iter = mActiveSensorData.iterator();
while (iter.hasNext()) {
SensorListenerData data = iter.next();
if (listener != data.listener || (sensor != null && sensor != data.sensor)) {
continue;
}
iter.remove();
SensorData currentSensor = mActiveSensors.get(data.sensor);
if (currentSensor == null || currentSensor.activeCount == 0) {
// Spurious / extra call
continue;
} else if (currentSensor.activeCount > 1) {
// No additional book-keeping required at the moment
currentSensor.activeCount -= 1;
continue;
}
// Adjust for sensor's consumption
mActiveSensors.remove(data.sensor);
int type = data.sensor.getType();
SensorMetrics.Consumption consumption = mCumulativeMetrics.sensorConsumption.get(type, null);
if (consumption == null) {
consumption = new SensorMetrics.Consumption();
mCumulativeMetrics.sensorConsumption.put(type, consumption);
}
long currentActiveTimeMs = currentTimeMs - currentSensor.startTimeMs;
consumption.activeTimeMs += currentActiveTimeMs;
mCumulativeMetrics.total.activeTimeMs += currentActiveTimeMs;
double currentPowerMah = energyConsumedMah(data.sensor, currentActiveTimeMs);
consumption.powerMah += currentPowerMah;
mCumulativeMetrics.total.powerMah += currentPowerMah;
if (Util.isWakeupSensor(data.sensor)) {
consumption.wakeUpTimeMs += currentActiveTimeMs;
mCumulativeMetrics.total.wakeUpTimeMs += currentActiveTimeMs;
}
}
}