diff options
4 files changed, 69 insertions, 33 deletions
diff --git a/services/core/java/com/android/server/VcnManagementService.java b/services/core/java/com/android/server/VcnManagementService.java index be9221c43611..54388f25a8fc 100644 --- a/services/core/java/com/android/server/VcnManagementService.java +++ b/services/core/java/com/android/server/VcnManagementService.java @@ -1000,30 +1000,18 @@ public class VcnManagementService extends IVcnManagementService.Stub { protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { mContext.enforceCallingOrSelfPermission(DUMP, TAG); - final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); + final IndentingPrintWriter pw = new IndentingPrintWriter(writer, "| "); // Post to handler thread to prevent ConcurrentModificationExceptions, and avoid lock-hell. mHandler.runWithScissors(() -> { - pw.println("VcnManagementService dump:"); - pw.increaseIndent(); - - pw.println("mNetworkProvider:"); - pw.increaseIndent(); mNetworkProvider.dump(pw); - pw.decreaseIndent(); pw.println(); - pw.println("mTrackingNetworkCallback:"); - pw.increaseIndent(); mTrackingNetworkCallback.dump(pw); - pw.decreaseIndent(); pw.println(); synchronized (mLock) { - pw.println("mLastSnapshot:"); - pw.increaseIndent(); mLastSnapshot.dump(pw); - pw.decreaseIndent(); pw.println(); pw.println("mConfigs:"); @@ -1043,8 +1031,6 @@ public class VcnManagementService extends IVcnManagementService.Stub { pw.decreaseIndent(); pw.println(); } - - pw.decreaseIndent(); }, DUMP_TIMEOUT_MILLIS); } diff --git a/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java b/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java index b05662e1678e..92a4eededdf3 100644 --- a/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java +++ b/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java @@ -40,6 +40,7 @@ import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.util.ArrayMap; import android.util.Slog; +import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting.Visibility; @@ -106,6 +107,17 @@ public class UnderlyingNetworkTracker { @VisibleForTesting(visibility = Visibility.PRIVATE) static final int PRIORITY_ANY = Integer.MAX_VALUE; + private static final SparseArray<String> PRIORITY_TO_STRING_MAP = new SparseArray<>(); + + static { + PRIORITY_TO_STRING_MAP.put( + PRIORITY_OPPORTUNISTIC_CELLULAR, "PRIORITY_OPPORTUNISTIC_CELLULAR"); + PRIORITY_TO_STRING_MAP.put(PRIORITY_WIFI_IN_USE, "PRIORITY_WIFI_IN_USE"); + PRIORITY_TO_STRING_MAP.put(PRIORITY_WIFI_PROSPECTIVE, "PRIORITY_WIFI_PROSPECTIVE"); + PRIORITY_TO_STRING_MAP.put(PRIORITY_MACRO_CELLULAR, "PRIORITY_MACRO_CELLULAR"); + PRIORITY_TO_STRING_MAP.put(PRIORITY_ANY, "PRIORITY_ANY"); + } + @NonNull private final VcnContext mVcnContext; @NonNull private final ParcelUuid mSubscriptionGroup; @NonNull private final UnderlyingNetworkTrackerCallback mCb; @@ -395,12 +407,12 @@ public class UnderlyingNetworkTracker { } private void reevaluateNetworks() { - TreeSet<UnderlyingNetworkRecord> sorted = - new TreeSet<>( - UnderlyingNetworkRecord.getComparator( - mSubscriptionGroup, mLastSnapshot, mCurrentRecord, mCarrierConfig)); - sorted.addAll(mRouteSelectionCallback.getUnderlyingNetworks()); + if (mRouteSelectionCallback == null) { + return; // UnderlyingNetworkTracker has quit. + } + TreeSet<UnderlyingNetworkRecord> sorted = + mRouteSelectionCallback.getSortedUnderlyingNetworks(); UnderlyingNetworkRecord candidate = sorted.isEmpty() ? null : sorted.first(); if (Objects.equals(mCurrentRecord, candidate)) { return; @@ -446,17 +458,23 @@ public class UnderlyingNetworkTracker { private final Map<Network, UnderlyingNetworkRecord.Builder> mUnderlyingNetworkRecordBuilders = new ArrayMap<>(); - private List<UnderlyingNetworkRecord> getUnderlyingNetworks() { - final List<UnderlyingNetworkRecord> records = new ArrayList<>(); + private TreeSet<UnderlyingNetworkRecord> getSortedUnderlyingNetworks() { + TreeSet<UnderlyingNetworkRecord> sorted = + new TreeSet<>( + UnderlyingNetworkRecord.getComparator( + mSubscriptionGroup, + mLastSnapshot, + mCurrentRecord, + mCarrierConfig)); for (UnderlyingNetworkRecord.Builder builder : mUnderlyingNetworkRecordBuilders.values()) { if (builder.isValid()) { - records.add(builder.build()); + sorted.add(builder.build()); } } - return records; + return sorted; } @Override @@ -660,10 +678,21 @@ public class UnderlyingNetworkTracker { } /** Dumps the state of this record for logging and debugging purposes. */ - public void dump(IndentingPrintWriter pw) { + private void dump( + IndentingPrintWriter pw, + ParcelUuid subscriptionGroup, + TelephonySubscriptionSnapshot snapshot, + UnderlyingNetworkRecord currentlySelected, + PersistableBundle carrierConfig) { pw.println("UnderlyingNetworkRecord:"); pw.increaseIndent(); + final int priorityClass = + calculatePriorityClass( + subscriptionGroup, snapshot, currentlySelected, carrierConfig); + pw.println( + "Priority class: " + PRIORITY_TO_STRING_MAP.get(priorityClass) + " (" + + priorityClass + ")"); pw.println("mNetwork: " + network); pw.println("mNetworkCapabilities: " + networkCapabilities); pw.println("mLinkProperties: " + linkProperties); @@ -733,6 +762,30 @@ public class UnderlyingNetworkTracker { } } + /** Dumps the state of this record for logging and debugging purposes. */ + public void dump(IndentingPrintWriter pw) { + pw.println("UnderlyingNetworkTracker:"); + pw.increaseIndent(); + + pw.println("Carrier WiFi Entry Threshold: " + getWifiEntryRssiThreshold(mCarrierConfig)); + pw.println("Carrier WiFi Exit Threshold: " + getWifiExitRssiThreshold(mCarrierConfig)); + pw.println( + "Currently selected: " + (mCurrentRecord == null ? null : mCurrentRecord.network)); + + pw.println("Underlying networks:"); + pw.increaseIndent(); + if (mRouteSelectionCallback != null) { + for (UnderlyingNetworkRecord record : + mRouteSelectionCallback.getSortedUnderlyingNetworks()) { + record.dump(pw, mSubscriptionGroup, mLastSnapshot, mCurrentRecord, mCarrierConfig); + } + } + pw.decreaseIndent(); + pw.println(); + + pw.decreaseIndent(); + } + private class VcnActiveDataSubscriptionIdListener extends TelephonyCallback implements ActiveDataSubscriptionIdListener { @Override diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java index f918827e9639..6b4ee693c936 100644 --- a/services/core/java/com/android/server/vcn/Vcn.java +++ b/services/core/java/com/android/server/vcn/Vcn.java @@ -557,11 +557,14 @@ public class Vcn extends Handler { pw.println("mCurrentStatus: " + mCurrentStatus); pw.println("mIsMobileDataEnabled: " + mIsMobileDataEnabled); + pw.println(); pw.println("mVcnGatewayConnections:"); + pw.increaseIndent(); for (VcnGatewayConnection gw : mVcnGatewayConnections.values()) { gw.dump(pw); } + pw.decreaseIndent(); pw.println(); pw.decreaseIndent(); diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java index 345e7d914312..54a1da0752fd 100644 --- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java +++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java @@ -2187,15 +2187,9 @@ public class VcnGatewayConnection extends StateMachine { pw.println( "mNetworkAgent.getNetwork(): " + (mNetworkAgent == null ? null : mNetworkAgent.getNetwork())); + pw.println(); - pw.println("mUnderlying:"); - pw.increaseIndent(); - if (mUnderlying != null) { - mUnderlying.dump(pw); - } else { - pw.println("null"); - } - pw.decreaseIndent(); + mUnderlyingNetworkTracker.dump(pw); pw.println(); pw.decreaseIndent(); |