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

Commit 8b900748 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Android (Google) Code Review
Browse files

Merge "[Battery] Add detailed battery controller logs" into main

parents a0cb1a84 5085e3b6
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ public class AospPolicyModule {
            BroadcastDispatcher broadcastDispatcher,
            DemoModeController demoModeController,
            DumpManager dumpManager,
            BatteryControllerLogger logger,
            @Main Handler mainHandler,
            @Background Handler bgHandler) {
        BatteryController bC = new BatteryControllerImpl(
@@ -54,6 +55,7 @@ public class AospPolicyModule {
                broadcastDispatcher,
                demoModeController,
                dumpManager,
                logger,
                mainHandler,
                bgHandler);
        bC.init();
+14 −2
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.os.BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE;
import static android.os.BatteryManager.CHARGING_POLICY_DEFAULT;
import static android.os.BatteryManager.EXTRA_CHARGING_STATUS;
import static android.os.BatteryManager.EXTRA_PRESENT;

import static com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_QS;
import static com.android.systemui.util.DumpUtilsKt.asIndenting;

@@ -85,6 +84,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    private final PowerManager mPowerManager;
    private final DemoModeController mDemoModeController;
    private final DumpManager mDumpManager;
    private final BatteryControllerLogger mLogger;
    private final Handler mMainHandler;
    private final Handler mBgHandler;
    protected final Context mContext;
@@ -122,6 +122,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
            BroadcastDispatcher broadcastDispatcher,
            DemoModeController demoModeController,
            DumpManager dumpManager,
            BatteryControllerLogger logger,
            @Main Handler mainHandler,
            @Background Handler bgHandler) {
        mContext = context;
@@ -132,6 +133,8 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
        mBroadcastDispatcher = broadcastDispatcher;
        mDemoModeController = demoModeController;
        mDumpManager = dumpManager;
        mLogger = logger;
        mLogger.logBatteryControllerInstance(this);
    }

    private void registerReceiver() {
@@ -145,6 +148,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC

    @Override
    public void init() {
        mLogger.logBatteryControllerInit(this, mHasReceivedBattery);
        registerReceiver();
        if (!mHasReceivedBattery) {
            // Get initial state. Relying on Sticky behavior until API for getting info.
@@ -232,8 +236,13 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    @Override
    public void onReceive(final Context context, Intent intent) {
        final String action = intent.getAction();
        mLogger.logIntentReceived(action);
        if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
            if (mTestMode && !intent.getBooleanExtra("testmode", false)) return;
            mLogger.logBatteryChangedIntent(intent);
            if (mTestMode && !intent.getBooleanExtra("testmode", false)) {
                mLogger.logBatteryChangedSkipBecauseTest();
                return;
            }
            mHasReceivedBattery = true;
            mLevel = (int) (100f
                    * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
@@ -275,6 +284,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
                fireIsIncompatibleChargingChanged();
            }
        } else if (action.equals(ACTION_LEVEL_TEST)) {
            mLogger.logEnterTestMode();
            mTestMode = true;
            mMainHandler.post(new Runnable() {
                int mCurrentLevel = 0;
@@ -286,6 +296,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
                @Override
                public void run() {
                    if (mCurrentLevel < 0) {
                        mLogger.logExitTestMode();
                        mTestMode = false;
                        mTestIntent.putExtra("level", mSavedLevel);
                        mTestIntent.putExtra("plugged", mSavedPluggedIn);
@@ -438,6 +449,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    }

    protected void fireBatteryLevelChanged() {
        mLogger.logBatteryLevelChangedCallback(mLevel, mPluggedIn, mCharging);
        synchronized (mChangeCallbacks) {
            final int N = mChangeCallbacks.size();
            for (int i = 0; i < N; i++) {
+121 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.policy

import android.content.Intent
import android.os.BatteryManager.EXTRA_LEVEL
import android.os.BatteryManager.EXTRA_SCALE
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.statusbar.policy.dagger.BatteryControllerLog
import javax.inject.Inject

/** Detailed, [LogBuffer]-backed logs for [BatteryControllerImpl] */
@SysUISingleton
class BatteryControllerLogger
@Inject
constructor(@BatteryControllerLog private val logBuffer: LogBuffer) {
    fun logBatteryControllerInstance(controller: BatteryController) {
        logBuffer.log(
            TAG,
            LogLevel.DEBUG,
            { int1 = System.identityHashCode(controller) },
            { "BatteryController CREATE (${Integer.toHexString(int1)})" }
        )
    }

    fun logBatteryControllerInit(controller: BatteryController, hasReceivedBattery: Boolean) {
        logBuffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                int1 = System.identityHashCode(controller)
                bool1 = hasReceivedBattery
            },
            { "BatteryController INIT (${Integer.toHexString(int1)}) hasReceivedBattery=$bool1" }
        )
    }

    fun logIntentReceived(action: String) {
        logBuffer.log(TAG, LogLevel.DEBUG, { str1 = action }, { "Received intent $str1" })
    }

    fun logBatteryChangedIntent(intent: Intent) {
        logBuffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                int1 = intent.getIntExtra(EXTRA_LEVEL, DEFAULT)
                int2 = intent.getIntExtra(EXTRA_SCALE, DEFAULT)
            },
            { "Processing BATTERY_CHANGED intent. level=${int1.report()} scale=${int2.report()}" }
        )
    }

    fun logBatteryChangedSkipBecauseTest() {
        logBuffer.log(
            TAG,
            LogLevel.DEBUG,
            {},
            { "Detected test intent. Will not execute battery level callbacks." }
        )
    }

    fun logEnterTestMode() {
        logBuffer.log(
            TAG,
            LogLevel.DEBUG,
            {},
            { "Entering test mode for BATTERY_LEVEL_TEST intent" }
        )
    }

    fun logExitTestMode() {
        logBuffer.log(TAG, LogLevel.DEBUG, {}, { "Exiting test mode" })
    }

    fun logBatteryLevelChangedCallback(level: Int, plugged: Boolean, charging: Boolean) {
        logBuffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                int1 = level
                bool1 = plugged
                bool2 = charging
            },
            {
                "Sending onBatteryLevelChanged callbacks " +
                    "with level=$int1, plugged=$bool1, charging=$bool2"
            }
        )
    }

    private fun Int.report(): String =
        if (this == DEFAULT) {
            "(missing)"
        } else {
            toString()
        }

    companion object {
        const val TAG: String = "BatteryControllerLog"
    }
}

// Use a token value so we can determine if we got the default
private const val DEFAULT = -11
+25 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.policy.dagger

import javax.inject.Qualifier

/** Logs for Battery events. See [BatteryControllerImpl] */
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class BatteryControllerLog
+12 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import com.android.internal.R;
import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.log.LogBuffer;
import com.android.systemui.log.LogBufferFactory;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.connectivity.AccessPointController;
import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
@@ -31,6 +33,7 @@ import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
import com.android.systemui.statusbar.connectivity.WifiPickerTrackerFactory;
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
import com.android.systemui.statusbar.policy.BatteryControllerLogger;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
import com.android.systemui.statusbar.policy.CastController;
@@ -202,4 +205,13 @@ public interface StatusBarPolicyModule {
    static DataSaverController provideDataSaverController(NetworkController networkController) {
        return networkController.getDataSaverController();
    }

    /** Provides a log bufffer for BatteryControllerImpl */
    @Provides
    @SysUISingleton
    @BatteryControllerLog
    //TODO(b/300147438): reduce the size of this log buffer
    static LogBuffer provideBatteryControllerLog(LogBufferFactory factory) {
        return factory.create(BatteryControllerLogger.TAG, 300);
    }
}
Loading