From 6da66f9a5c9cf8c881e835a34583d3df8991f978 Mon Sep 17 00:00:00 2001 From: Kuan Wang Date: Wed, 11 Jan 2023 16:18:55 +0800 Subject: [PATCH] Use (the last existing timestamp in DB + 1) as the start time of usage event query to avoid loading the same events repeatedly. queryEvents API will return the events within [start, end). In the hourly job, if we query the events from the latest existing time, the events happening at the latest time will be saved for multiple times into database. This aims to avoid this issue. Test: make RunSettingsRoboTests Bug: 265110147 Fix: 265110147 Change-Id: I408e88b0e15fe22585906261935854cf47707f9c --- .../settings/fuelgauge/batteryusage/DatabaseUtils.java | 4 +++- .../settings/fuelgauge/batteryusage/DatabaseUtilsTest.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java index b52938a7ba0..516645ed75b 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java @@ -125,7 +125,9 @@ public final class DatabaseUtils { Log.d(TAG, String.format( "getAppUsageStartTimestampOfUser() userId=%d latestTimestamp=%d in %d/ms", userId, latestTimestamp, (System.currentTimeMillis() - startTime))); - return Math.max(latestTimestamp, earliestTimestamp); + // Use (latestTimestamp + 1) here to avoid loading the events of the latestTimestamp + // repeatedly. + return Math.max(latestTimestamp + 1, earliestTimestamp); } /** Returns the current user data in app usage event table. */ diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java index 7d04e859586..078aafa9973 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java @@ -270,7 +270,7 @@ public final class DatabaseUtilsTest { final long earliestTimestamp1 = 1001L; assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( - mContext, /*userId=*/ 0, earliestTimestamp1)).isEqualTo(returnedTimestamp); + mContext, /*userId=*/ 0, earliestTimestamp1)).isEqualTo(returnedTimestamp + 1); final long earliestTimestamp2 = 100001L; assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( mContext, /*userId=*/ 0, earliestTimestamp2)).isEqualTo(earliestTimestamp2);