Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f0e8dda authored by Chalard Jean's avatar Chalard Jean
Browse files

[NS A28] Move setting the default network out of the rematch loop.

Bug: 113554781
Test: FrameworkNetTests NetworkStackTests
Change-Id: I02d85f17bf0ea37ae173f306f5a47d7551773c3a
parent 442a1ca0
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -36,4 +36,12 @@ public class ObjectUtils {
            return (b != null) ? -1 : 0;
        }
    }

    /**
     * Returns its first argument if non-null, and the second otherwise.
     */
    @Nullable
    public static <T> T getOrElse(@Nullable final T object, @Nullable final T otherwise) {
        return null != object ? object : otherwise;
    }
}
+24 −16
Original line number Diff line number Diff line
@@ -172,6 +172,7 @@ import com.android.internal.util.AsyncChannel;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.MessageUtils;
import com.android.internal.util.ObjectUtils;
import com.android.internal.util.XmlUtils;
import com.android.server.am.BatteryStatsService;
import com.android.server.connectivity.AutodestructReference;
@@ -6457,6 +6458,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
        void addRematchedNetwork(@NonNull final NetworkBgStatePair network) {
            mRematchedNetworks.add(network);
        }

        // Will return null if this reassignment does not change the network assigned to
        // the passed request, or if it changes this request to not have a satisfier any more.
        @Nullable private NetworkAgentInfo getNewSatisfier(@NonNull final NetworkRequestInfo nri) {
            for (final RequestReassignment event : getRequestReassignments()) {
                if (nri == event.mRequest) return event.mNewNetwork;
            }
            return null;
        }
    }

    private ArrayMap<NetworkRequestInfo, NetworkAgentInfo> computeRequestReassignmentForNetwork(
@@ -6523,8 +6533,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
            @NonNull final NetworkAgentInfo newNetwork, final long now) {
        ensureRunningOnConnectivityServiceThread();
        if (!newNetwork.everConnected) return;
        boolean isNewDefault = false;
        NetworkAgentInfo oldDefaultNetwork = null;

        changes.addRematchedNetwork(new NetworkReassignment.NetworkBgStatePair(newNetwork,
                newNetwork.isBackgroundNetwork()));
@@ -6566,8 +6574,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
                // netid->request mapping to each provider?
                sendUpdatedScoreToFactories(nri.request, newSatisfier);
                if (isDefaultRequest(nri)) {
                    isNewDefault = true;
                    oldDefaultNetwork = previousSatisfier;
                    if (previousSatisfier != null) {
                        mLingerMonitor.noteLingerDefaultNetwork(previousSatisfier, newSatisfier);
                    }
@@ -6604,17 +6610,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
                callCallbackForRequest(nri, newNetwork, ConnectivityManager.CALLBACK_LOST, 0);
            }
        }

        if (isNewDefault) {
            updateDataActivityTracking(newNetwork, oldDefaultNetwork);
            // Notify system services that this network is up.
            makeDefault(newNetwork);
            // Log 0 -> X and Y -> X default network transitions, where X is the new default.
            mDeps.getMetricsLogger().defaultNetworkMetrics().logDefaultNetworkEvent(
                    now, newNetwork, oldDefaultNetwork);
            // Have a new default network, release the transition wakelock in
            scheduleReleaseNetworkTransitionWakelock();
        }
    }

    /**
@@ -6641,7 +6636,20 @@ public class ConnectivityService extends IConnectivityManager.Stub
            rematchNetworkAndRequests(changes, nai, now);
        }

        final NetworkAgentInfo newDefaultNetwork = getDefaultNetwork();
        final NetworkRequestInfo defaultRequestInfo = mNetworkRequests.get(mDefaultRequest);
        final NetworkAgentInfo newDefaultNetwork = ObjectUtils.getOrElse(
                changes.getNewSatisfier(defaultRequestInfo), oldDefaultNetwork);

        if (oldDefaultNetwork != newDefaultNetwork) {
            updateDataActivityTracking(newDefaultNetwork, oldDefaultNetwork);
            // Notify system services that this network is up.
            makeDefault(newDefaultNetwork);
            // Log 0 -> X and Y -> X default network transitions, where X is the new default.
            mDeps.getMetricsLogger().defaultNetworkMetrics().logDefaultNetworkEvent(
                    now, newDefaultNetwork, oldDefaultNetwork);
            // Have a new default network, release the transition wakelock in
            scheduleReleaseNetworkTransitionWakelock();
        }

        // Notify requested networks are available after the default net is switched, but
        // before LegacyTypeTracker sends legacy broadcasts