Merge "Move network activity change processing to handler thread" am: df9a2d7e20 am: b3f309ca24
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2606673 Change-Id: Icdf7ab57f0db4834cf157aeb925616cfe5c1014a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
557fbbdf90
1 changed files with 34 additions and 19 deletions
|
|
@ -1703,7 +1703,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
mUserAllContext.registerReceiver(mPackageIntentReceiver, packageIntentFilter,
|
mUserAllContext.registerReceiver(mPackageIntentReceiver, packageIntentFilter,
|
||||||
null /* broadcastPermission */, mHandler);
|
null /* broadcastPermission */, mHandler);
|
||||||
|
|
||||||
mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mHandler, mNetd);
|
mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mNetd);
|
||||||
|
|
||||||
final NetdCallback netdCallback = new NetdCallback();
|
final NetdCallback netdCallback = new NetdCallback();
|
||||||
try {
|
try {
|
||||||
|
|
@ -5879,7 +5879,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_REPORT_NETWORK_ACTIVITY:
|
case EVENT_REPORT_NETWORK_ACTIVITY:
|
||||||
mNetworkActivityTracker.handleReportNetworkActivity();
|
final NetworkActivityParams arg = (NetworkActivityParams) msg.obj;
|
||||||
|
mNetworkActivityTracker.handleReportNetworkActivity(arg);
|
||||||
break;
|
break;
|
||||||
case EVENT_MOBILE_DATA_PREFERRED_UIDS_CHANGED:
|
case EVENT_MOBILE_DATA_PREFERRED_UIDS_CHANGED:
|
||||||
handleMobileDataPreferredUidsChanged();
|
handleMobileDataPreferredUidsChanged();
|
||||||
|
|
@ -11064,11 +11065,34 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
notifyDataStallSuspected(p, network.getNetId());
|
notifyDataStallSuspected(p, network.getNetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to hold the information for network activity change event from idle timers
|
||||||
|
* {@link NetdCallback#onInterfaceClassActivityChanged(boolean, int, long, int)}
|
||||||
|
*/
|
||||||
|
private static final class NetworkActivityParams {
|
||||||
|
public final boolean isActive;
|
||||||
|
// Label used for idle timer. Transport type is used as label.
|
||||||
|
// label is int since NMS was using the identifier as int, and it has not been changed
|
||||||
|
public final int label;
|
||||||
|
public final long timestampNs;
|
||||||
|
// Uid represents the uid that was responsible for waking the radio.
|
||||||
|
// -1 for no uid and uid is -1 if isActive is false.
|
||||||
|
public final int uid;
|
||||||
|
|
||||||
|
NetworkActivityParams(boolean isActive, int label, long timestampNs, int uid) {
|
||||||
|
this.isActive = isActive;
|
||||||
|
this.label = label;
|
||||||
|
this.timestampNs = timestampNs;
|
||||||
|
this.uid = uid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class NetdCallback extends BaseNetdUnsolicitedEventListener {
|
private class NetdCallback extends BaseNetdUnsolicitedEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void onInterfaceClassActivityChanged(boolean isActive, int transportType,
|
public void onInterfaceClassActivityChanged(boolean isActive, int label,
|
||||||
long timestampNs, int uid) {
|
long timestampNs, int uid) {
|
||||||
mNetworkActivityTracker.setAndReportNetworkActive(isActive, transportType, timestampNs);
|
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY,
|
||||||
|
new NetworkActivityParams(isActive, label, timestampNs, uid)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -11103,7 +11127,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
private boolean mNetworkActive;
|
private boolean mNetworkActive;
|
||||||
@GuardedBy("mActiveIdleTimers")
|
@GuardedBy("mActiveIdleTimers")
|
||||||
private final ArrayMap<String, IdleTimerParams> mActiveIdleTimers = new ArrayMap<>();
|
private final ArrayMap<String, IdleTimerParams> mActiveIdleTimers = new ArrayMap<>();
|
||||||
private final Handler mHandler;
|
|
||||||
|
|
||||||
private static class IdleTimerParams {
|
private static class IdleTimerParams {
|
||||||
public final int timeout;
|
public final int timeout;
|
||||||
|
|
@ -11115,17 +11138,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LegacyNetworkActivityTracker(@NonNull Context context, @NonNull Handler handler,
|
LegacyNetworkActivityTracker(@NonNull Context context, @NonNull INetd netd) {
|
||||||
@NonNull INetd netd) {
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mNetd = netd;
|
mNetd = netd;
|
||||||
mHandler = handler;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAndReportNetworkActive(boolean active, int transportType, long tsNanos) {
|
public void handleReportNetworkActivity(NetworkActivityParams activityParams) {
|
||||||
sendDataActivityBroadcast(transportTypeToLegacyType(transportType), active, tsNanos);
|
sendDataActivityBroadcast(transportTypeToLegacyType(activityParams.label),
|
||||||
|
activityParams.isActive, activityParams.timestampNs);
|
||||||
synchronized (mActiveIdleTimers) {
|
synchronized (mActiveIdleTimers) {
|
||||||
mNetworkActive = active;
|
mNetworkActive = activityParams.isActive;
|
||||||
// If there are no idle timers, it means that system is not monitoring
|
// If there are no idle timers, it means that system is not monitoring
|
||||||
// activity, so the system default network for those default network
|
// activity, so the system default network for those default network
|
||||||
// unspecified apps is always considered active.
|
// unspecified apps is always considered active.
|
||||||
|
|
@ -11135,7 +11157,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
// the mActiveIdleTimers should be always not empty. The legacy behavior
|
// the mActiveIdleTimers should be always not empty. The legacy behavior
|
||||||
// is no-op. Remove to refer to mNetworkActive only.
|
// is no-op. Remove to refer to mNetworkActive only.
|
||||||
if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
|
if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
|
||||||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY));
|
reportNetworkActive();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11159,13 +11181,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("mActiveIdleTimers")
|
|
||||||
public void handleReportNetworkActivity() {
|
|
||||||
synchronized (mActiveIdleTimers) {
|
|
||||||
reportNetworkActive();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is deprecated and only to support legacy use cases.
|
// This is deprecated and only to support legacy use cases.
|
||||||
private int transportTypeToLegacyType(int type) {
|
private int transportTypeToLegacyType(int type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue