From 4dc0642d3206a33b0a8edca35fef5e171ca3c530 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sun, 11 Sep 2011 17:33:14 -0700 Subject: [PATCH] Data usage structure optimizations. Driven by traceview hotspots found in Settings UI. Change-Id: I614a049523c526b7fcd12fffdf53a3e4723623e4 --- .../android/net/NetworkStatsHistoryTest.java | 48 ++++++++++++++ .../servicestests/res/raw/xt_qtaguid_typical | 62 +++++++++---------- 2 files changed, 79 insertions(+), 31 deletions(-) diff --git a/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java b/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java index b888d9a223..e1db073c07 100644 --- a/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java +++ b/core/tests/coretests/src/android/net/NetworkStatsHistoryTest.java @@ -407,6 +407,54 @@ public class NetworkStatsHistoryTest extends AndroidTestCase { assertEquals(Long.MAX_VALUE - 40, performVarLong(Long.MAX_VALUE - 40)); } + public void testIndexBeforeAfter() throws Exception { + final long BUCKET_SIZE = HOUR_IN_MILLIS; + stats = new NetworkStatsHistory(BUCKET_SIZE); + + final long FIRST_START = TEST_START; + final long FIRST_END = FIRST_START + (2 * HOUR_IN_MILLIS); + final long SECOND_START = TEST_START + WEEK_IN_MILLIS; + final long SECOND_END = SECOND_START + HOUR_IN_MILLIS; + final long THIRD_START = TEST_START + (2 * WEEK_IN_MILLIS); + final long THIRD_END = THIRD_START + (2 * HOUR_IN_MILLIS); + + stats.recordData(FIRST_START, FIRST_END, + new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); + stats.recordData(SECOND_START, SECOND_END, + new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); + stats.recordData(THIRD_START, THIRD_END, + new NetworkStats.Entry(1024L, 10L, 2048L, 20L, 2L)); + + // should have buckets: 2+1+2 + assertEquals(5, stats.size()); + + assertIndexBeforeAfter(stats, 0, 0, Long.MIN_VALUE); + assertIndexBeforeAfter(stats, 0, 1, FIRST_START); + assertIndexBeforeAfter(stats, 0, 1, FIRST_START + MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 0, 2, FIRST_START + HOUR_IN_MILLIS); + assertIndexBeforeAfter(stats, 1, 2, FIRST_START + HOUR_IN_MILLIS + MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 1, 2, FIRST_END - MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 1, 2, FIRST_END); + assertIndexBeforeAfter(stats, 1, 2, FIRST_END + MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 1, 2, SECOND_START - MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 1, 3, SECOND_START); + assertIndexBeforeAfter(stats, 2, 3, SECOND_END); + assertIndexBeforeAfter(stats, 2, 3, SECOND_END + MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 2, 3, THIRD_START - MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 2, 4, THIRD_START); + assertIndexBeforeAfter(stats, 3, 4, THIRD_START + MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 3, 4, THIRD_START + HOUR_IN_MILLIS); + assertIndexBeforeAfter(stats, 4, 4, THIRD_END); + assertIndexBeforeAfter(stats, 4, 4, THIRD_END + MINUTE_IN_MILLIS); + assertIndexBeforeAfter(stats, 4, 4, Long.MAX_VALUE); + } + + private static void assertIndexBeforeAfter( + NetworkStatsHistory stats, int before, int after, long time) { + assertEquals("unexpected before", before, stats.getIndexBefore(time)); + assertEquals("unexpected after", after, stats.getIndexAfter(time)); + } + private static long performVarLong(long before) throws Exception { final ByteArrayOutputStream out = new ByteArrayOutputStream(); writeVarLong(new DataOutputStream(out), before); diff --git a/services/tests/servicestests/res/raw/xt_qtaguid_typical b/services/tests/servicestests/res/raw/xt_qtaguid_typical index 7c4f04e1fb..8df4b1b06d 100644 --- a/services/tests/servicestests/res/raw/xt_qtaguid_typical +++ b/services/tests/servicestests/res/raw/xt_qtaguid_typical @@ -1,32 +1,32 @@ idx iface acct_tag_hex uid_tag_int rx_bytes tx_bytes -1 wlan0 0x0 0 14615 4270 -2 wlan0 0x0 1000 5175 915 -3 wlan0 0x0 1021 3381 903 -4 wlan0 0x0 10004 333821 53558 -5 wlan0 0x0 10010 4888 37363 -6 wlan0 0x0 10013 52 104 -7 wlan0 0x74182ada00000000 10004 18725 1066 -8 rmnet0 0x0 0 301274 30244 -9 rmnet0 0x0 1000 304 441 -10 rmnet0 0x0 1013 2880 2272 -11 rmnet0 0x0 1021 31407 8430 -12 rmnet0 0x0 10003 32665 3814 -13 rmnet0 0x0 10004 2373141 420112 -14 rmnet0 0x0 10010 870370 1111727 -15 rmnet0 0x0 10013 240 240 -16 rmnet0 0x0 10016 16703 13512 -17 rmnet0 0x0 10017 3990 3269 -18 rmnet0 0x0 10018 474504 14516062 -19 rmnet0 0x0 10019 782804 71077 -20 rmnet0 0x0 10022 70671 49684 -21 rmnet0 0x0 10029 5785354 397159 -22 rmnet0 0x0 10033 2102 1686 -23 rmnet0 0x0 10034 15495464 227694 -24 rmnet0 0x0 10037 31184994 684122 -25 rmnet0 0x0 10051 298687 113485 -26 rmnet0 0x0 10056 29504 20669 -27 rmnet0 0x0 10069 683 596 -28 rmnet0 0x0 10072 34051 12453 -29 rmnet0 0x0 10077 7025393 213866 -30 rmnet0 0x0 10081 354 1178 -31 rmnet0 0x74182ada00000000 10037 28507378 437004 +2 wlan0 0x0 0 14615 4270 +3 wlan0 0x0 1000 5175 915 +4 wlan0 0x0 1021 3381 903 +5 wlan0 0x0 10004 333821 53558 +6 wlan0 0x0 10010 4888 37363 +7 wlan0 0x0 10013 52 104 +8 wlan0 0x74182ada00000000 10004 18725 1066 +9 rmnet0 0x0 0 301274 30244 +10 rmnet0 0x0 1000 304 441 +11 rmnet0 0x0 1013 2880 2272 +12 rmnet0 0x0 1021 31407 8430 +13 rmnet0 0x0 10003 32665 3814 +14 rmnet0 0x0 10004 2373141 420112 +15 rmnet0 0x0 10010 870370 1111727 +16 rmnet0 0x0 10013 240 240 +17 rmnet0 0x0 10016 16703 13512 +18 rmnet0 0x0 10017 3990 3269 +19 rmnet0 0x0 10018 474504 14516062 +20 rmnet0 0x0 10019 782804 71077 +21 rmnet0 0x0 10022 70671 49684 +22 rmnet0 0x0 10029 5785354 397159 +23 rmnet0 0x0 10033 2102 1686 +24 rmnet0 0x0 10034 15495464 227694 +25 rmnet0 0x0 10037 31184994 684122 +26 rmnet0 0x0 10051 298687 113485 +27 rmnet0 0x0 10056 29504 20669 +28 rmnet0 0x0 10069 683 596 +29 rmnet0 0x0 10072 34051 12453 +30 rmnet0 0x0 10077 7025393 213866 +31 rmnet0 0x0 10081 354 1178 +32 rmnet0 0x74182ada00000000 10037 28507378 437004