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

Commit 27dc9b69 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Add log for BatteryUtils" into oc-dev

parents 4c4f2a7c 5d2918a6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -104,10 +104,11 @@ public class AdvancedPowerUsageDetail extends PowerUsageBase implements
        final Bundle args = new Bundle();
        final BatterySipper sipper = entry.sipper;
        final BatteryStats.Uid uid = sipper.uidObj;
        final BatteryUtils batteryUtils = BatteryUtils.getInstance(caller);

        final long backgroundTimeMs = BatteryUtils.getProcessTimeMs(
        final long backgroundTimeMs = batteryUtils.getProcessTimeMs(
                BatteryUtils.StatusType.BACKGROUND, uid, which);
        final long foregroundTimeMs = BatteryUtils.getProcessTimeMs(
        final long foregroundTimeMs = batteryUtils.getProcessTimeMs(
                BatteryUtils.StatusType.FOREGROUND, uid, which);

        if (ArrayUtils.isEmpty(sipper.mPackages)) {
+39 −7
Original line number Diff line number Diff line
@@ -16,9 +16,13 @@
package com.android.settings.fuelgauge;

import android.annotation.IntDef;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.util.Log;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -38,7 +42,23 @@ public class BatteryUtils {
        int ALL = 2;
    }

    public static long getProcessTimeMs(@StatusType int type, @Nullable BatteryStats.Uid uid,
    private static final String TAG = "BatteryUtils";
    private static BatteryUtils sInstance;

    private PackageManager mPackageManager;

    public static BatteryUtils getInstance(Context context) {
        if (sInstance == null || sInstance.isDataCorrupted()) {
            sInstance = new BatteryUtils(context);
        }
        return sInstance;
    }

    private BatteryUtils(Context context) {
        mPackageManager = context.getPackageManager();
    }

    public long getProcessTimeMs(@StatusType int type, @Nullable BatteryStats.Uid uid,
            int which) {
        if (uid == null) {
            return 0;
@@ -56,34 +76,46 @@ public class BatteryUtils {
        return 0;
    }

    private static long getProcessBackgroundTimeMs(BatteryStats.Uid uid, int which) {
    private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, int which) {
        final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
        final long timeUs = uid.getProcessStateTime(
                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, rawRealTimeUs, which);

        Log.v(TAG, "package: " + mPackageManager.getNameForUid(uid.getUid()));
        Log.v(TAG, "background time(us): " + timeUs);
        return convertUsToMs(timeUs);
    }

    private static long getProcessForegroundTimeMs(BatteryStats.Uid uid, int which) {
    private long getProcessForegroundTimeMs(BatteryStats.Uid uid, int which) {
        final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
        final int foregroundTypes[] = {BatteryStats.Uid.PROCESS_STATE_TOP,
                BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
                BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
                BatteryStats.Uid.PROCESS_STATE_FOREGROUND};
        Log.v(TAG, "package: " + mPackageManager.getNameForUid(uid.getUid()));

        long timeUs = 0;
        for (int type : foregroundTypes) {
            timeUs += uid.getProcessStateTime(type, rawRealTimeUs, which);
            final long localTime = uid.getProcessStateTime(type, rawRealTimeUs, which);
            Log.v(TAG, "type: " + type + " time(us): " + localTime);
            timeUs += localTime;
        }
        Log.v(TAG, "foreground time(us): " + timeUs);

        return convertUsToMs(timeUs);
    }

    private static long convertUsToMs(long timeUs) {
    private long convertUsToMs(long timeUs) {
        return timeUs / 1000;
    }

    private static long convertMsToUs(long timeMs) {
    private long convertMsToUs(long timeMs) {
        return timeMs * 1000;
    }

    private boolean isDataCorrupted() {
        return mPackageManager == null;
    }

}
+4 −2
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
    private PackageManager mPackageManager;
    private UserManager mUserManager;
    private Map<Integer, PowerUsageData> mBatteryDataMap;
    private BatteryUtils mBatteryUtils;

    Handler mHandler = new Handler() {

@@ -117,6 +118,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
                .getPowerUsageFeatureProvider(context);
        mPackageManager = context.getPackageManager();
        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
        mBatteryUtils = BatteryUtils.getInstance(context);
    }

    @Override
@@ -239,8 +241,8 @@ public class PowerUsageAdvanced extends PowerUsageBase {
            final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper));
            usageData.totalPowerMah += sipper.totalPowerMah;
            if (sipper.drainType == DrainType.APP && sipper.usageTimeMs != 0) {
                sipper.usageTimeMs = BatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL,
                        sipper.uidObj, STATUS_TYPE);
                sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
                        BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, STATUS_TYPE);
            }
            usageData.totalUsageTimeMs += sipper.usageTimeMs;
            usageData.usageList.add(sipper);
+5 −1
Original line number Diff line number Diff line
@@ -110,6 +110,8 @@ public class PowerUsageSummary extends PowerUsageBase {
    PowerGaugePreference mLastFullChargePref;
    @VisibleForTesting
    PowerUsageFeatureProvider mPowerFeatureProvider;
    @VisibleForTesting
    BatteryUtils mBatteryUtils;

    private LayoutPreference mBatteryLayoutPref;
    private PreferenceGroup mAppListGroup;
@@ -127,6 +129,8 @@ public class PowerUsageSummary extends PowerUsageBase {
                KEY_TIME_SINCE_LAST_FULL_CHARGE);
        mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.battery_footer_summary);

        mBatteryUtils = BatteryUtils.getInstance(getContext());

        initFeatureProvider();
    }

@@ -494,7 +498,7 @@ public class PowerUsageSummary extends PowerUsageBase {
                pref.setOrder(i + 1);
                pref.setPercent(percentOfTotal);
                if (sipper.usageTimeMs == 0 && sipper.drainType == DrainType.APP) {
                    sipper.usageTimeMs = BatteryUtils.getProcessTimeMs(
                    sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
                            BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, mStatsType);
                }
                setUsageSummary(pref, usedTime, sipper.usageTimeMs);
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public final class InstalledAppDetailsTest {
    ApplicationFeatureProvider mApplicationFeatureProvider;
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private UserManager mUserManager;
    @Mock
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private SettingsActivity mActivity;
    @Mock
    private DevicePolicyManager mDevicePolicyManager;
Loading