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

Commit 32dbefda authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Track native processes and airplane mode.

Turn signal strengths on/off when toggling airplane mode.
parent 4133751d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ interface IBatteryStats {
    void notePhoneOff();
    void notePhoneSignalStrength(in SignalStrength signalStrength);
    void notePhoneDataConnectionState(int dataType, boolean hasData);
    void noteAirplaneMode(boolean isAirplaneMode);
    void noteWifiOn(int uid);
    void noteWifiOff(int uid);
    void noteWifiRunning();
+45 −2
Original line number Diff line number Diff line
@@ -191,6 +191,8 @@ public final class BatteryStatsImpl extends BatteryStats {
    private final Map<String, KernelWakelockStats> mProcWakelockFileStats = 
            new HashMap<String, KernelWakelockStats>();

    private HashMap<String, Integer> mUidCache = new HashMap<String, Integer>();
    
    // For debugging
    public BatteryStatsImpl() {
        mFile = mBackupFile = null;
@@ -714,6 +716,10 @@ public final class BatteryStatsImpl extends BatteryStats {
            }
        }

        boolean isRunningLocked() {
            return mNesting > 0;
        }

        void stopRunningLocked(BatteryStatsImpl stats) {
            // Ignore attempt to stop a timer that isn't running
            if (mNesting == 0) {
@@ -1049,6 +1055,23 @@ public final class BatteryStatsImpl extends BatteryStats {
        }
    }

    public void noteAirplaneModeLocked(boolean isAirplaneMode) {
        final int bin = mPhoneSignalStrengthBin;
        if (bin >= 0) {
            if (!isAirplaneMode) {
                if (!mPhoneSignalStrengthsTimer[bin].isRunningLocked()) {
                    mPhoneSignalStrengthsTimer[bin].startRunningLocked(this);
                }
            } else {
                for (int i = 0; i < NUM_SIGNAL_STRENGTH_BINS; i++) {
                    while (mPhoneSignalStrengthsTimer[i].isRunningLocked()) {
                        mPhoneSignalStrengthsTimer[i].stopRunningLocked(this);
                    }
                }
            }
        }
    }

    public void notePhoneSignalStrengthLocked(SignalStrength signalStrength) {
        // Bin the strength.
        int bin;
@@ -2807,6 +2830,26 @@ public final class BatteryStatsImpl extends BatteryStats {
        return u.getProcessStatsLocked(name);
    }

    /**
     * Retrieve the statistics object for a particular process, given
     * the name of the process.
     * @param name process name
     * @return the statistics object for the process
     */
    public Uid.Proc getProcessStatsLocked(String name) {
        int uid;
        if (mUidCache.containsKey(name)) {
            uid = mUidCache.get(name);
        } else {
            // TODO: Find the actual uid from /proc/pid/status. For now use the hashcode of the
            // process name
            uid = name.hashCode();
            mUidCache.put(name, uid);
        }
        Uid u = getUidStatsLocked(uid);
        return u.getProcessStatsLocked(name);
    }

    /**
     * Retrieve the statistics object for a particular process, creating
     * if needed.
+5 −5
Original line number Diff line number Diff line
@@ -219,12 +219,12 @@ public class PowerProfile {
    public double getAveragePower(String type, int level) {
        if (sPowerMap.containsKey(type)) {
            Object data = sPowerMap.get(type);
            if (data instanceof double[]) {
                final double[] values = (double[]) data;
                if (values.length > level) {
            if (data instanceof Double[]) {
                final Double[] values = (Double[]) data;
                if (values.length > level && level >= 0) {
                    return values[level];
                } else if (values.length < 0) {
                    return values[0];
                } else if (level < 0) {
                    return 0;
                } else {
                    return values[values.length - 1];
                }
+9 −0
Original line number Diff line number Diff line
@@ -462,6 +462,15 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
    //

    private void broadcastServiceStateChanged(ServiceState state) {
        long ident = Binder.clearCallingIdentity();
        try {
            mBatteryStats.noteAirplaneMode(state.getState() == ServiceState.STATE_POWER_OFF);
        } catch (RemoteException re) {
            // Can't do much
        } finally {
            Binder.restoreCallingIdentity(ident);
        }

        Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED);
        Bundle data = new Bundle();
        state.fillInNotifierBundle(data);
+11 −2
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.BatteryStats;
import android.os.Binder;
import android.os.Bundle;
import android.os.Environment;
@@ -1517,7 +1518,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
                }
            }
            
            synchronized(mBatteryStatsService.getActiveStatistics()) {
            final BatteryStatsImpl bstats =
                    (BatteryStatsImpl) mBatteryStatsService.getActiveStatistics();
            synchronized(bstats) {
                synchronized(mPidsSelfLocked) {
                    if (haveNewCpuStats) {
                        if (mBatteryStatsService.isOnBattery()) {
@@ -1529,6 +1532,12 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
                                if (pr != null) {
                                    BatteryStatsImpl.Uid.Proc ps = pr.batteryStats;
                                    ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                } else {
                                    BatteryStatsImpl.Uid.Proc ps =
                                            bstats.getProcessStatsLocked(st.name);
                                    if (ps != null) {
                                        ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                    }
                                }
                            }
                        }
Loading