summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Caitlin Shkuratov <caitlinshk@google.com> 2023-09-14 13:22:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-09-14 13:22:49 +0000
commit8b9007487c691acfa1b1ea4d4afc71e7bf5ac93b (patch)
treefc9f3ddb6e72818b101085854c4353a63f604a56
parenta0cb1a847f5e93f29f91c4045c3629baede0c95e (diff)
parent5085e3b6e6da7e6679f7684c0be0442668965618 (diff)
Merge "[Battery] Add detailed battery controller logs" into main
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/AospPolicyModule.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt121
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/BatteryControllerLog.kt25
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java3
6 files changed, 175 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AospPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AospPolicyModule.java
index ba5fa1df4b15..3d51ab0a2b27 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AospPolicyModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AospPolicyModule.java
@@ -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();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
index 4b515115dd77..41ed76d7edb1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
@@ -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++) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt
new file mode 100644
index 000000000000..4a2a2dbad638
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt
@@ -0,0 +1,121 @@
+/*
+ * 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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/BatteryControllerLog.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/BatteryControllerLog.kt
new file mode 100644
index 000000000000..5322b3811f95
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/BatteryControllerLog.kt
@@ -0,0 +1,25 @@
+/*
+ * 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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
index c2a8e701653a..de07a48a2b56 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/dagger/StatusBarPolicyModule.java
@@ -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);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
index cdeb59278851..58d93c98f015 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
@@ -17,12 +17,10 @@
package com.android.systemui.statusbar.policy;
import static android.os.BatteryManager.EXTRA_PRESENT;
-
import static com.android.dx.mockito.inline.extended.ExtendedMockito.inOrder;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.staticMockMarker;
import static com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_QS;
-
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -91,6 +89,7 @@ public class BatteryControllerTest extends SysuiTestCase {
mBroadcastDispatcher,
mDemoModeController,
mock(DumpManager.class),
+ mock(BatteryControllerLogger.class),
new Handler(),
new Handler());
// Can throw if updateEstimate is called on the main thread