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

Commit 5d2918a6 authored by jackqdyulei's avatar jackqdyulei
Browse files

Add log for BatteryUtils

This cl add logs to get more data for app usage time.

Also refactor BatteryUtils to singleton pattern because we need
to extract package name from uid.

Bug: 36909166
Test: RunSettingsRoboTests
Change-Id: I6ede354035c46e46cb856b7cf57bd1b7ccbd6d4f
parent 418e5bff
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -105,10 +105,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
@@ -73,6 +73,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
    private PackageManager mPackageManager;
    private UserManager mUserManager;
    private Map<Integer, PowerUsageData> mBatteryDataMap;
    private BatteryUtils mBatteryUtils;

    Handler mHandler = new Handler() {

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

    @Override
@@ -223,8 +225,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