Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab14d225 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Introduce PowerStatsCollector for mobile networking

Bug: 323970018
Test: atest PowerStatsTestsRavenwood && atest PowerStatsTests
Change-Id: I4b359a679e3f6c54c7f17458dd08de62d852042e
parent c9dc70ba
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@
    devices-->
    <integer name="config_defaultPowerStatsThrottlePeriodCpu">60000</integer>

    <!-- Mobile Radio power stats collection throttle period in milliseconds. -->
    <integer name="config_defaultPowerStatsThrottlePeriodMobileRadio">3600000</integer>

    <!-- PowerStats aggregation period in milliseconds. This is the interval at which the power
    stats aggregation procedure is performed and the results stored in PowerStatsStore. -->
    <integer name="config_powerStatsAggregationPeriod">14400000</integer>
+1 −0
Original line number Diff line number Diff line
@@ -5217,6 +5217,7 @@
  <java-symbol type="bool" name="config_batteryStatsResetOnUnplugHighBatteryLevel" />
  <java-symbol type="bool" name="config_batteryStatsResetOnUnplugAfterSignificantCharge" />
  <java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodCpu" />
  <java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodMobileRadio" />
  <java-symbol type="integer" name="config_powerStatsAggregationPeriod" />
  <java-symbol type="integer" name="config_aggregatedPowerStatsSpanDuration" />

+14 −9
Original line number Diff line number Diff line
@@ -408,11 +408,18 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                com.android.internal.R.bool.config_batteryStatsResetOnUnplugAfterSignificantCharge);
        final long powerStatsThrottlePeriodCpu = context.getResources().getInteger(
                com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodCpu);
        final long powerStatsThrottlePeriodMobileRadio = context.getResources().getInteger(
                com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodMobileRadio);
        mBatteryStatsConfig =
                new BatteryStatsImpl.BatteryStatsConfig.Builder()
                        .setResetOnUnplugHighBatteryLevel(resetOnUnplugHighBatteryLevel)
                        .setResetOnUnplugAfterSignificantCharge(resetOnUnplugAfterSignificantCharge)
                        .setPowerStatsThrottlePeriodCpu(powerStatsThrottlePeriodCpu)
                        .setPowerStatsThrottlePeriodMillis(
                                BatteryConsumer.POWER_COMPONENT_CPU,
                                powerStatsThrottlePeriodCpu)
                        .setPowerStatsThrottlePeriodMillis(
                                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
                                powerStatsThrottlePeriodMobileRadio)
                        .build();
        mPowerStatsUidResolver = new PowerStatsUidResolver();
        mStats = new BatteryStatsImpl(mBatteryStatsConfig, Clock.SYSTEM_CLOCK, mMonotonicClock,
@@ -494,7 +501,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
    }

    public void systemServicesReady() {
        mStats.setPowerStatsCollectorEnabled(Flags.streamlinedBatteryStats());
        mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_CPU,
                Flags.streamlinedBatteryStats());
        mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
                Flags.streamlinedConnectivityBatteryStats());
        mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(Flags.streamlinedBatteryStats());
        mWorker.systemServicesReady();
        mStats.systemServicesReady(mContext);
@@ -536,7 +546,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
     * Notifies BatteryStatsService that the system server is ready.
     */
    public void onSystemReady() {
        mStats.onSystemReady();
        mStats.onSystemReady(mContext);
        mPowerStatsScheduler.start(Flags.streamlinedBatteryStats());
    }

@@ -1591,19 +1601,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub
            final long elapsedRealtime = SystemClock.elapsedRealtime();
            final long uptime = SystemClock.uptimeMillis();
            mHandler.post(() -> {
                final boolean update;
                synchronized (mStats) {
                    // Ignore if no power state change.
                    if (mLastPowerStateFromRadio == powerState) return;

                    mLastPowerStateFromRadio = powerState;
                    update = mStats.noteMobileRadioPowerStateLocked(powerState, timestampNs, uid,
                    mStats.noteMobileRadioPowerStateLocked(powerState, timestampNs, uid,
                            elapsedRealtime, uptime);
                }

                if (update) {
                    mWorker.scheduleSync("modem-data", BatteryExternalStatsWorker.UPDATE_RADIO);
                }
            });
        }
        FrameworkStatsLog.write_non_chained(
+26 −18
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.hardware.power.stats.EnergyConsumer;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyConsumerType;
import android.net.wifi.WifiManager;
import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.Bundle;
import android.os.OutcomeReceiver;
@@ -603,6 +604,12 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
        }

        if ((updateFlags & BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO) != 0) {
            @SuppressWarnings("GuardedBy")
            PowerStatsCollector collector = mStats.getPowerStatsCollector(
                    BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO);
            if (collector.isEnabled()) {
                collector.schedule();
            } else {
                // We were asked to fetch Telephony data.
                if (mTelephony != null) {
                    CompletableFuture<ModemActivityInfo> temp = new CompletableFuture<>();
@@ -622,6 +629,7 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
                            });
                    modemFuture = temp;
                }
            }
            if (!railUpdated) {
                synchronized (mStats) {
                    mStats.updateRailStatsLocked();
+193 −71

File changed.

Preview size limit exceeded, changes collapsed.

Loading