Loading core/java/android/net/metrics/ConnectStats.java +25 −3 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ public class ConnectStats { private final int mMaxLatencyRecords; private final int mMaxLatencyRecords; /** Total count of successful connects. */ /** Total count of successful connects. */ private int mConnectCount = 0; private int mConnectCount = 0; /** Total count of successful connects done in blocking mode. */ private int mConnectBlockingCount = 0; /** Total count of successful connects with IPv6 socket address. */ /** Total count of successful connects with IPv6 socket address. */ private int mIpv6ConnectCount = 0; private int mIpv6ConnectCount = 0; Loading @@ -54,6 +56,7 @@ public class ConnectStats { public ConnectStatistics toProto() { public ConnectStatistics toProto() { ConnectStatistics stats = new ConnectStatistics(); ConnectStatistics stats = new ConnectStatistics(); stats.connectCount = mConnectCount; stats.connectCount = mConnectCount; stats.connectBlockingCount = mConnectBlockingCount; stats.ipv6AddrCount = mIpv6ConnectCount; stats.ipv6AddrCount = mIpv6ConnectCount; stats.latenciesMs = mLatencies.toArray(); stats.latenciesMs = mLatencies.toArray(); stats.errnosCounters = toPairArrays(mErrnos); stats.errnosCounters = toPairArrays(mErrnos); Loading @@ -62,16 +65,21 @@ public class ConnectStats { public void addEvent(int errno, int latencyMs, String ipAddr) { public void addEvent(int errno, int latencyMs, String ipAddr) { if (isSuccess(errno)) { if (isSuccess(errno)) { countConnect(ipAddr); countConnect(errno, ipAddr); countLatency(errno, latencyMs); countLatency(errno, latencyMs); } else { } else { countError(errno); countError(errno); } } } } private void countConnect(String ipAddr) { private void countConnect(int errno, String ipAddr) { mConnectCount++; mConnectCount++; if (isIPv6(ipAddr)) mIpv6ConnectCount++; if (!isNonBlocking(errno)) { mConnectBlockingCount++; } if (isIPv6(ipAddr)) { mIpv6ConnectCount++; } } } private void countLatency(int errno, int ms) { private void countLatency(int errno, int ms) { Loading Loading @@ -120,4 +128,18 @@ public class ConnectStats { } } return pairs; return pairs; } } @Override public String toString() { StringBuilder builder = new StringBuilder("ConnectStats(") .append(String.format("%d success, ", mConnectCount)) .append(String.format("%d blocking, ", mConnectBlockingCount)) .append(String.format("%d IPv6 dst", mIpv6ConnectCount)); for (int i = 0; i < mErrnos.size(); i++) { String errno = OsConstants.errnoName(mErrnos.keyAt(i)); int count = mErrnos.valueAt(i); builder.append(String.format(", %s: %d", errno, count)); } return builder.append(")").toString(); } } } services/core/java/com/android/server/connectivity/IpConnectivityMetrics.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -201,12 +201,18 @@ final public class IpConnectivityMetrics extends SystemService { for (IpConnectivityEvent ev : IpConnectivityEventBuilder.toProto(events)) { for (IpConnectivityEvent ev : IpConnectivityEventBuilder.toProto(events)) { pw.print(ev.toString()); pw.print(ev.toString()); } } if (mNetdListener != null) { mNetdListener.listAsProtos(pw); } return; return; } } for (ConnectivityMetricsEvent ev : events) { for (ConnectivityMetricsEvent ev : events) { pw.println(ev.toString()); pw.println(ev.toString()); } } if (mNetdListener != null) { mNetdListener.list(pw); } } } private void cmdStats(FileDescriptor fd, PrintWriter pw, String[] args) { private void cmdStats(FileDescriptor fd, PrintWriter pw, String[] args) { Loading services/core/java/com/android/server/connectivity/NetdEventListenerService.java +17 −4 Original line number Original line Diff line number Diff line Loading @@ -204,10 +204,15 @@ public class NetdEventListenerService extends INetdEventListener.Stub { // TODO: migrate DnsEventBatch to IpConnectivityLogClass.DNSLatencies // TODO: migrate DnsEventBatch to IpConnectivityLogClass.DNSLatencies } } private IpConnectivityEvent flushConnectStats() { private IpConnectivityEvent connectStatsProto() { // TODO: add transport information IpConnectivityEvent ev = new IpConnectivityEvent(); IpConnectivityEvent ev = new IpConnectivityEvent(); ev.setConnectStatistics(mConnectStats.toProto()); ev.setConnectStatistics(mConnectStats.toProto()); // TODO: add transport information return ev; } private IpConnectivityEvent flushConnectStats() { IpConnectivityEvent ev = connectStatsProto(); mConnectStats = makeConnectStats(); mConnectStats = makeConnectStats(); return ev; return ev; } } Loading @@ -216,11 +221,19 @@ public class NetdEventListenerService extends INetdEventListener.Stub { IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); pw.println(TAG + ":"); pw.println(TAG + ":"); pw.increaseIndent(); pw.increaseIndent(); list(pw); pw.decreaseIndent(); } public synchronized void list(PrintWriter pw) { for (DnsEventBatch batch : mEventBatches.values()) { for (DnsEventBatch batch : mEventBatches.values()) { pw.println(batch.toString()); pw.println(batch.toString()); } } // TODO: also dump ConnectStats pw.println(mConnectStats.toString()); pw.decreaseIndent(); } public synchronized void listAsProtos(PrintWriter pw) { pw.println(connectStatsProto().toString()); } } private ConnectStats makeConnectStats() { private ConnectStats makeConnectStats() { Loading tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -219,7 +219,7 @@ public class NetdEventListenerServiceTest extends TestCase { "time_ms: 0", "time_ms: 0", "transports: 0", "transports: 0", "connect_statistics <", "connect_statistics <", " connect_blocking_count: 0", " connect_blocking_count: 7", " connect_count: 12", " connect_count: 12", " errnos_counters <", " errnos_counters <", " key: 1", " key: 1", Loading Loading
core/java/android/net/metrics/ConnectStats.java +25 −3 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ public class ConnectStats { private final int mMaxLatencyRecords; private final int mMaxLatencyRecords; /** Total count of successful connects. */ /** Total count of successful connects. */ private int mConnectCount = 0; private int mConnectCount = 0; /** Total count of successful connects done in blocking mode. */ private int mConnectBlockingCount = 0; /** Total count of successful connects with IPv6 socket address. */ /** Total count of successful connects with IPv6 socket address. */ private int mIpv6ConnectCount = 0; private int mIpv6ConnectCount = 0; Loading @@ -54,6 +56,7 @@ public class ConnectStats { public ConnectStatistics toProto() { public ConnectStatistics toProto() { ConnectStatistics stats = new ConnectStatistics(); ConnectStatistics stats = new ConnectStatistics(); stats.connectCount = mConnectCount; stats.connectCount = mConnectCount; stats.connectBlockingCount = mConnectBlockingCount; stats.ipv6AddrCount = mIpv6ConnectCount; stats.ipv6AddrCount = mIpv6ConnectCount; stats.latenciesMs = mLatencies.toArray(); stats.latenciesMs = mLatencies.toArray(); stats.errnosCounters = toPairArrays(mErrnos); stats.errnosCounters = toPairArrays(mErrnos); Loading @@ -62,16 +65,21 @@ public class ConnectStats { public void addEvent(int errno, int latencyMs, String ipAddr) { public void addEvent(int errno, int latencyMs, String ipAddr) { if (isSuccess(errno)) { if (isSuccess(errno)) { countConnect(ipAddr); countConnect(errno, ipAddr); countLatency(errno, latencyMs); countLatency(errno, latencyMs); } else { } else { countError(errno); countError(errno); } } } } private void countConnect(String ipAddr) { private void countConnect(int errno, String ipAddr) { mConnectCount++; mConnectCount++; if (isIPv6(ipAddr)) mIpv6ConnectCount++; if (!isNonBlocking(errno)) { mConnectBlockingCount++; } if (isIPv6(ipAddr)) { mIpv6ConnectCount++; } } } private void countLatency(int errno, int ms) { private void countLatency(int errno, int ms) { Loading Loading @@ -120,4 +128,18 @@ public class ConnectStats { } } return pairs; return pairs; } } @Override public String toString() { StringBuilder builder = new StringBuilder("ConnectStats(") .append(String.format("%d success, ", mConnectCount)) .append(String.format("%d blocking, ", mConnectBlockingCount)) .append(String.format("%d IPv6 dst", mIpv6ConnectCount)); for (int i = 0; i < mErrnos.size(); i++) { String errno = OsConstants.errnoName(mErrnos.keyAt(i)); int count = mErrnos.valueAt(i); builder.append(String.format(", %s: %d", errno, count)); } return builder.append(")").toString(); } } }
services/core/java/com/android/server/connectivity/IpConnectivityMetrics.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -201,12 +201,18 @@ final public class IpConnectivityMetrics extends SystemService { for (IpConnectivityEvent ev : IpConnectivityEventBuilder.toProto(events)) { for (IpConnectivityEvent ev : IpConnectivityEventBuilder.toProto(events)) { pw.print(ev.toString()); pw.print(ev.toString()); } } if (mNetdListener != null) { mNetdListener.listAsProtos(pw); } return; return; } } for (ConnectivityMetricsEvent ev : events) { for (ConnectivityMetricsEvent ev : events) { pw.println(ev.toString()); pw.println(ev.toString()); } } if (mNetdListener != null) { mNetdListener.list(pw); } } } private void cmdStats(FileDescriptor fd, PrintWriter pw, String[] args) { private void cmdStats(FileDescriptor fd, PrintWriter pw, String[] args) { Loading
services/core/java/com/android/server/connectivity/NetdEventListenerService.java +17 −4 Original line number Original line Diff line number Diff line Loading @@ -204,10 +204,15 @@ public class NetdEventListenerService extends INetdEventListener.Stub { // TODO: migrate DnsEventBatch to IpConnectivityLogClass.DNSLatencies // TODO: migrate DnsEventBatch to IpConnectivityLogClass.DNSLatencies } } private IpConnectivityEvent flushConnectStats() { private IpConnectivityEvent connectStatsProto() { // TODO: add transport information IpConnectivityEvent ev = new IpConnectivityEvent(); IpConnectivityEvent ev = new IpConnectivityEvent(); ev.setConnectStatistics(mConnectStats.toProto()); ev.setConnectStatistics(mConnectStats.toProto()); // TODO: add transport information return ev; } private IpConnectivityEvent flushConnectStats() { IpConnectivityEvent ev = connectStatsProto(); mConnectStats = makeConnectStats(); mConnectStats = makeConnectStats(); return ev; return ev; } } Loading @@ -216,11 +221,19 @@ public class NetdEventListenerService extends INetdEventListener.Stub { IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); pw.println(TAG + ":"); pw.println(TAG + ":"); pw.increaseIndent(); pw.increaseIndent(); list(pw); pw.decreaseIndent(); } public synchronized void list(PrintWriter pw) { for (DnsEventBatch batch : mEventBatches.values()) { for (DnsEventBatch batch : mEventBatches.values()) { pw.println(batch.toString()); pw.println(batch.toString()); } } // TODO: also dump ConnectStats pw.println(mConnectStats.toString()); pw.decreaseIndent(); } public synchronized void listAsProtos(PrintWriter pw) { pw.println(connectStatsProto().toString()); } } private ConnectStats makeConnectStats() { private ConnectStats makeConnectStats() { Loading
tests/net/java/com/android/server/connectivity/NetdEventListenerServiceTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -219,7 +219,7 @@ public class NetdEventListenerServiceTest extends TestCase { "time_ms: 0", "time_ms: 0", "transports: 0", "transports: 0", "connect_statistics <", "connect_statistics <", " connect_blocking_count: 0", " connect_blocking_count: 7", " connect_count: 12", " connect_count: 12", " errnos_counters <", " errnos_counters <", " key: 1", " key: 1", Loading