Growable NetworkStats object instead of builder.
NetworkStats now grows in place with arraycopy() instead of callers
needing to know record count a priori. Better growth calculation for
both NetworkStats and NetworkStatsHistory; 50% each time. Better
estimates of buckets needed in calling services.
Change-Id: I3adbffa0b7407612cc6349d9135a8b4eb63cd440
diff --git a/core/tests/coretests/src/android/net/NetworkStatsTest.java b/core/tests/coretests/src/android/net/NetworkStatsTest.java
index 8a3e871..5250a7c 100644
--- a/core/tests/coretests/src/android/net/NetworkStatsTest.java
+++ b/core/tests/coretests/src/android/net/NetworkStatsTest.java
@@ -16,7 +16,6 @@
package android.net;
-import android.os.SystemClock;
import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.TestCase;
@@ -25,12 +24,14 @@
public class NetworkStatsTest extends TestCase {
private static final String TEST_IFACE = "test0";
+ private static final int TEST_UID = 1001;
+ private static final long TEST_START = 1194220800000L;
public void testFindIndex() throws Exception {
- final NetworkStats stats = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 3)
+ final NetworkStats stats = new NetworkStats(TEST_START, 3)
.addEntry(TEST_IFACE, 100, 1024, 0)
.addEntry(TEST_IFACE, 101, 0, 1024)
- .addEntry(TEST_IFACE, 102, 1024, 1024).build();
+ .addEntry(TEST_IFACE, 102, 1024, 1024);
assertEquals(2, stats.findIndex(TEST_IFACE, 102));
assertEquals(2, stats.findIndex(TEST_IFACE, 102));
@@ -38,14 +39,40 @@
assertEquals(-1, stats.findIndex(TEST_IFACE, 6));
}
- public void testSubtractIdenticalData() throws Exception {
- final NetworkStats before = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 2)
- .addEntry(TEST_IFACE, 100, 1024, 0)
- .addEntry(TEST_IFACE, 101, 0, 1024).build();
+ public void testAddEntryGrow() throws Exception {
+ final NetworkStats stats = new NetworkStats(TEST_START, 2);
- final NetworkStats after = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 2)
+ assertEquals(0, stats.size);
+ assertEquals(2, stats.iface.length);
+
+ stats.addEntry(TEST_IFACE, TEST_UID, 1L, 2L);
+ stats.addEntry(TEST_IFACE, TEST_UID, 2L, 2L);
+
+ assertEquals(2, stats.size);
+ assertEquals(2, stats.iface.length);
+
+ stats.addEntry(TEST_IFACE, TEST_UID, 3L, 4L);
+ stats.addEntry(TEST_IFACE, TEST_UID, 4L, 4L);
+ stats.addEntry(TEST_IFACE, TEST_UID, 5L, 5L);
+
+ assertEquals(5, stats.size);
+ assertTrue(stats.iface.length >= 5);
+
+ assertEquals(1L, stats.rx[0]);
+ assertEquals(2L, stats.rx[1]);
+ assertEquals(3L, stats.rx[2]);
+ assertEquals(4L, stats.rx[3]);
+ assertEquals(5L, stats.rx[4]);
+ }
+
+ public void testSubtractIdenticalData() throws Exception {
+ final NetworkStats before = new NetworkStats(TEST_START, 2)
.addEntry(TEST_IFACE, 100, 1024, 0)
- .addEntry(TEST_IFACE, 101, 0, 1024).build();
+ .addEntry(TEST_IFACE, 101, 0, 1024);
+
+ final NetworkStats after = new NetworkStats(TEST_START, 2)
+ .addEntry(TEST_IFACE, 100, 1024, 0)
+ .addEntry(TEST_IFACE, 101, 0, 1024);
final NetworkStats result = after.subtract(before);
@@ -57,13 +84,13 @@
}
public void testSubtractIdenticalRows() throws Exception {
- final NetworkStats before = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 2)
+ final NetworkStats before = new NetworkStats(TEST_START, 2)
.addEntry(TEST_IFACE, 100, 1024, 0)
- .addEntry(TEST_IFACE, 101, 0, 1024).build();
+ .addEntry(TEST_IFACE, 101, 0, 1024);
- final NetworkStats after = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 2)
+ final NetworkStats after = new NetworkStats(TEST_START, 2)
.addEntry(TEST_IFACE, 100, 1025, 2)
- .addEntry(TEST_IFACE, 101, 3, 1028).build();
+ .addEntry(TEST_IFACE, 101, 3, 1028);
final NetworkStats result = after.subtract(before);
@@ -75,14 +102,14 @@
}
public void testSubtractNewRows() throws Exception {
- final NetworkStats before = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 2)
+ final NetworkStats before = new NetworkStats(TEST_START, 2)
.addEntry(TEST_IFACE, 100, 1024, 0)
- .addEntry(TEST_IFACE, 101, 0, 1024).build();
+ .addEntry(TEST_IFACE, 101, 0, 1024);
- final NetworkStats after = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 3)
+ final NetworkStats after = new NetworkStats(TEST_START, 3)
.addEntry(TEST_IFACE, 100, 1024, 0)
.addEntry(TEST_IFACE, 101, 0, 1024)
- .addEntry(TEST_IFACE, 102, 1024, 1024).build();
+ .addEntry(TEST_IFACE, 102, 1024, 1024);
final NetworkStats result = after.subtract(before);
diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
index d6e4b8b..2457ff3 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
@@ -145,8 +145,8 @@
elapsedRealtime += HOUR_IN_MILLIS;
expectTime(TEST_START + elapsedRealtime);
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
- .addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L).build());
+ expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
+ .addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L));
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
replay();
@@ -161,8 +161,8 @@
elapsedRealtime += DAY_IN_MILLIS;
expectTime(TEST_START + elapsedRealtime);
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
- .addEntry(TEST_IFACE, UID_ALL, 4096L, 8192L).build());
+ expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
+ .addEntry(TEST_IFACE, UID_ALL, 4096L, 8192L));
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
replay();
@@ -196,12 +196,12 @@
elapsedRealtime += HOUR_IN_MILLIS;
expectTime(TEST_START + elapsedRealtime);
expectDefaultSettings();
- expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
- .addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L).build());
+ expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
+ .addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L));
// TODO: switch these stats to specific iface
- expectNetworkStatsDetail(new NetworkStats.Builder(elapsedRealtime, 2)
+ expectNetworkStatsDetail(new NetworkStats(elapsedRealtime, 2)
.addEntry(IFACE_ALL, TEST_UID_1, 512L, 256L)
- .addEntry(IFACE_ALL, TEST_UID_2, 128L, 128L).build());
+ .addEntry(IFACE_ALL, TEST_UID_2, 128L, 128L));
replay();
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
@@ -262,8 +262,8 @@
elapsedRealtime += 2 * HOUR_IN_MILLIS;
expectTime(TEST_START + elapsedRealtime);
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
- expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
- .addEntry(TEST_IFACE, UID_ALL, 512L, 512L).build());
+ expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
+ .addEntry(TEST_IFACE, UID_ALL, 512L, 512L));
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
replay();
@@ -378,7 +378,7 @@
}
private static NetworkStats buildEmptyStats(long elapsedRealtime) {
- return new NetworkStats.Builder(elapsedRealtime, 0).build();
+ return new NetworkStats(elapsedRealtime, 0);
}
private void replay() {