From 563dc4558126e7a9505306d49cb7e0f728e7ea29 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 1 Sep 2017 17:12:34 +0900 Subject: [PATCH] Switch tethering stats from the unix socket to binder. Bug: 32163131 Bug: 64995262 Test: builds Change-Id: I673d76a8b0981302b5f6a14e97999cd7676d83ed --- services/core/Android.mk | 5 ++- .../server/NetworkManagementService.java | 41 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/services/core/Android.mk b/services/core/Android.mk index 7fca21f71a6af..f61fd550885b3 100644 --- a/services/core/Android.mk +++ b/services/core/Android.mk @@ -4,7 +4,10 @@ include $(CLEAR_VARS) LOCAL_MODULE := services.core -LOCAL_AIDL_INCLUDES := system/netd/server/binder +LOCAL_AIDL_INCLUDES := \ + frameworks/native/aidl/binder \ + system/netd/server/binder + LOCAL_SRC_FILES += \ $(call all-java-files-under,java) \ diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 3e4453204b14b..caa2d5112bf06 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -76,6 +76,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.INetworkActivityListener; import android.os.INetworkManagementService; +import android.os.PersistableBundle; import android.os.PowerManager; import android.os.Process; import android.os.RemoteCallbackList; @@ -1897,38 +1898,34 @@ public class NetworkManagementService extends INetworkManagementService.Stub return new NetworkStats(SystemClock.elapsedRealtime(), 0); } - final NativeDaemonEvent[] events; + final PersistableBundle bundle; try { - events = mConnector.executeForList("bandwidth", "gettetherstats"); - } catch (NativeDaemonConnectorException e) { - throw e.rethrowAsParcelableException(); + bundle = mNetdService.tetherGetStats(); + } catch (RemoteException | ServiceSpecificException e) { + throw new IllegalStateException("problem parsing tethering stats: ", e); } - final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1); - for (NativeDaemonEvent event : events) { - if (event.getCode() != TetheringStatsListResult) continue; - // 114 ifaceIn ifaceOut rx_bytes rx_packets tx_bytes tx_packets - final StringTokenizer tok = new StringTokenizer(event.getMessage()); + final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), + bundle.size()); + final NetworkStats.Entry entry = new NetworkStats.Entry(); + + for (String iface : bundle.keySet()) { + long[] statsArray = bundle.getLongArray(iface); try { - final String ifaceIn = tok.nextToken(); - final String ifaceOut = tok.nextToken(); - - final NetworkStats.Entry entry = new NetworkStats.Entry(); - entry.iface = ifaceOut; + entry.iface = iface; entry.uid = UID_TETHERING; entry.set = SET_DEFAULT; entry.tag = TAG_NONE; - entry.rxBytes = Long.parseLong(tok.nextToken()); - entry.rxPackets = Long.parseLong(tok.nextToken()); - entry.txBytes = Long.parseLong(tok.nextToken()); - entry.txPackets = Long.parseLong(tok.nextToken()); + entry.rxBytes = statsArray[INetd.TETHER_STATS_RX_BYTES]; + entry.rxPackets = statsArray[INetd.TETHER_STATS_RX_PACKETS]; + entry.txBytes = statsArray[INetd.TETHER_STATS_TX_BYTES]; + entry.txPackets = statsArray[INetd.TETHER_STATS_TX_PACKETS]; stats.combineValues(entry); - } catch (NoSuchElementException e) { - throw new IllegalStateException("problem parsing tethering stats: " + event); - } catch (NumberFormatException e) { - throw new IllegalStateException("problem parsing tethering stats: " + event); + } catch (ArrayIndexOutOfBoundsException e) { + throw new IllegalStateException("invalid tethering stats for " + iface, e); } } + return stats; }