Enable delay destroy socket as default

delay_destroy_frozen_sockets_version is rolled out to public 100%.
So this CL enables this flag as default with kill switch.
This flag is no-op if destroy_frozen_sockets_version is disabled, and
destroy_frozen_sockets_version is also rolled out to public 100%.
So this CL does not change any behabior on the production devices.

Upcoming CLs will update CS to destroy sockets of apps that are under
FIREWALL_CHAIN_BACKGROUND restriction as well.
So this CL renames flag name from delay_destroy_frozen_sockets_version
to delay_destroy_sockets which is not specific to frozen apps.

Bug: 300681644
Test: TH
Change-Id: Icb9edff4e517fca57408d7d690fe9e172754c35e
This commit is contained in:
Motomu Utsumi 2024-05-13 17:56:18 +09:00
commit 390be06f64
4 changed files with 23 additions and 16 deletions

View file

@ -120,6 +120,7 @@ import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPer
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermissionOr;
import static com.android.net.module.util.PermissionUtils.hasAnyPermissionOf;
import static com.android.server.ConnectivityStatsLog.CONNECTIVITY_STATE_SAMPLE;
import static com.android.server.connectivity.ConnectivityFlags.DELAY_DESTROY_SOCKETS;
import static com.android.server.connectivity.ConnectivityFlags.REQUEST_RESTRICTED_WIFI;
import static com.android.server.connectivity.ConnectivityFlags.INGRESS_TO_VPN_ADDRESS_FILTERING;
@ -998,8 +999,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
// Flag to enable the feature of closing frozen app sockets.
private final boolean mDestroyFrozenSockets;
// Flag to optimize closing frozen app sockets by waiting for the cellular modem to wake up.
private final boolean mDelayDestroyFrozenSockets;
// Flag to optimize closing app sockets by waiting for the cellular modem to wake up.
private final boolean mDelayDestroySockets;
// Flag to allow SysUI to receive connectivity reports for wifi picker UI.
private final boolean mAllowSysUiConnectivityReports;
@ -1954,8 +1955,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
mDestroyFrozenSockets = mDeps.isAtLeastV() || (mDeps.isAtLeastU()
&& mDeps.isFeatureEnabled(context, KEY_DESTROY_FROZEN_SOCKETS_VERSION));
mDelayDestroyFrozenSockets = mDeps.isAtLeastU()
&& mDeps.isFeatureEnabled(context, DELAY_DESTROY_FROZEN_SOCKETS_VERSION);
mDelayDestroySockets = mDeps.isFeatureNotChickenedOut(context, DELAY_DESTROY_SOCKETS);
mAllowSysUiConnectivityReports = mDeps.isFeatureNotChickenedOut(
mContext, ALLOW_SYSUI_CONNECTIVITY_REPORTS);
if (mDestroyFrozenSockets) {
@ -3364,7 +3364,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
return;
}
if (mDelayDestroyFrozenSockets && isCellNetworkIdle()) {
if (mDelayDestroySockets && isCellNetworkIdle()) {
// Delay closing sockets to avoid waking the cell modem up.
// Wi-Fi network state is not considered since waking Wi-Fi modem up is much cheaper
// than waking cell modem up.
@ -3403,7 +3403,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
isCellNetworkActivity = params.label == TRANSPORT_CELLULAR;
}
if (mDelayDestroyFrozenSockets
if (mDelayDestroySockets
&& params.isActive
&& isCellNetworkActivity
&& !mPendingFrozenUids.isEmpty()) {
@ -3435,7 +3435,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
pw.println("CloseFrozenAppSockets:");
pw.increaseIndent();
pw.print("mDestroyFrozenSockets="); pw.println(mDestroyFrozenSockets);
pw.print("mDelayDestroyFrozenSockets="); pw.println(mDelayDestroyFrozenSockets);
pw.print("mDelayDestroySockets="); pw.println(mDelayDestroySockets);
pw.print("mPendingFrozenUids="); pw.println(mPendingFrozenUids);
pw.decreaseIndent();
}
@ -3462,9 +3462,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
@VisibleForTesting
static final String KEY_DESTROY_FROZEN_SOCKETS_VERSION = "destroy_frozen_sockets_version";
@VisibleForTesting
static final String DELAY_DESTROY_FROZEN_SOCKETS_VERSION =
"delay_destroy_frozen_sockets_version";
@VisibleForTesting
public static final String ALLOW_SYSUI_CONNECTIVITY_REPORTS =

View file

@ -44,6 +44,8 @@ public final class ConnectivityFlags {
public static final String BACKGROUND_FIREWALL_CHAIN = "background_firewall_chain";
public static final String DELAY_DESTROY_SOCKETS = "delay_destroy_sockets";
private boolean mNoRematchAllRequestsOnRegister;
/**

View file

@ -163,7 +163,6 @@ import static android.telephony.DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH;
import static android.telephony.DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
import static com.android.server.ConnectivityService.ALLOW_SATALLITE_NETWORK_FALLBACK;
import static com.android.server.ConnectivityService.DELAY_DESTROY_FROZEN_SOCKETS_VERSION;
import static com.android.net.module.util.DeviceConfigUtils.TETHERING_MODULE_NAME;
import static com.android.server.ConnectivityService.ALLOW_SYSUI_CONNECTIVITY_REPORTS;
import static com.android.server.ConnectivityService.KEY_DESTROY_FROZEN_SOCKETS_VERSION;
@ -178,6 +177,7 @@ import static com.android.server.ConnectivityServiceTestUtils.transportToLegacyT
import static com.android.server.NetworkAgentWrapper.CallbackType.OnQosCallbackRegister;
import static com.android.server.NetworkAgentWrapper.CallbackType.OnQosCallbackUnregister;
import static com.android.server.connectivity.ConnectivityFlags.BACKGROUND_FIREWALL_CHAIN;
import static com.android.server.connectivity.ConnectivityFlags.DELAY_DESTROY_SOCKETS;
import static com.android.server.connectivity.ConnectivityFlags.INGRESS_TO_VPN_ADDRESS_FILTERING;
import static com.android.testutils.Cleanup.testAndCleanup;
import static com.android.testutils.ConcurrentUtils.await;
@ -2169,8 +2169,6 @@ public class ConnectivityServiceTest {
return true;
case KEY_DESTROY_FROZEN_SOCKETS_VERSION:
return true;
case DELAY_DESTROY_FROZEN_SOCKETS_VERSION:
return true;
default:
return super.isFeatureEnabled(context, name);
}
@ -2187,6 +2185,8 @@ public class ConnectivityServiceTest {
return true;
case BACKGROUND_FIREWALL_CHAIN:
return true;
case DELAY_DESTROY_SOCKETS:
return true;
default:
return super.isFeatureNotChickenedOut(context, name);
}

View file

@ -157,11 +157,11 @@ open class CSTest {
it[ConnectivityFlags.NO_REMATCH_ALL_REQUESTS_ON_REGISTER] = true
it[ConnectivityFlags.REQUEST_RESTRICTED_WIFI] = true
it[ConnectivityService.KEY_DESTROY_FROZEN_SOCKETS_VERSION] = true
it[ConnectivityService.DELAY_DESTROY_FROZEN_SOCKETS_VERSION] = true
it[ConnectivityService.ALLOW_SYSUI_CONNECTIVITY_REPORTS] = true
it[ConnectivityService.ALLOW_SATALLITE_NETWORK_FALLBACK] = true
it[ConnectivityFlags.INGRESS_TO_VPN_ADDRESS_FILTERING] = true
it[ConnectivityFlags.BACKGROUND_FIREWALL_CHAIN] = true
it[ConnectivityFlags.DELAY_DESTROY_SOCKETS] = true
}
fun setFeatureEnabled(flag: String, enabled: Boolean) = enabledFeatures.set(flag, enabled)
@ -171,7 +171,11 @@ open class CSTest {
val contentResolver = makeMockContentResolver(context)
val PRIMARY_USER = 0
val PRIMARY_USER_INFO = UserInfo(PRIMARY_USER, "" /* name */, UserInfo.FLAG_PRIMARY)
val PRIMARY_USER_INFO = UserInfo(
PRIMARY_USER,
"", // name
UserInfo.FLAG_PRIMARY
)
val PRIMARY_USER_HANDLE = UserHandle(PRIMARY_USER)
val userManager = makeMockUserManager(PRIMARY_USER_INFO, PRIMARY_USER_HANDLE)
val activityManager = makeActivityManager()
@ -186,7 +190,11 @@ open class CSTest {
val bpfNetMaps = mock<BpfNetMaps>()
val clatCoordinator = mock<ClatCoordinator>()
val networkRequestStateStatsMetrics = mock<NetworkRequestStateStatsMetrics>()
val proxyTracker = ProxyTracker(context, mock<Handler>(), 16 /* EVENT_PROXY_HAS_CHANGED */)
val proxyTracker = ProxyTracker(
context,
mock<Handler>(),
16 // EVENT_PROXY_HAS_CHANGED
)
val systemConfigManager = makeMockSystemConfigManager()
val batteryStats = mock<IBatteryStats>()
val batteryManager = BatteryStatsManager(batteryStats)