Merge "Move the implement of getAllCollapsedRatTypes to StatsPullAtomService" am: e48ca58c47
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1960191 Change-Id: Icc2791ae469ad719adbf9d043b2c5cebba0e1875
This commit is contained in:
@@ -55,6 +55,7 @@ package android.app.usage {
|
|||||||
|
|
||||||
public class NetworkStatsManager {
|
public class NetworkStatsManager {
|
||||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void forceUpdate();
|
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void forceUpdate();
|
||||||
|
method public static int getCollapsedRatType(int);
|
||||||
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void notifyNetworkStatus(@NonNull java.util.List<android.net.Network>, @NonNull java.util.List<android.net.NetworkStateSnapshot>, @Nullable String, @NonNull java.util.List<android.net.UnderlyingNetworkInfo>);
|
method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void notifyNetworkStatus(@NonNull java.util.List<android.net.Network>, @NonNull java.util.List<android.net.NetworkStateSnapshot>, @Nullable String, @NonNull java.util.List<android.net.UnderlyingNetworkInfo>);
|
||||||
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForDevice(@NonNull android.net.NetworkTemplate, long, long);
|
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForDevice(@NonNull android.net.NetworkTemplate, long, long);
|
||||||
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTagState(@NonNull android.net.NetworkTemplate, long, long, int, int, int) throws java.lang.SecurityException;
|
method @NonNull @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTagState(@NonNull android.net.NetworkTemplate, long, long, int, int, int) throws java.lang.SecurityException;
|
||||||
|
|||||||
@@ -1123,4 +1123,52 @@ public class NetworkStatsManager {
|
|||||||
throw e.rethrowFromSystemServer();
|
throw e.rethrowFromSystemServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a RAT type representative of a group of RAT types for network statistics.
|
||||||
|
*
|
||||||
|
* Collapse the given Radio Access Technology (RAT) type into a bucket that
|
||||||
|
* is representative of the original RAT type for network statistics. The
|
||||||
|
* mapping mostly corresponds to {@code TelephonyManager#NETWORK_CLASS_BIT_MASK_*}
|
||||||
|
* but with adaptations specific to the virtual types introduced by
|
||||||
|
* networks stats.
|
||||||
|
*
|
||||||
|
* @param ratType An integer defined in {@code TelephonyManager#NETWORK_TYPE_*}.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public static int getCollapsedRatType(int ratType) {
|
||||||
|
switch (ratType) {
|
||||||
|
case TelephonyManager.NETWORK_TYPE_GPRS:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_GSM:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_EDGE:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_IDEN:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_CDMA:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_1xRTT:
|
||||||
|
return TelephonyManager.NETWORK_TYPE_GSM;
|
||||||
|
case TelephonyManager.NETWORK_TYPE_EVDO_0:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_EHRPD:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_UMTS:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_HSDPA:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_HSUPA:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_HSPA:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_HSPAP:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
|
||||||
|
return TelephonyManager.NETWORK_TYPE_UMTS;
|
||||||
|
case TelephonyManager.NETWORK_TYPE_LTE:
|
||||||
|
case TelephonyManager.NETWORK_TYPE_IWLAN:
|
||||||
|
return TelephonyManager.NETWORK_TYPE_LTE;
|
||||||
|
case TelephonyManager.NETWORK_TYPE_NR:
|
||||||
|
return TelephonyManager.NETWORK_TYPE_NR;
|
||||||
|
// Virtual RAT type for 5G NSA mode, see
|
||||||
|
// {@link NetworkStatsManager#NETWORK_TYPE_5G_NSA}.
|
||||||
|
case NetworkStatsManager.NETWORK_TYPE_5G_NSA:
|
||||||
|
return NetworkStatsManager.NETWORK_TYPE_5G_NSA;
|
||||||
|
default:
|
||||||
|
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ import android.os.Build;
|
|||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.telephony.Annotation.NetworkType;
|
import android.telephony.Annotation.NetworkType;
|
||||||
import android.telephony.TelephonyManager;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
|
|
||||||
@@ -59,9 +58,7 @@ import com.android.net.module.util.NetworkStatsUtils;
|
|||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -703,7 +700,8 @@ public final class NetworkTemplate implements Parcelable {
|
|||||||
|
|
||||||
private boolean matchesCollapsedRatType(NetworkIdentity ident) {
|
private boolean matchesCollapsedRatType(NetworkIdentity ident) {
|
||||||
return mRatType == NETWORK_TYPE_ALL
|
return mRatType == NETWORK_TYPE_ALL
|
||||||
|| getCollapsedRatType(mRatType) == getCollapsedRatType(ident.mRatType);
|
|| NetworkStatsManager.getCollapsedRatType(mRatType)
|
||||||
|
== NetworkStatsManager.getCollapsedRatType(ident.mRatType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -746,86 +744,6 @@ public final class NetworkTemplate implements Parcelable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a Radio Access Technology(RAT) type that is representative of a group of RAT types.
|
|
||||||
* The mapping is corresponding to {@code TelephonyManager#NETWORK_CLASS_BIT_MASK_*}.
|
|
||||||
*
|
|
||||||
* @param ratType An integer defined in {@code TelephonyManager#NETWORK_TYPE_*}.
|
|
||||||
*
|
|
||||||
* @hide
|
|
||||||
*/
|
|
||||||
// TODO: 1. Consider move this to TelephonyManager if used by other modules.
|
|
||||||
// 2. Consider make this configurable.
|
|
||||||
// 3. Use TelephonyManager APIs when available.
|
|
||||||
// TODO: @SystemApi when ready.
|
|
||||||
public static int getCollapsedRatType(int ratType) {
|
|
||||||
switch (ratType) {
|
|
||||||
case TelephonyManager.NETWORK_TYPE_GPRS:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_GSM:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_EDGE:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_IDEN:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_CDMA:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_1xRTT:
|
|
||||||
return TelephonyManager.NETWORK_TYPE_GSM;
|
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_0:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_A:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_EVDO_B:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_EHRPD:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_UMTS:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_HSDPA:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_HSUPA:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_HSPA:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_HSPAP:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
|
|
||||||
return TelephonyManager.NETWORK_TYPE_UMTS;
|
|
||||||
case TelephonyManager.NETWORK_TYPE_LTE:
|
|
||||||
case TelephonyManager.NETWORK_TYPE_IWLAN:
|
|
||||||
return TelephonyManager.NETWORK_TYPE_LTE;
|
|
||||||
case TelephonyManager.NETWORK_TYPE_NR:
|
|
||||||
return TelephonyManager.NETWORK_TYPE_NR;
|
|
||||||
// Virtual RAT type for 5G NSA mode, see
|
|
||||||
// {@link NetworkStatsManager#NETWORK_TYPE_5G_NSA}.
|
|
||||||
case NetworkStatsManager.NETWORK_TYPE_5G_NSA:
|
|
||||||
return NetworkStatsManager.NETWORK_TYPE_5G_NSA;
|
|
||||||
default:
|
|
||||||
return TelephonyManager.NETWORK_TYPE_UNKNOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return all supported collapsed RAT types that could be returned by
|
|
||||||
* {@link #getCollapsedRatType(int)}.
|
|
||||||
*
|
|
||||||
* @hide
|
|
||||||
*/
|
|
||||||
// TODO: @SystemApi when ready.
|
|
||||||
@NonNull
|
|
||||||
public static final int[] getAllCollapsedRatTypes() {
|
|
||||||
final int[] ratTypes = TelephonyManager.getAllNetworkTypes();
|
|
||||||
final HashSet<Integer> collapsedRatTypes = new HashSet<>();
|
|
||||||
for (final int ratType : ratTypes) {
|
|
||||||
collapsedRatTypes.add(NetworkTemplate.getCollapsedRatType(ratType));
|
|
||||||
}
|
|
||||||
// Add NETWORK_TYPE_5G_NSA to the returned list since 5G NSA is a virtual RAT type and
|
|
||||||
// it is not in TelephonyManager#NETWORK_TYPE_* constants.
|
|
||||||
// See {@link NetworkStatsManager#NETWORK_TYPE_5G_NSA}.
|
|
||||||
collapsedRatTypes.add(
|
|
||||||
NetworkTemplate.getCollapsedRatType(NetworkStatsManager.NETWORK_TYPE_5G_NSA));
|
|
||||||
// Ensure that unknown type is returned.
|
|
||||||
collapsedRatTypes.add(TelephonyManager.NETWORK_TYPE_UNKNOWN);
|
|
||||||
return toIntArray(collapsedRatTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private static int[] toIntArray(@NonNull Collection<Integer> list) {
|
|
||||||
final int[] array = new int[list.size()];
|
|
||||||
int i = 0;
|
|
||||||
for (final Integer item : list) {
|
|
||||||
array[i++] = item;
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if matches Wi-Fi network template.
|
* Check if matches Wi-Fi network template.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
/**
|
/**
|
||||||
* When enabled, all mobile data is reported under {@link NetworkTemplate#NETWORK_TYPE_ALL}.
|
* When enabled, all mobile data is reported under {@link NetworkTemplate#NETWORK_TYPE_ALL}.
|
||||||
* When disabled, mobile data is broken down by a granular ratType representative of the
|
* When disabled, mobile data is broken down by a granular ratType representative of the
|
||||||
* actual ratType. {@see NetworkTemplate#getCollapsedRatType}.
|
* actual ratType. {@see android.app.usage.NetworkStatsManager#getCollapsedRatType}.
|
||||||
* Enabling this decreases the level of detail but saves performance, disk space and
|
* Enabling this decreases the level of detail but saves performance, disk space and
|
||||||
* amount of data logged.
|
* amount of data logged.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
package com.android.server.net;
|
package com.android.server.net;
|
||||||
|
|
||||||
import static android.app.usage.NetworkStatsManager.NETWORK_TYPE_5G_NSA;
|
import static android.app.usage.NetworkStatsManager.NETWORK_TYPE_5G_NSA;
|
||||||
import static android.net.NetworkTemplate.getCollapsedRatType;
|
import static android.app.usage.NetworkStatsManager.getCollapsedRatType;
|
||||||
import static android.telephony.TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED;
|
import static android.telephony.TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED;
|
||||||
import static android.telephony.TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA;
|
import static android.telephony.TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA;
|
||||||
import static android.telephony.TelephonyManager.NETWORK_TYPE_LTE;
|
import static android.telephony.TelephonyManager.NETWORK_TYPE_LTE;
|
||||||
@@ -57,7 +57,7 @@ public class NetworkStatsSubscriptionsMonitor extends
|
|||||||
*
|
*
|
||||||
* @param subscriberId IMSI of the subscription.
|
* @param subscriberId IMSI of the subscription.
|
||||||
* @param collapsedRatType collapsed RAT type.
|
* @param collapsedRatType collapsed RAT type.
|
||||||
* @see android.net.NetworkTemplate#getCollapsedRatType(int).
|
* @see android.app.usage.NetworkStatsManager#getCollapsedRatType(int).
|
||||||
*/
|
*/
|
||||||
void onCollapsedRatTypeChanged(@NonNull String subscriberId,
|
void onCollapsedRatTypeChanged(@NonNull String subscriberId,
|
||||||
@Annotation.NetworkType int collapsedRatType);
|
@Annotation.NetworkType int collapsedRatType);
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import static android.net.NetworkTemplate.MATCH_WIFI;
|
|||||||
import static android.net.NetworkTemplate.OEM_MANAGED_ALL;
|
import static android.net.NetworkTemplate.OEM_MANAGED_ALL;
|
||||||
import static android.net.NetworkTemplate.OEM_MANAGED_PAID;
|
import static android.net.NetworkTemplate.OEM_MANAGED_PAID;
|
||||||
import static android.net.NetworkTemplate.OEM_MANAGED_PRIVATE;
|
import static android.net.NetworkTemplate.OEM_MANAGED_PRIVATE;
|
||||||
import static android.net.NetworkTemplate.getAllCollapsedRatTypes;
|
|
||||||
import static android.os.Debug.getIonHeapsSizeKb;
|
import static android.os.Debug.getIonHeapsSizeKb;
|
||||||
import static android.os.Process.LAST_SHARED_APPLICATION_GID;
|
import static android.os.Process.LAST_SHARED_APPLICATION_GID;
|
||||||
import static android.os.Process.getUidForPid;
|
import static android.os.Process.getUidForPid;
|
||||||
@@ -1383,6 +1382,27 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return all supported collapsed RAT types that could be returned by
|
||||||
|
* {@link android.app.usage.NetworkStatsManager#getCollapsedRatType(int)}.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
private static int[] getAllCollapsedRatTypes() {
|
||||||
|
final int[] ratTypes = TelephonyManager.getAllNetworkTypes();
|
||||||
|
final HashSet<Integer> collapsedRatTypes = new HashSet<>();
|
||||||
|
for (final int ratType : ratTypes) {
|
||||||
|
collapsedRatTypes.add(NetworkStatsManager.getCollapsedRatType(ratType));
|
||||||
|
}
|
||||||
|
// Add NETWORK_TYPE_5G_NSA to the returned list since 5G NSA is a virtual RAT type and
|
||||||
|
// it is not in TelephonyManager#NETWORK_TYPE_* constants.
|
||||||
|
// See {@link NetworkStatsManager#NETWORK_TYPE_5G_NSA}.
|
||||||
|
collapsedRatTypes.add(
|
||||||
|
NetworkStatsManager.getCollapsedRatType(NetworkStatsManager.NETWORK_TYPE_5G_NSA));
|
||||||
|
// Ensure that unknown type is returned.
|
||||||
|
collapsedRatTypes.add(TelephonyManager.NETWORK_TYPE_UNKNOWN);
|
||||||
|
return com.android.net.module.util.CollectionUtils.toIntArray(collapsedRatTypes);
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull private NetworkStats sliceNetworkStatsByUid(@NonNull NetworkStats stats) {
|
@NonNull private NetworkStats sliceNetworkStatsByUid(@NonNull NetworkStats stats) {
|
||||||
return sliceNetworkStats(stats,
|
return sliceNetworkStats(stats,
|
||||||
(entry) -> {
|
(entry) -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user