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

Commit 71f8fedc authored by Nathan Harold's avatar Nathan Harold Committed by Android (Google) Code Review
Browse files

Merge "Migrate to WorkerThread and BackgroundThread" into main

parents 4d4b0806 70793e9f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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
    }
}
+61 −36
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -411,6 +435,7 @@ public class CarrierPrivilegesTracker extends Handler {
                        }
                    }
                };
            }
        } else {
            mCurrentHandler = this;
        }
+29 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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 + "]";
@@ -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);
@@ -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);
        }
@@ -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) {
+15 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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);
            }
+14 −6
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -212,6 +219,7 @@ public class TelephonyCountryDetector extends Handler {
                        context.getSystemService(ConnectivityManager.class),
                        featureFlags);
            }
        }
        return sInstance;
    }

Loading