public synchronized boolean getSnapshot()

in metrics/src/main/java/com/facebook/battery/metrics/sensor/SensorMetricsCollector.java [138:184]


  public synchronized boolean getSnapshot(SensorMetrics snapshot) {
    Utilities.checkNotNull(snapshot, "Null value passed to getSnapshot!");

    if (!mEnabled) {
      return false;
    }

    long currentTimeMs = SystemClock.elapsedRealtime();
    snapshot.set(mCumulativeMetrics);

    for (int i = 0, l = mActiveSensors.size(); i < l; i++) {
      Sensor sensor = mActiveSensors.keyAt(i);
      SensorData data = mActiveSensors.valueAt(i);

      if (data.activeCount <= 0) {
        continue;
      }

      long sensorActiveTimeMs = currentTimeMs - data.startTimeMs;
      double sensorPowerMah = energyConsumedMah(sensor, sensorActiveTimeMs);
      snapshot.total.activeTimeMs += sensorActiveTimeMs;
      snapshot.total.powerMah += sensorPowerMah;

      boolean isWakeupSensor = Util.isWakeupSensor(sensor);
      if (isWakeupSensor) {
        snapshot.total.wakeUpTimeMs += sensorActiveTimeMs;
      }

      if (snapshot.isAttributionEnabled) {
        int type = sensor.getType();
        SensorMetrics.Consumption consumption = snapshot.sensorConsumption.get(type);
        if (consumption == null) {
          consumption = new SensorMetrics.Consumption();
          snapshot.sensorConsumption.put(type, consumption);
        }

        consumption.activeTimeMs += sensorActiveTimeMs;
        consumption.powerMah += sensorPowerMah;

        if (isWakeupSensor) {
          consumption.wakeUpTimeMs += sensorActiveTimeMs;
        }
      }
    }

    return true;
  }