From 680cd305a121f8de92892fd2a37cb2349c8d65b1 Mon Sep 17 00:00:00 2001 From: Zaiyue Xue Date: Wed, 12 Apr 2023 11:44:44 +0800 Subject: [PATCH] Optimize screen time cross power connection logic from O(N^2) to O(N) Bug: 277844625 Fix: 277844625 Test: presubmit Change-Id: If945e45a5eb279fd730dcc13575dd4fe45ac3ad4 --- .../settings/fuelgauge/batteryusage/DataProcessor.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index ec1a4be0fae..8818431d40d 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -852,9 +852,11 @@ public final class DataProcessor { final List usagePeriodList, final List batteryEventList) { final List resultList = new ArrayList<>(); + int index = 0; for (AppUsagePeriod inputPeriod : usagePeriodList) { long lastStartTime = inputPeriod.getStartTime(); - for (BatteryEvent batteryEvent : batteryEventList) { + while (index < batteryEventList.size()) { + BatteryEvent batteryEvent = batteryEventList.get(index); if (batteryEvent.getTimestamp() < inputPeriod.getStartTime()) { // Because the batteryEventList has been sorted, here is to mark the power // connection state when the usage period starts. If power is connected when @@ -865,6 +867,7 @@ public final class DataProcessor { } else if (batteryEvent.getType() == BatteryEventType.POWER_DISCONNECTED) { lastStartTime = inputPeriod.getStartTime(); } + index++; continue; } if (batteryEvent.getTimestamp() > inputPeriod.getEndTime()) { @@ -883,6 +886,7 @@ public final class DataProcessor { } else if (batteryEvent.getType() == BatteryEventType.POWER_DISCONNECTED) { lastStartTime = batteryEvent.getTimestamp(); } + index++; } if (lastStartTime != 0) { resultList.add(AppUsagePeriod.newBuilder()