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
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package android.net;
|
package android.net;
|
||||||
|
|
||||||
import android.os.SystemClock;
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
@@ -25,12 +24,14 @@ import junit.framework.TestCase;
|
|||||||
public class NetworkStatsTest extends TestCase {
|
public class NetworkStatsTest extends TestCase {
|
||||||
|
|
||||||
private static final String TEST_IFACE = "test0";
|
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 {
|
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, 100, 1024, 0)
|
||||||
.addEntry(TEST_IFACE, 101, 0, 1024)
|
.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));
|
||||||
assertEquals(2, stats.findIndex(TEST_IFACE, 102));
|
assertEquals(2, stats.findIndex(TEST_IFACE, 102));
|
||||||
@@ -38,14 +39,40 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
assertEquals(-1, stats.findIndex(TEST_IFACE, 6));
|
assertEquals(-1, stats.findIndex(TEST_IFACE, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractIdenticalData() throws Exception {
|
public void testAddEntryGrow() throws Exception {
|
||||||
final NetworkStats before = new NetworkStats.Builder(SystemClock.elapsedRealtime(), 2)
|
final NetworkStats stats = new NetworkStats(TEST_START, 2);
|
||||||
.addEntry(TEST_IFACE, 100, 1024, 0)
|
|
||||||
.addEntry(TEST_IFACE, 101, 0, 1024).build();
|
|
||||||
|
|
||||||
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, 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);
|
final NetworkStats result = after.subtract(before);
|
||||||
|
|
||||||
@@ -57,13 +84,13 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractIdenticalRows() throws Exception {
|
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, 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, 100, 1025, 2)
|
||||||
.addEntry(TEST_IFACE, 101, 3, 1028).build();
|
.addEntry(TEST_IFACE, 101, 3, 1028);
|
||||||
|
|
||||||
final NetworkStats result = after.subtract(before);
|
final NetworkStats result = after.subtract(before);
|
||||||
|
|
||||||
@@ -75,14 +102,14 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractNewRows() throws Exception {
|
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, 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, 100, 1024, 0)
|
||||||
.addEntry(TEST_IFACE, 101, 0, 1024)
|
.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);
|
final NetworkStats result = after.subtract(before);
|
||||||
|
|
||||||
|
|||||||
@@ -145,8 +145,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
|||||||
elapsedRealtime += HOUR_IN_MILLIS;
|
elapsedRealtime += HOUR_IN_MILLIS;
|
||||||
expectTime(TEST_START + elapsedRealtime);
|
expectTime(TEST_START + elapsedRealtime);
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
|
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||||
.addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L).build());
|
.addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L));
|
||||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||||
|
|
||||||
replay();
|
replay();
|
||||||
@@ -161,8 +161,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
|||||||
elapsedRealtime += DAY_IN_MILLIS;
|
elapsedRealtime += DAY_IN_MILLIS;
|
||||||
expectTime(TEST_START + elapsedRealtime);
|
expectTime(TEST_START + elapsedRealtime);
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
|
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||||
.addEntry(TEST_IFACE, UID_ALL, 4096L, 8192L).build());
|
.addEntry(TEST_IFACE, UID_ALL, 4096L, 8192L));
|
||||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||||
|
|
||||||
replay();
|
replay();
|
||||||
@@ -196,12 +196,12 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
|||||||
elapsedRealtime += HOUR_IN_MILLIS;
|
elapsedRealtime += HOUR_IN_MILLIS;
|
||||||
expectTime(TEST_START + elapsedRealtime);
|
expectTime(TEST_START + elapsedRealtime);
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
|
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||||
.addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L).build());
|
.addEntry(TEST_IFACE, UID_ALL, 1024L, 2048L));
|
||||||
// TODO: switch these stats to specific iface
|
// 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_1, 512L, 256L)
|
||||||
.addEntry(IFACE_ALL, TEST_UID_2, 128L, 128L).build());
|
.addEntry(IFACE_ALL, TEST_UID_2, 128L, 128L));
|
||||||
|
|
||||||
replay();
|
replay();
|
||||||
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
mServiceContext.sendBroadcast(new Intent(ACTION_NETWORK_STATS_POLL));
|
||||||
@@ -262,8 +262,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
|||||||
elapsedRealtime += 2 * HOUR_IN_MILLIS;
|
elapsedRealtime += 2 * HOUR_IN_MILLIS;
|
||||||
expectTime(TEST_START + elapsedRealtime);
|
expectTime(TEST_START + elapsedRealtime);
|
||||||
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
|
expectSettings(0L, HOUR_IN_MILLIS, WEEK_IN_MILLIS);
|
||||||
expectNetworkStatsSummary(new NetworkStats.Builder(elapsedRealtime, 1)
|
expectNetworkStatsSummary(new NetworkStats(elapsedRealtime, 1)
|
||||||
.addEntry(TEST_IFACE, UID_ALL, 512L, 512L).build());
|
.addEntry(TEST_IFACE, UID_ALL, 512L, 512L));
|
||||||
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
expectNetworkStatsDetail(buildEmptyStats(elapsedRealtime));
|
||||||
|
|
||||||
replay();
|
replay();
|
||||||
@@ -378,7 +378,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static NetworkStats buildEmptyStats(long elapsedRealtime) {
|
private static NetworkStats buildEmptyStats(long elapsedRealtime) {
|
||||||
return new NetworkStats.Builder(elapsedRealtime, 0).build();
|
return new NetworkStats(elapsedRealtime, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void replay() {
|
private void replay() {
|
||||||
|
|||||||
Reference in New Issue
Block a user