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

Commit 217aadd0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Consume health HAL 2.1 values from framework"

parents f3681741 90bf8744
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ interface IBatteryStats {
    void noteNetworkStatsEnabled();
    void noteDeviceIdleMode(int mode, String activeReason, int activeUid);
    void setBatteryState(int status, int health, int plugType, int level, int temp, int volt,
            int chargeUAh, int chargeFullUAh);
            int chargeUAh, int chargeFullUAh, long chargeTimeToFullSeconds);
    @UnsupportedAppUsage
    long getAwakeTimeBattery();
    long getAwakeTimePlugged();
+9 −14
Original line number Diff line number Diff line
@@ -996,6 +996,8 @@ public class BatteryStatsImpl extends BatteryStats {
    private int mMinLearnedBatteryCapacity = -1;
    private int mMaxLearnedBatteryCapacity = -1;
    private long mBatteryTimeToFullSeconds = -1;
    private long[] mCpuFreqs;
    @VisibleForTesting
@@ -12218,7 +12220,7 @@ public class BatteryStatsImpl extends BatteryStats {
    @GuardedBy("this")
    public void setBatteryStateLocked(final int status, final int health, final int plugType,
            final int level, /* not final */ int temp, final int volt, final int chargeUAh,
            final int chargeFullUAh) {
            final int chargeFullUAh, final long chargeTimeToFullSeconds) {
        // Temperature is encoded without the signed bit, so clamp any negative temperatures to 0.
        temp = Math.max(0, temp);
@@ -12421,6 +12423,8 @@ public class BatteryStatsImpl extends BatteryStats {
            mMinLearnedBatteryCapacity = Math.min(mMinLearnedBatteryCapacity, chargeFullUAh);
        }
        mMaxLearnedBatteryCapacity = Math.max(mMaxLearnedBatteryCapacity, chargeFullUAh);
        mBatteryTimeToFullSeconds = chargeTimeToFullSeconds;
    }
    public static boolean isOnBattery(int plugType, int status) {
@@ -12570,19 +12574,10 @@ public class BatteryStatsImpl extends BatteryStats {
            // Not yet working.
            return -1;
        }
        /* Broken
        int curLevel = mCurrentBatteryLevel;
        int plugLevel = mDischargePlugLevel;
        if (plugLevel < 0 || curLevel < (plugLevel+1)) {
            return -1;
        if (mBatteryTimeToFullSeconds >= 0) {
            return mBatteryTimeToFullSeconds * (1000 * 1000); // s to us
        }
        long duration = computeBatteryRealtime(curTime, STATS_SINCE_UNPLUGGED);
        if (duration < 1000*1000) {
            return -1;
        }
        long usPerLevel = duration/(curLevel-plugLevel);
        return usPerLevel * (100-curLevel);
        */
        // Else use algorithmic approach
        if (mChargeStepTracker.mNumStepDurations < 1) {
            return -1;
        }
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ java_library_static {
        "android.hardware.broadcastradio-V2.0-java",
        "android.hardware.health-V1.0-java",
        "android.hardware.health-V2.0-java",
        "android.hardware.health-V2.1-java",
        "android.hardware.light-java",
        "android.hardware.weaver-V1.0-java",
        "android.hardware.biometrics.face-V1.0-java",
+28 −7
Original line number Diff line number Diff line
@@ -26,8 +26,10 @@ import android.content.Intent;
import android.database.ContentObserver;
import android.hardware.health.V1_0.HealthInfo;
import android.hardware.health.V2_0.IHealth;
import android.hardware.health.V2_0.IHealthInfoCallback;
import android.hardware.health.V2_0.Result;
import android.hardware.health.V2_1.BatteryCapacityLevel;
import android.hardware.health.V2_1.Constants;
import android.hardware.health.V2_1.IHealthInfoCallback;
import android.hidl.manager.V1_0.IServiceManager;
import android.hidl.manager.V1_0.IServiceNotification;
import android.metrics.LogMaker;
@@ -144,6 +146,7 @@ public final class BatteryService extends SystemService {

    private HealthInfo mHealthInfo;
    private final HealthInfo mLastHealthInfo = new HealthInfo();
    private android.hardware.health.V2_1.HealthInfo mHealthInfo2p1;
    private boolean mBatteryLevelCritical;
    private int mLastBatteryStatus;
    private int mLastBatteryHealth;
@@ -358,6 +361,9 @@ public final class BatteryService extends SystemService {
    }

    private boolean shouldShutdownLocked() {
        if (mHealthInfo2p1.batteryCapacityLevel != BatteryCapacityLevel.UNSUPPORTED) {
            return (mHealthInfo2p1.batteryCapacityLevel == BatteryCapacityLevel.CRITICAL);
        }
        if (mHealthInfo.batteryLevel > 0) {
            return false;
        }
@@ -415,22 +421,23 @@ public final class BatteryService extends SystemService {
        }
    }

    private void update(android.hardware.health.V2_0.HealthInfo info) {
    private void update(android.hardware.health.V2_1.HealthInfo info) {
        traceBegin("HealthInfoUpdate");

        Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryChargeCounter",
                info.legacy.batteryChargeCounter);
                info.legacy.legacy.batteryChargeCounter);
        Trace.traceCounter(Trace.TRACE_TAG_POWER, "BatteryCurrent",
                info.legacy.batteryCurrent);
                info.legacy.legacy.batteryCurrent);

        synchronized (mLock) {
            if (!mUpdatesStopped) {
                mHealthInfo = info.legacy;
                mHealthInfo = info.legacy.legacy;
                mHealthInfo2p1 = info;
                // Process the new values.
                processValuesLocked(false);
                mLock.notifyAll(); // for any waiters on new info
            } else {
                copy(mLastHealthInfo, info.legacy);
                copy(mLastHealthInfo, info.legacy.legacy);
            }
        }
        traceEnd();
@@ -484,7 +491,8 @@ public final class BatteryService extends SystemService {
            mBatteryStats.setBatteryState(mHealthInfo.batteryStatus, mHealthInfo.batteryHealth,
                    mPlugType, mHealthInfo.batteryLevel, mHealthInfo.batteryTemperature,
                    mHealthInfo.batteryVoltage, mHealthInfo.batteryChargeCounter,
                    mHealthInfo.batteryFullCharge);
                    mHealthInfo.batteryFullCharge,
                    mHealthInfo2p1.batteryChargeTimeToFullNowSeconds);
        } catch (RemoteException e) {
            // Should never happen.
        }
@@ -1120,8 +1128,21 @@ public final class BatteryService extends SystemService {
    private final class HealthHalCallback extends IHealthInfoCallback.Stub
            implements HealthServiceWrapper.Callback {
        @Override public void healthInfoChanged(android.hardware.health.V2_0.HealthInfo props) {
            android.hardware.health.V2_1.HealthInfo propsLatest =
                    new android.hardware.health.V2_1.HealthInfo();
            propsLatest.legacy = props;

            propsLatest.batteryCapacityLevel = BatteryCapacityLevel.UNSUPPORTED;
            propsLatest.batteryChargeTimeToFullNowSeconds =
                Constants.BATTERY_CHARGE_TIME_TO_FULL_NOW_SECONDS_UNSUPPORTED;

            BatteryService.this.update(propsLatest);
        }

        @Override public void healthInfoChanged_2_1(android.hardware.health.V2_1.HealthInfo props) {
            BatteryService.this.update(props);
        }

        // on new service registered
        @Override public void onRegistration(IHealth oldService, IHealth newService,
                String instance) {
+3 −3
Original line number Diff line number Diff line
@@ -1133,7 +1133,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
    @Override
    public void setBatteryState(final int status, final int health, final int plugType,
            final int level, final int temp, final int volt, final int chargeUAh,
            final int chargeFullUAh) {
            final int chargeFullUAh, final long chargeTimeToFullSeconds) {
        enforceCallingPermission();

        // BatteryService calls us here and we may update external state. It would be wrong
@@ -1145,7 +1145,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                    // The battery state has not changed, so we don't need to sync external
                    // stats immediately.
                    mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
                            chargeUAh, chargeFullUAh);
                            chargeUAh, chargeFullUAh, chargeTimeToFullSeconds);
                    return;
                }
            }
@@ -1158,7 +1158,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
            mWorker.scheduleRunnable(() -> {
                synchronized (mStats) {
                    mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt,
                            chargeUAh, chargeFullUAh);
                            chargeUAh, chargeFullUAh, chargeTimeToFullSeconds);
                }
            });
        });