From 9f0146a584235e33e24237ee5303ca4bbe3b7ef3 Mon Sep 17 00:00:00 2001 From: junyulai Date: Thu, 14 May 2020 15:07:21 +0800 Subject: [PATCH] Refactor puller of {Mobile|Wifi}BytesTransfer(ByFgBg) This is a no-op refactoring that minimize the change needed to add new puller of supporting data usage per rat type atom in the follow-up patches. (CP of CL from master to rvc-dev) Bug: 129082217 Test: adb shell cmd stats pull-source 10000~10003 Test: atest android.cts.statsd.atom.UidAtomTests#testMobileBytesTransfer Test: atest android.cts.statsd.atom.UidAtomTests#testMobileBytesTransferByFgBg Change-Id: If544dd5a1dfc10bc70bf381f79a938f7d6b1dcb7 Merged-In: If544dd5a1dfc10bc70bf381f79a938f7d6b1dcb7 --- .../stats/pull/StatsPullAtomService.java | 71 ++++++++++--------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 12309f4077862..90eb7ac22793d 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -320,17 +320,10 @@ public class StatsPullAtomService extends SystemService { try { switch (atomTag) { case FrameworkStatsLog.WIFI_BYTES_TRANSFER: - return pullDataBytesTransfer(atomTag, data, TRANSPORT_WIFI, - /*withFgbg=*/ false); case FrameworkStatsLog.WIFI_BYTES_TRANSFER_BY_FG_BG: - return pullDataBytesTransfer(atomTag, data, TRANSPORT_WIFI, - /*withFgbg=*/ true); case FrameworkStatsLog.MOBILE_BYTES_TRANSFER: - return pullDataBytesTransfer(atomTag, data, TRANSPORT_CELLULAR, - /*withFgbg=*/ false); case FrameworkStatsLog.MOBILE_BYTES_TRANSFER_BY_FG_BG: - return pullDataBytesTransfer(atomTag, data, TRANSPORT_CELLULAR, - /*withFgbg=*/ true); + return pullDataBytesTransfer(atomTag, data); case FrameworkStatsLog.BLUETOOTH_BYTES_TRANSFER: return pullBluetoothBytesTransfer(atomTag, data); case FrameworkStatsLog.KERNEL_WAKELOCK: @@ -619,10 +612,14 @@ public class StatsPullAtomService extends SystemService { Slog.d(TAG, "Registering NetworkStats pullers with statsd"); } // Initialize NetworkStats baselines. - mNetworkStatsBaselines.addAll(collectWifiBytesTransferSnapshot(/*withFgbg=*/ false)); - mNetworkStatsBaselines.addAll(collectWifiBytesTransferSnapshot(/*withFgbg=*/ true)); - mNetworkStatsBaselines.addAll(collectMobileBytesTransferSnapshot(/*withFgbg=*/ false)); - mNetworkStatsBaselines.addAll(collectMobileBytesTransferSnapshot(/*withFgbg=*/ true)); + mNetworkStatsBaselines.addAll( + collectNetworkStatsSnapshotForAtom(FrameworkStatsLog.WIFI_BYTES_TRANSFER)); + mNetworkStatsBaselines.addAll( + collectNetworkStatsSnapshotForAtom(FrameworkStatsLog.WIFI_BYTES_TRANSFER_BY_FG_BG)); + mNetworkStatsBaselines.addAll( + collectNetworkStatsSnapshotForAtom(FrameworkStatsLog.MOBILE_BYTES_TRANSFER)); + mNetworkStatsBaselines.addAll(collectNetworkStatsSnapshotForAtom( + FrameworkStatsLog.MOBILE_BYTES_TRANSFER_BY_FG_BG)); registerWifiBytesTransfer(); registerWifiBytesTransferBackground(); @@ -780,36 +777,42 @@ public class StatsPullAtomService extends SystemService { } @NonNull - private List collectWifiBytesTransferSnapshot(boolean withFgbg) { + private List collectNetworkStatsSnapshotForAtom(int atomTag) { + switch(atomTag) { + case FrameworkStatsLog.WIFI_BYTES_TRANSFER: + return collectUidNetworkStatsSnapshot(TRANSPORT_WIFI, /*withFgbg=*/false); + case FrameworkStatsLog.WIFI_BYTES_TRANSFER_BY_FG_BG: + return collectUidNetworkStatsSnapshot(TRANSPORT_WIFI, /*withFgbg=*/true); + case FrameworkStatsLog.MOBILE_BYTES_TRANSFER: + return collectUidNetworkStatsSnapshot(TRANSPORT_CELLULAR, /*withFgbg=*/false); + case FrameworkStatsLog.MOBILE_BYTES_TRANSFER_BY_FG_BG: + return collectUidNetworkStatsSnapshot(TRANSPORT_CELLULAR, /*withFgbg=*/true); + default: + throw new IllegalArgumentException("Unknown atomTag " + atomTag); + } + } + + // Get a snapshot of Uid NetworkStats. The snapshot contains NetworkStats with its associated + // information, and wrapped by a list since multiple NetworkStatsExt objects might be collected. + @NonNull + private List collectUidNetworkStatsSnapshot(int transport, boolean withFgbg) { final List ret = new ArrayList<>(); - final NetworkTemplate template = NetworkTemplate.buildTemplateWifiWildcard(); + final NetworkTemplate template = (transport == TRANSPORT_CELLULAR + ? NetworkTemplate.buildTemplateMobileWithRatType( + /*subscriptionId=*/null, NETWORK_TYPE_ALL) + : NetworkTemplate.buildTemplateWifiWildcard()); + final NetworkStats stats = getUidNetworkStatsSnapshot(template, withFgbg); if (stats != null) { - ret.add(new NetworkStatsExt(stats, TRANSPORT_WIFI, withFgbg)); + ret.add(new NetworkStatsExt(stats, transport, withFgbg)); } return ret; } - // Get a snapshot of mobile data usage. The snapshot contains NetworkStats with its associated - // information, and wrapped by a list since multiple NetworkStatsExt objects might be collected. - // TODO: Slice NetworkStats to multiple objects by RAT type or subscription. - @NonNull - private List collectMobileBytesTransferSnapshot(boolean withFgbg) { - final List ret = new ArrayList<>(); - final NetworkTemplate template = - NetworkTemplate.buildTemplateMobileWithRatType(null, NETWORK_TYPE_ALL); - final NetworkStats stats = getUidNetworkStatsSnapshot(template, withFgbg); - if (stats != null) { - ret.add(new NetworkStatsExt(stats, TRANSPORT_CELLULAR, withFgbg)); - } - return ret; - } private int pullDataBytesTransfer( - int atomTag, @NonNull List pulledData, int transport, boolean withFgbg) { - final List current = - (transport == TRANSPORT_CELLULAR ? collectMobileBytesTransferSnapshot(withFgbg) - : collectWifiBytesTransferSnapshot(withFgbg)); + int atomTag, @NonNull List pulledData) { + final List current = collectNetworkStatsSnapshotForAtom(atomTag); if (current == null) { Slog.e(TAG, "current snapshot is null for " + atomTag + ", return."); @@ -824,7 +827,7 @@ public class StatsPullAtomService extends SystemService { // skip reporting anything since the snapshot is invalid. if (baseline == null) { Slog.e(TAG, "baseline is null for " + atomTag + ", transport=" - + item.transport + " , withFgbg=" + withFgbg + ", return."); + + item.transport + " , withFgbg=" + item.withFgbg + ", return."); return StatsManager.PULL_SKIP; } final NetworkStatsExt diff = new NetworkStatsExt(item.stats.subtract(