From d226a97617f535777dc6d3ffa84fa18902d3f7c9 Mon Sep 17 00:00:00 2001 From: YK Hung Date: Tue, 18 Jun 2024 16:18:40 +0000 Subject: [PATCH] Dump the BatteryReattribute from the database into bugreport (2/5) Example: BatteryReattributeEntity{ Jun 18, 2024, 16:22:51 Jun 18, 2024, 16:23:01 reattribute_data { key: 1001 value: 0.1 } reattribute_data { key: 1002 value: 0.99 } timestamp_end: 1718727781368 timestamp_start: 1718727771368 } BatteryReattributeEntity{ Jun 18, 2024, 16:22:31 Jun 18, 2024, 16:22:51 reattribute_data { key: 1003 value: 1.0 } timestamp_end: 1718727771368 timestamp_start: 1718727751368 } Bug: 346706894 Test: atest SettingsRoboTests:com.android.settings.fuelgauge.batteryusage.bugreport Flag: EXEMPT bug fix Change-Id: Ie2544b9f43e399d87eb29354b401834372c3a9f7 --- .../bugreport/BugReportContentProvider.java | 1 + .../batteryusage/bugreport/LogUtils.java | 22 ++++ .../db/BatteryReattributeEntity.java | 1 + .../batteryusage/bugreport/LogUtilsTest.java | 102 ++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtilsTest.java diff --git a/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java b/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java index 7613d9ab097..baae10959c3 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java +++ b/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java @@ -60,6 +60,7 @@ public final class BugReportContentProvider extends ContentProvider { LogUtils.dumpBatteryUsageSlotDatabaseHist(context, writer); LogUtils.dumpBatteryEventDatabaseHist(context, writer); LogUtils.dumpBatteryStateDatabaseHist(context, writer); + LogUtils.dumpBatteryReattributeDatabaseHist(context, writer); } @Override diff --git a/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java b/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java index b2300308fd4..d2f3adcd9d7 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java @@ -19,6 +19,8 @@ package com.android.settings.fuelgauge.batteryusage.bugreport; import android.content.Context; import android.util.Log; +import androidx.annotation.VisibleForTesting; + import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.batteryusage.AppOptModeSharedPreferencesUtils; import com.android.settings.fuelgauge.batteryusage.AppOptimizationModeEvent; @@ -29,6 +31,8 @@ import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventDao; import com.android.settings.fuelgauge.batteryusage.db.AppUsageEventEntity; import com.android.settings.fuelgauge.batteryusage.db.BatteryEventDao; import com.android.settings.fuelgauge.batteryusage.db.BatteryEventEntity; +import com.android.settings.fuelgauge.batteryusage.db.BatteryReattributeDao; +import com.android.settings.fuelgauge.batteryusage.db.BatteryReattributeEntity; import com.android.settings.fuelgauge.batteryusage.db.BatteryState; import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDao; import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase; @@ -127,6 +131,24 @@ public final class LogUtils { dumpListItems(writer, entities, entity -> entity); } + static void dumpBatteryReattributeDatabaseHist(Context context, PrintWriter writer) { + dumpBatteryReattributeDatabaseHist( + BatteryStateDatabase.getInstance(context).batteryReattributeDao(), + writer); + } + + @VisibleForTesting + static void dumpBatteryReattributeDatabaseHist( + BatteryReattributeDao batteryReattributeDao, PrintWriter writer) { + writer.println("\n\tBatteryReattribute DatabaseHistory:"); + final List entities = + batteryReattributeDao.getAllAfter( + Clock.systemUTC().millis() - DUMP_TIME_OFFSET.toMillis()); + if (entities != null && !entities.isEmpty()) { + dumpListItems(writer, entities, entity -> entity); + } + } + private static void dumpListItems( PrintWriter writer, List itemList, Function itemConverter) { final AtomicInteger counter = new AtomicInteger(0); diff --git a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java index aa7e50ea9be..d518230b28c 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java +++ b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java @@ -62,6 +62,7 @@ public class BatteryReattributeEntity { .append("\nBatteryReattributeEntity{") .append("\n\t" + utcToLocalTimeForLogging(timestampStart)) .append("\n\t" + utcToLocalTimeForLogging(timestampEnd)) + .append("\n\t" + ConvertUtils.decodeBatteryReattribute(reattributeData)) .append("\n}"); return builder.toString(); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtilsTest.java new file mode 100644 index 00000000000..bf2b191a65d --- /dev/null +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtilsTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2024 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.settings.fuelgauge.batteryusage.bugreport; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; + +import androidx.test.core.app.ApplicationProvider; + +import com.android.settings.fuelgauge.batteryusage.BatteryReattribute; +import com.android.settings.fuelgauge.batteryusage.db.BatteryReattributeDao; +import com.android.settings.fuelgauge.batteryusage.db.BatteryReattributeEntity; +import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase; +import com.android.settings.testutils.BatteryTestUtils; + +import org.junit.After; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.robolectric.RobolectricTestRunner; + +import java.io.PrintWriter; +import java.io.StringWriter; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@RunWith(RobolectricTestRunner.class) +public final class LogUtilsTest { + + private StringWriter mTestStringWriter; + private PrintWriter mTestPrintWriter; + private Context mContext; + private BatteryStateDatabase mDatabase; + private BatteryReattributeDao mBatteryReattributeDao; + + @Before + public void setUp() { + mContext = ApplicationProvider.getApplicationContext(); + mTestStringWriter = new StringWriter(); + mTestPrintWriter = new PrintWriter(mTestStringWriter); + mDatabase = BatteryTestUtils.setUpBatteryStateDatabase(mContext); + mBatteryReattributeDao = mDatabase.batteryReattributeDao(); + } + + @After + public void cleanUp() { + mBatteryReattributeDao.clearAll(); + } + + @Test + public void dumpBatteryReattributeDatabaseHist_noData_printExpectedResult() { + LogUtils.dumpBatteryReattributeDatabaseHist(mBatteryReattributeDao, mTestPrintWriter); + + assertThat(mTestStringWriter.toString()) + .contains("BatteryReattribute DatabaseHistory:"); + } + + @Test + public void dumpBatteryReattributeDatabaseHist_printExpectedResult() { + final long currentTimeMillis = System.currentTimeMillis(); + // Insert the first testing data. + final BatteryReattribute batteryReattribute1 = + BatteryReattribute.newBuilder() + .setTimestampStart(currentTimeMillis - 20000) + .setTimestampEnd(currentTimeMillis - 10000) + .putReattributeData(1001, 0.1f) + .putReattributeData(1002, 0.99f) + .build(); + mBatteryReattributeDao.insert(new BatteryReattributeEntity(batteryReattribute1)); + // Insert the second testing data. + final BatteryReattribute batteryReattribute2 = + BatteryReattribute.newBuilder() + .setTimestampStart(currentTimeMillis - 40000) + .setTimestampEnd(currentTimeMillis - 20000) + .putReattributeData(1003, 1f) + .build(); + mBatteryReattributeDao.insert(new BatteryReattributeEntity(batteryReattribute2)); + + LogUtils.dumpBatteryReattributeDatabaseHist(mBatteryReattributeDao, mTestPrintWriter); + + final String result = mTestStringWriter.toString(); + assertThat(result).contains("BatteryReattribute DatabaseHistory:"); + assertThat(result).contains(batteryReattribute1.toString()); + assertThat(result).contains(batteryReattribute2.toString()); + } +}