Loading flags/misc.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -246,3 +246,14 @@ flag { purpose: PURPOSE_BUGFIX } } # # OWNER=nharold TARGET=25Q4 flag { name: "thread_shred" namespace: "telephony" description: "Consolidate a bunch of unneeded worker threads to save resources" bug:"390244513" metadata { purpose: PURPOSE_BUGFIX } } src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +61 −36 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.uicc.UiccPort; import com.android.internal.telephony.uicc.UiccProfile; import com.android.internal.telephony.util.WorkerThread; import com.android.telephony.Rlog; import java.io.FileDescriptor; Loading Loading @@ -369,6 +370,29 @@ public class CarrierPrivilegesTracker extends Handler { if (mFeatureFlags.asyncInitCarrierPrivilegesTracker()) { final Object localLock = new Object(); if (mFeatureFlags.threadShred()) { mCurrentHandler = new Handler(WorkerThread.get().getLooper()) { @Override public void handleMessage(Message msg) { switch(msg.what) { case ACTION_INITIALIZE_TRACKER: handleInitializeTracker(); if (!hasMessagesOrCallbacks()) { mCurrentHandler = CarrierPrivilegesTracker.this; } break; default: Message m = CarrierPrivilegesTracker.this.obtainMessage(); m.copyFrom(msg); m.sendToTarget(); if (!hasMessagesOrCallbacks()) { mCurrentHandler = CarrierPrivilegesTracker.this; } break; } } }; } else { HandlerThread initializerThread = new HandlerThread("CarrierPrivilegesTracker Initializer") { @Override Loading Loading @@ -411,6 +435,7 @@ public class CarrierPrivilegesTracker extends Handler { } } }; } } else { mCurrentHandler = this; } Loading src/java/com/android/internal/telephony/GbaManager.java +29 −9 Original line number Diff line number Diff line Loading @@ -39,7 +39,9 @@ import android.text.TextUtils; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.telephony.util.WorkerThread; import com.android.telephony.Rlog; import java.util.NoSuchElementException; Loading @@ -66,6 +68,8 @@ public class GbaManager { public static final int REQUEST_TIMEOUT_MS = 5000; private final RcsStats mRcsStats; private final FeatureFlags mFeatureFlags; private final String mLogTag; private final Context mContext; private final int mSubId; Loading Loading @@ -202,7 +206,7 @@ public class GbaManager { @VisibleForTesting public GbaManager(Context context, int subId, String servicePackageName, int releaseTime, RcsStats rcsStats) { RcsStats rcsStats, Looper looper, FeatureFlags featureFlags) { mContext = context; mSubId = subId; mLogTag = "GbaManager[" + subId + "]"; Loading @@ -210,9 +214,15 @@ public class GbaManager { mServicePackageName = servicePackageName; mReleaseTime = releaseTime; mFeatureFlags = featureFlags; if (mFeatureFlags.threadShred()) { mHandler = new GbaManagerHandler(looper); } else { HandlerThread headlerThread = new HandlerThread(mLogTag); headlerThread.start(); mHandler = new GbaManagerHandler(headlerThread.getLooper()); } if (mReleaseTime < 0) { mHandler.sendEmptyMessage(EVENT_BIND_SERVICE); Loading @@ -224,9 +234,15 @@ public class GbaManager { * create a GbaManager instance for a sub */ public static GbaManager make(Context context, int subId, String servicePackageName, int releaseTime) { GbaManager gm = new GbaManager(context, subId, servicePackageName, releaseTime, RcsStats.getInstance()); String servicePackageName, int releaseTime, FeatureFlags featureFlags) { GbaManager gm; if (featureFlags.threadShred()) { gm = new GbaManager(context, subId, servicePackageName, releaseTime, RcsStats.getInstance(), WorkerThread.get().getLooper(), featureFlags); } else { gm = new GbaManager(context, subId, servicePackageName, releaseTime, RcsStats.getInstance(), null, featureFlags); } synchronized (sGbaManagers) { sGbaManagers.put(subId, gm); } Loading Loading @@ -521,12 +537,16 @@ public class GbaManager { @VisibleForTesting public void destroy() { mHandler.removeCallbacksAndMessages(null); if (!mFeatureFlags.threadShred()) { mHandler.getLooper().quit(); } mRequestQueue.clear(); mCallbacks.clear(); unbindService(); synchronized (sGbaManagers) { sGbaManagers.remove(mSubId); } } private void logv(String msg) { if (DBG) { Loading src/java/com/android/internal/telephony/RadioInterfaceCapabilityController.java +15 −4 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.util.WorkerThread; import com.android.telephony.Rlog; import java.io.FileDescriptor; Loading Loading @@ -55,10 +57,19 @@ public class RadioInterfaceCapabilityController extends Handler { final CommandsInterface commandsInterface) { synchronized (RadioInterfaceCapabilityController.class) { if (sInstance == null) { if (Flags.threadShred()) { sInstance = new RadioInterfaceCapabilityController( radioConfig, commandsInterface, WorkerThread.get().getLooper()); } else { final HandlerThread handlerThread = new HandlerThread("RHC"); handlerThread.start(); sInstance = new RadioInterfaceCapabilityController(radioConfig, commandsInterface, sInstance = new RadioInterfaceCapabilityController( radioConfig, commandsInterface, handlerThread.getLooper()); } } else { Log.wtf(LOG_TAG, "init() called multiple times! sInstance = " + sInstance); } Loading src/java/com/android/internal/telephony/TelephonyCountryDetector.java +14 −6 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.util.Pair; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.util.WorkerThread; import java.util.ArrayList; import java.util.HashMap; Loading Loading @@ -205,6 +206,12 @@ public class TelephonyCountryDetector extends Handler { public static synchronized TelephonyCountryDetector getInstance(@NonNull Context context, FeatureFlags featureFlags) { if (sInstance == null) { if (featureFlags.threadShred()) { sInstance = new TelephonyCountryDetector(WorkerThread.get().getLooper(), context, context.getSystemService(LocationManager.class), context.getSystemService(ConnectivityManager.class), featureFlags); } else { HandlerThread handlerThread = new HandlerThread("TelephonyCountryDetector"); handlerThread.start(); sInstance = new TelephonyCountryDetector(handlerThread.getLooper(), context, Loading @@ -212,6 +219,7 @@ public class TelephonyCountryDetector extends Handler { context.getSystemService(ConnectivityManager.class), featureFlags); } } return sInstance; } Loading Loading
flags/misc.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -246,3 +246,14 @@ flag { purpose: PURPOSE_BUGFIX } } # # OWNER=nharold TARGET=25Q4 flag { name: "thread_shred" namespace: "telephony" description: "Consolidate a bunch of unneeded worker threads to save resources" bug:"390244513" metadata { purpose: PURPOSE_BUGFIX } }
src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +61 −36 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.uicc.UiccPort; import com.android.internal.telephony.uicc.UiccProfile; import com.android.internal.telephony.util.WorkerThread; import com.android.telephony.Rlog; import java.io.FileDescriptor; Loading Loading @@ -369,6 +370,29 @@ public class CarrierPrivilegesTracker extends Handler { if (mFeatureFlags.asyncInitCarrierPrivilegesTracker()) { final Object localLock = new Object(); if (mFeatureFlags.threadShred()) { mCurrentHandler = new Handler(WorkerThread.get().getLooper()) { @Override public void handleMessage(Message msg) { switch(msg.what) { case ACTION_INITIALIZE_TRACKER: handleInitializeTracker(); if (!hasMessagesOrCallbacks()) { mCurrentHandler = CarrierPrivilegesTracker.this; } break; default: Message m = CarrierPrivilegesTracker.this.obtainMessage(); m.copyFrom(msg); m.sendToTarget(); if (!hasMessagesOrCallbacks()) { mCurrentHandler = CarrierPrivilegesTracker.this; } break; } } }; } else { HandlerThread initializerThread = new HandlerThread("CarrierPrivilegesTracker Initializer") { @Override Loading Loading @@ -411,6 +435,7 @@ public class CarrierPrivilegesTracker extends Handler { } } }; } } else { mCurrentHandler = this; } Loading
src/java/com/android/internal/telephony/GbaManager.java +29 −9 Original line number Diff line number Diff line Loading @@ -39,7 +39,9 @@ import android.text.TextUtils; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.telephony.util.WorkerThread; import com.android.telephony.Rlog; import java.util.NoSuchElementException; Loading @@ -66,6 +68,8 @@ public class GbaManager { public static final int REQUEST_TIMEOUT_MS = 5000; private final RcsStats mRcsStats; private final FeatureFlags mFeatureFlags; private final String mLogTag; private final Context mContext; private final int mSubId; Loading Loading @@ -202,7 +206,7 @@ public class GbaManager { @VisibleForTesting public GbaManager(Context context, int subId, String servicePackageName, int releaseTime, RcsStats rcsStats) { RcsStats rcsStats, Looper looper, FeatureFlags featureFlags) { mContext = context; mSubId = subId; mLogTag = "GbaManager[" + subId + "]"; Loading @@ -210,9 +214,15 @@ public class GbaManager { mServicePackageName = servicePackageName; mReleaseTime = releaseTime; mFeatureFlags = featureFlags; if (mFeatureFlags.threadShred()) { mHandler = new GbaManagerHandler(looper); } else { HandlerThread headlerThread = new HandlerThread(mLogTag); headlerThread.start(); mHandler = new GbaManagerHandler(headlerThread.getLooper()); } if (mReleaseTime < 0) { mHandler.sendEmptyMessage(EVENT_BIND_SERVICE); Loading @@ -224,9 +234,15 @@ public class GbaManager { * create a GbaManager instance for a sub */ public static GbaManager make(Context context, int subId, String servicePackageName, int releaseTime) { GbaManager gm = new GbaManager(context, subId, servicePackageName, releaseTime, RcsStats.getInstance()); String servicePackageName, int releaseTime, FeatureFlags featureFlags) { GbaManager gm; if (featureFlags.threadShred()) { gm = new GbaManager(context, subId, servicePackageName, releaseTime, RcsStats.getInstance(), WorkerThread.get().getLooper(), featureFlags); } else { gm = new GbaManager(context, subId, servicePackageName, releaseTime, RcsStats.getInstance(), null, featureFlags); } synchronized (sGbaManagers) { sGbaManagers.put(subId, gm); } Loading Loading @@ -521,12 +537,16 @@ public class GbaManager { @VisibleForTesting public void destroy() { mHandler.removeCallbacksAndMessages(null); if (!mFeatureFlags.threadShred()) { mHandler.getLooper().quit(); } mRequestQueue.clear(); mCallbacks.clear(); unbindService(); synchronized (sGbaManagers) { sGbaManagers.remove(mSubId); } } private void logv(String msg) { if (DBG) { Loading
src/java/com/android/internal/telephony/RadioInterfaceCapabilityController.java +15 −4 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.util.WorkerThread; import com.android.telephony.Rlog; import java.io.FileDescriptor; Loading Loading @@ -55,10 +57,19 @@ public class RadioInterfaceCapabilityController extends Handler { final CommandsInterface commandsInterface) { synchronized (RadioInterfaceCapabilityController.class) { if (sInstance == null) { if (Flags.threadShred()) { sInstance = new RadioInterfaceCapabilityController( radioConfig, commandsInterface, WorkerThread.get().getLooper()); } else { final HandlerThread handlerThread = new HandlerThread("RHC"); handlerThread.start(); sInstance = new RadioInterfaceCapabilityController(radioConfig, commandsInterface, sInstance = new RadioInterfaceCapabilityController( radioConfig, commandsInterface, handlerThread.getLooper()); } } else { Log.wtf(LOG_TAG, "init() called multiple times! sInstance = " + sInstance); } Loading
src/java/com/android/internal/telephony/TelephonyCountryDetector.java +14 −6 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.util.Pair; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.util.WorkerThread; import java.util.ArrayList; import java.util.HashMap; Loading Loading @@ -205,6 +206,12 @@ public class TelephonyCountryDetector extends Handler { public static synchronized TelephonyCountryDetector getInstance(@NonNull Context context, FeatureFlags featureFlags) { if (sInstance == null) { if (featureFlags.threadShred()) { sInstance = new TelephonyCountryDetector(WorkerThread.get().getLooper(), context, context.getSystemService(LocationManager.class), context.getSystemService(ConnectivityManager.class), featureFlags); } else { HandlerThread handlerThread = new HandlerThread("TelephonyCountryDetector"); handlerThread.start(); sInstance = new TelephonyCountryDetector(handlerThread.getLooper(), context, Loading @@ -212,6 +219,7 @@ public class TelephonyCountryDetector extends Handler { context.getSystemService(ConnectivityManager.class), featureFlags); } } return sInstance; } Loading