Merge changes I3180050c,Ie393451e into rvc-dev am: 4f0fea0c82 am: 19ab21cabd
Original change: undetermined Change-Id: Id09ba257ac32a6b96f6e8eaf18c68e59eb327dc3
This commit is contained in:
@@ -19,6 +19,8 @@ package com.android.server.stats.pull;
|
|||||||
import static android.app.AppOpsManager.OP_FLAG_SELF;
|
import static android.app.AppOpsManager.OP_FLAG_SELF;
|
||||||
import static android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED;
|
import static android.app.AppOpsManager.OP_FLAG_TRUSTED_PROXIED;
|
||||||
import static android.app.usage.NetworkStatsManager.FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN;
|
import static android.app.usage.NetworkStatsManager.FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN;
|
||||||
|
import static android.app.usage.NetworkStatsManager.FLAG_POLL_FORCE;
|
||||||
|
import static android.app.usage.NetworkStatsManager.FLAG_POLL_ON_OPEN;
|
||||||
import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
|
import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
|
||||||
import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
|
import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||||
@@ -243,11 +245,6 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
private static final String DANGEROUS_PERMISSION_STATE_SAMPLE_RATE =
|
private static final String DANGEROUS_PERMISSION_STATE_SAMPLE_RATE =
|
||||||
"dangerous_permission_state_sample_rate";
|
"dangerous_permission_state_sample_rate";
|
||||||
|
|
||||||
private final Object mNetworkStatsLock = new Object();
|
|
||||||
@GuardedBy("mNetworkStatsLock")
|
|
||||||
@Nullable
|
|
||||||
private INetworkStatsSession mNetworkStatsSession;
|
|
||||||
|
|
||||||
private final Object mThermalLock = new Object();
|
private final Object mThermalLock = new Object();
|
||||||
@GuardedBy("mThermalLock")
|
@GuardedBy("mThermalLock")
|
||||||
private IThermalService mThermalService;
|
private IThermalService mThermalService;
|
||||||
@@ -696,32 +693,26 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
/**
|
/**
|
||||||
* Return the {@code INetworkStatsSession} object that holds the necessary properties needed
|
* Return the {@code INetworkStatsSession} object that holds the necessary properties needed
|
||||||
* for the subsequent queries to {@link com.android.server.net.NetworkStatsService}. Or
|
* for the subsequent queries to {@link com.android.server.net.NetworkStatsService}. Or
|
||||||
* null if the service or binder cannot be obtained.
|
* null if the service or binder cannot be obtained. Calling this method will trigger poll
|
||||||
|
* in NetworkStatsService with once per 15 seconds rate-limit, unless {@code bypassRateLimit}
|
||||||
|
* is set to true. This is needed in {@link #getUidNetworkStatsSnapshotForTemplate}, where
|
||||||
|
* bypassing the limit is necessary for perfd to supply realtime stats to developers looking at
|
||||||
|
* the network usage of their app.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
private INetworkStatsSession getNetworkStatsSession() {
|
private INetworkStatsSession getNetworkStatsSession(boolean bypassRateLimit) {
|
||||||
synchronized (mNetworkStatsLock) {
|
final INetworkStatsService networkStatsService =
|
||||||
if (mNetworkStatsSession != null) return mNetworkStatsSession;
|
INetworkStatsService.Stub.asInterface(
|
||||||
|
ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
|
||||||
|
if (networkStatsService == null) return null;
|
||||||
|
|
||||||
final INetworkStatsService networkStatsService =
|
try {
|
||||||
INetworkStatsService.Stub.asInterface(
|
return networkStatsService.openSessionForUsageStats(
|
||||||
ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
|
FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN | (bypassRateLimit ? FLAG_POLL_FORCE
|
||||||
if (networkStatsService == null) return null;
|
: FLAG_POLL_ON_OPEN), mContext.getOpPackageName());
|
||||||
|
} catch (RemoteException e) {
|
||||||
try {
|
Slog.e(TAG, "Cannot get NetworkStats session", e);
|
||||||
networkStatsService.asBinder().linkToDeath(() -> {
|
return null;
|
||||||
synchronized (mNetworkStatsLock) {
|
|
||||||
mNetworkStatsSession = null;
|
|
||||||
}
|
|
||||||
}, /* flags */ 0);
|
|
||||||
mNetworkStatsSession = networkStatsService.openSessionForUsageStats(
|
|
||||||
FLAG_AUGMENT_WITH_SUBSCRIPTION_PLAN, mContext.getOpPackageName());
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
Slog.e(TAG, "Cannot get NetworkStats session", e);
|
|
||||||
mNetworkStatsSession = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return mNetworkStatsSession;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1032,7 +1023,13 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
final long bucketDuration = Settings.Global.getLong(mContext.getContentResolver(),
|
final long bucketDuration = Settings.Global.getLong(mContext.getContentResolver(),
|
||||||
NETSTATS_UID_BUCKET_DURATION, NETSTATS_UID_DEFAULT_BUCKET_DURATION_MS);
|
NETSTATS_UID_BUCKET_DURATION, NETSTATS_UID_DEFAULT_BUCKET_DURATION_MS);
|
||||||
try {
|
try {
|
||||||
final NetworkStats stats = getNetworkStatsSession().getSummaryForAllUid(template,
|
// TODO (b/156313635): This is short-term hack to allow perfd gets updated networkStats
|
||||||
|
// history when query in every second in order to show realtime statistics. However,
|
||||||
|
// this is not a good long-term solution since NetworkStatsService will make frequent
|
||||||
|
// I/O and also block main thread when polling.
|
||||||
|
// Consider making perfd queries NetworkStatsService directly.
|
||||||
|
final NetworkStats stats = getNetworkStatsSession(template.getMatchRule()
|
||||||
|
== NetworkTemplate.MATCH_WIFI_WILDCARD).getSummaryForAllUid(template,
|
||||||
currentTimeInMillis - elapsedMillisSinceBoot - bucketDuration,
|
currentTimeInMillis - elapsedMillisSinceBoot - bucketDuration,
|
||||||
currentTimeInMillis, includeTags);
|
currentTimeInMillis, includeTags);
|
||||||
return stats;
|
return stats;
|
||||||
|
|||||||
Reference in New Issue
Block a user