Add SparseLongArray.incrementValue()

This method is used for accumulation of long values: if
the key does not exist, one is created.  If one already exists,
the passed value is added to the previous value.

This method is similar to the existing
SparseDoubleArray.incrementValue() method

Bug: 215427055
Test: atest FrameworksCoreTests:SparseLongArrayTest
Change-Id: I771d9bc2bdd12ca4260b20186ced70f5862b6f56
This commit is contained in:
Dmitri Plotnikov
2022-01-19 15:52:19 -08:00
parent 2f473a9767
commit bb925fb034
5 changed files with 48 additions and 12 deletions

View File

@@ -105,7 +105,7 @@ public class SparseDoubleArray implements Cloneable {
* <p>This differs from {@link #put} because instead of replacing any previous value, it adds
* (in the numerical sense) to it.
*/
public void add(int key, double summand) {
public void incrementValue(int key, double summand) {
final double oldValue = get(key);
put(key, oldValue + summand);
}

View File

@@ -163,6 +163,30 @@ public class SparseLongArray implements Cloneable {
}
}
/**
* Adds a mapping from the specified key to the specified value,
* <b>adding</b> its value to the previous mapping from the specified key if there
* was one.
*
* <p>This differs from {@link #put} because instead of replacing any previous value, it adds
* (in the numerical sense) to it.
*
* @hide
*/
public void incrementValue(int key, long summand) {
int i = ContainerHelpers.binarySearch(mKeys, mSize, key);
if (i >= 0) {
mValues[i] += summand;
} else {
i = ~i;
mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
mValues = GrowingArrayUtils.insert(mValues, mSize, i, summand);
mSize++;
}
}
/**
* Returns the number of key-value mappings that this SparseLongArray
* currently stores.

View File

@@ -12828,7 +12828,7 @@ public class BatteryStatsImpl extends BatteryStats {
}
}
uidEstimatedConsumptionMah.add(u.getUid(),
uidEstimatedConsumptionMah.incrementValue(u.getUid(),
mWifiPowerCalculator.calcPowerWithoutControllerDataMah(
entry.rxPackets, entry.txPackets,
uidRunningMs, uidScanMs, uidBatchScanMs));
@@ -12955,7 +12955,7 @@ public class BatteryStatsImpl extends BatteryStats {
if (uidEstimatedConsumptionMah != null) {
double uidEstMah = mWifiPowerCalculator.calcPowerFromControllerDataMah(
scanRxTimeSinceMarkMs, scanTxTimeSinceMarkMs, myIdleTimeMs);
uidEstimatedConsumptionMah.add(uid.getUid(), uidEstMah);
uidEstimatedConsumptionMah.incrementValue(uid.getUid(), uidEstMah);
}
}
@@ -12977,7 +12977,7 @@ public class BatteryStatsImpl extends BatteryStats {
uid.getOrCreateWifiControllerActivityLocked().getOrCreateTxTimeCounters()[0]
.increment(myTxTimeMs, elapsedRealtimeMs);
if (uidEstimatedConsumptionMah != null) {
uidEstimatedConsumptionMah.add(uid.getUid(),
uidEstimatedConsumptionMah.incrementValue(uid.getUid(),
mWifiPowerCalculator.calcPowerFromControllerDataMah(
0, myTxTimeMs, 0));
}
@@ -12996,7 +12996,7 @@ public class BatteryStatsImpl extends BatteryStats {
uid.getOrCreateWifiControllerActivityLocked().getOrCreateRxTimeCounter()
.increment(myRxTimeMs, elapsedRealtimeMs);
if (uidEstimatedConsumptionMah != null) {
uidEstimatedConsumptionMah.add(uid.getUid(),
uidEstimatedConsumptionMah.incrementValue(uid.getUid(),
mWifiPowerCalculator.calcPowerFromControllerDataMah(
myRxTimeMs, 0, 0));
}
@@ -13224,7 +13224,7 @@ public class BatteryStatsImpl extends BatteryStats {
// Distribute measured mobile radio charge consumption based on app radio
// active time
if (uidEstimatedConsumptionMah != null) {
uidEstimatedConsumptionMah.add(u.getUid(),
uidEstimatedConsumptionMah.incrementValue(u.getUid(),
mMobileRadioPowerCalculator.calcPowerFromRadioActiveDurationMah(
appRadioTimeUs / 1000));
}
@@ -13479,7 +13479,7 @@ public class BatteryStatsImpl extends BatteryStats {
.increment(scanTimeTxSinceMarkMs, elapsedRealtimeMs);
if (uidEstimatedConsumptionMah != null) {
uidEstimatedConsumptionMah.add(u.getUid(),
uidEstimatedConsumptionMah.incrementValue(u.getUid(),
mBluetoothPowerCalculator.calculatePowerMah(
scanTimeRxSinceMarkMs, scanTimeTxSinceMarkMs, 0));
}
@@ -13546,7 +13546,7 @@ public class BatteryStatsImpl extends BatteryStats {
counter.getOrCreateRxTimeCounter().increment(timeRxMs, elapsedRealtimeMs);
if (uidEstimatedConsumptionMah != null) {
uidEstimatedConsumptionMah.add(u.getUid(),
uidEstimatedConsumptionMah.incrementValue(u.getUid(),
mBluetoothPowerCalculator.calculatePowerMah(timeRxMs, 0, 0));
}
}
@@ -13560,7 +13560,7 @@ public class BatteryStatsImpl extends BatteryStats {
.increment(timeTxMs, elapsedRealtimeMs);
if (uidEstimatedConsumptionMah != null) {
uidEstimatedConsumptionMah.add(u.getUid(),
uidEstimatedConsumptionMah.incrementValue(u.getUid(),
mBluetoothPowerCalculator.calculatePowerMah(0, timeTxMs, 0));
}
}

View File

@@ -64,12 +64,12 @@ public class SparseDoubleArrayTest {
}
@Test
public void testAdd() {
public void testIncrementValue() {
final SparseDoubleArray sda = new SparseDoubleArray();
sda.put(4, 6.1);
sda.add(4, -1.2);
sda.add(2, -1.2);
sda.incrementValue(4, -1.2);
sda.incrementValue(2, -1.2);
assertEquals(6.1 - 1.2, sda.get(4), PRECISION);
assertEquals(-1.2, sda.get(2), PRECISION);

View File

@@ -154,4 +154,16 @@ public class SparseLongArrayTest {
assertRemoved(startIndex, endIndex);
assertTrue(isSame(sparseLongArray2, mSparseLongArray));
}
@Test
public void testIncrementValue() {
final SparseLongArray sla = new SparseLongArray();
sla.put(4, 6);
sla.incrementValue(4, 4);
sla.incrementValue(2, 5);
assertEquals(6 + 4, sla.get(4));
assertEquals(5, sla.get(2));
}
}