Merge "Use the latest temperature read as base for headroom calculation" into main
diff --git a/services/core/java/com/android/server/power/ThermalManagerService.java b/services/core/java/com/android/server/power/ThermalManagerService.java
index 5360788..f5882a3 100644
--- a/services/core/java/com/android/server/power/ThermalManagerService.java
+++ b/services/core/java/com/android/server/power/ThermalManagerService.java
@@ -74,6 +74,7 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -1609,7 +1610,7 @@
/** Map of skin temperature sensor name to a corresponding list of samples */
@GuardedBy("mSamples")
@VisibleForTesting
- final ArrayMap<String, ArrayList<Sample>> mSamples = new ArrayMap<>();
+ final ArrayMap<String, LinkedList<Sample>> mSamples = new ArrayMap<>();
/** Map of skin temperature sensor name to the corresponding SEVERE temperature threshold */
@GuardedBy("mSamples")
@@ -1706,10 +1707,10 @@
continue;
}
- ArrayList<Sample> samples = mSamples.computeIfAbsent(temperature.getName(),
- k -> new ArrayList<>(RING_BUFFER_SIZE));
+ LinkedList<Sample> samples = mSamples.computeIfAbsent(temperature.getName(),
+ k -> new LinkedList<>());
if (samples.size() == RING_BUFFER_SIZE) {
- samples.remove(0);
+ samples.removeFirst();
}
samples.add(new Sample(now, temperature.getValue()));
}
@@ -1724,8 +1725,7 @@
float getSlopeOf(List<Sample> samples) {
long sumTimes = 0L;
float sumTemperatures = 0.0f;
- for (int s = 0; s < samples.size(); ++s) {
- Sample sample = samples.get(s);
+ for (final Sample sample : samples) {
sumTimes += sample.time;
sumTemperatures += sample.temperature;
}
@@ -1734,8 +1734,7 @@
long sampleVariance = 0L;
float sampleCovariance = 0.0f;
- for (int s = 0; s < samples.size(); ++s) {
- Sample sample = samples.get(s);
+ for (final Sample sample : samples) {
long timeDelta = sample.time - meanTime;
float temperatureDelta = sample.temperature - meanTemperature;
sampleVariance += timeDelta * timeDelta;
@@ -1795,9 +1794,9 @@
float maxNormalized = Float.NaN;
int noThresholdSampleCount = 0;
- for (Map.Entry<String, ArrayList<Sample>> entry : mSamples.entrySet()) {
+ for (Map.Entry<String, LinkedList<Sample>> entry : mSamples.entrySet()) {
String name = entry.getKey();
- ArrayList<Sample> samples = entry.getValue();
+ LinkedList<Sample> samples = entry.getValue();
Float threshold = mSevereThresholds.get(name);
if (threshold == null) {
@@ -1806,7 +1805,7 @@
continue;
}
- float currentTemperature = samples.get(0).temperature;
+ float currentTemperature = samples.getLast().temperature;
if (samples.size() < MINIMUM_SAMPLE_COUNT) {
// Don't try to forecast, just use the latest one we have
diff --git a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java
index 32bbc7a..3685afd 100644
--- a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java
@@ -68,6 +68,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -513,7 +514,7 @@
@Test
public void testTemperatureWatcherGetSlopeOf() throws RemoteException {
TemperatureWatcher watcher = mService.mTemperatureWatcher;
- List<TemperatureWatcher.Sample> samples = new ArrayList<>();
+ List<TemperatureWatcher.Sample> samples = new LinkedList<>();
for (int i = 0; i < 30; ++i) {
samples.add(watcher.createSampleForTesting(i, (float) (i / 2 * 2)));
}
@@ -538,7 +539,7 @@
public void testTemperatureWatcherGetForecast() throws RemoteException {
TemperatureWatcher watcher = mService.mTemperatureWatcher;
- ArrayList<TemperatureWatcher.Sample> samples = new ArrayList<>();
+ LinkedList<TemperatureWatcher.Sample> samples = new LinkedList<>();
// Add a single sample
samples.add(watcher.createSampleForTesting(0, 25.0f));
@@ -551,7 +552,7 @@
// Add some time-series data
for (int i = 1; i < 20; ++i) {
- samples.add(0, watcher.createSampleForTesting(1000 * i, 25.0f + 0.5f * i));
+ samples.add(watcher.createSampleForTesting(1000 * i, 25.0f + 0.5f * i));
}
// Now the forecast should vary depending on how far ahead we are trying to predict