public synchronized void unregister()

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;
      }
    }
  }