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

Commit ae580395 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Change variables to atomic variables

The following variables are updated in this cl:
- mModemState
- mHasEnteredConnectedState
- mShouldPollMtSms
- mIsMtSmsPollingThrottled
- mConnectedStateCounter
- mSmsTransmissionStartTime

Bug: 409610090
Test: atest
Flag: com.android.internal.telephony.flags.satellite_improve_multi_thread_design
Change-Id: I28008b9669c3600e57780db9be8d4e8084fc0741
parent 5b845588
Loading
Loading
Loading
Loading
+33 −49
Original line number Original line Diff line number Diff line
@@ -107,6 +107,12 @@ public class DatagramDispatcher extends Handler {
    private AtomicLong mWaitTimeForDatagramSendingForLastMessageResponse = new AtomicLong(0);
    private AtomicLong mWaitTimeForDatagramSendingForLastMessageResponse = new AtomicLong(0);
    @SatelliteManager.DatagramType
    @SatelliteManager.DatagramType
    private AtomicInteger mLastSendRequestDatagramType = new AtomicInteger(DATAGRAM_TYPE_UNKNOWN);
    private AtomicInteger mLastSendRequestDatagramType = new AtomicInteger(DATAGRAM_TYPE_UNKNOWN);
    private AtomicInteger mModemState = new AtomicInteger(SATELLITE_MODEM_STATE_UNKNOWN);
    private AtomicBoolean mHasEnteredConnectedState = new AtomicBoolean(false);
    private AtomicBoolean mShouldPollMtSms = new AtomicBoolean(false);
    private AtomicBoolean mIsMtSmsPollingThrottled = new AtomicBoolean(false);
    private AtomicInteger mConnectedStateCounter = new AtomicInteger(0);
    private AtomicLong mSmsTransmissionStartTime = new AtomicLong(0);


    private DatagramDispatcherHandlerRequest mSendSatelliteDatagramRequest = null;
    private DatagramDispatcherHandlerRequest mSendSatelliteDatagramRequest = null;
    private final Object mLock = new Object();
    private final Object mLock = new Object();
@@ -131,18 +137,6 @@ public class DatagramDispatcher extends Handler {
    @GuardedBy("mLock")
    @GuardedBy("mLock")
    private final LinkedHashMap<Long, PendingRequest> mPendingSmsMap = new LinkedHashMap<>();
    private final LinkedHashMap<Long, PendingRequest> mPendingSmsMap = new LinkedHashMap<>();


    @GuardedBy("mLock")
    private int mModemState = SATELLITE_MODEM_STATE_UNKNOWN;
    @GuardedBy("mLock")
    private boolean mHasEnteredConnectedState = false;
    @GuardedBy("mLock")
    private boolean mShouldPollMtSms = false;
    @GuardedBy("mLock")
    private boolean mIsMtSmsPollingThrottled = false;
    @GuardedBy("mLock")
    private int mConnectedStateCounter = 0;
    private long mSmsTransmissionStartTime = 0;

    /**
    /**
     * Create the DatagramDispatcher singleton instance.
     * Create the DatagramDispatcher singleton instance.
     * @param context The Context to use to create the DatagramDispatcher.
     * @param context The Context to use to create the DatagramDispatcher.
@@ -395,7 +389,7 @@ public class DatagramDispatcher extends Handler {
                    return;
                    return;
                }
                }


                mSmsTransmissionStartTime = System.currentTimeMillis();
                mSmsTransmissionStartTime.set(System.currentTimeMillis());
                smsDispatchersController.sendCarrierRoamingNbIotNtnText(pendingRequest);
                smsDispatchersController.sendCarrierRoamingNbIotNtnText(pendingRequest);
                break;
                break;
            }
            }
@@ -414,9 +408,7 @@ public class DatagramDispatcher extends Handler {
            }
            }


            case EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT: {
            case EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT: {
                synchronized (mLock) {
                mIsMtSmsPollingThrottled.set(false);
                    mIsMtSmsPollingThrottled = false;
                }
                if (allowMtSmsPolling()) {
                if (allowMtSmsPolling()) {
                    sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
                    sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
                }
                }
@@ -756,8 +748,8 @@ public class DatagramDispatcher extends Handler {
        int datagramType = pendingRequest.isMtSmsPolling
        int datagramType = pendingRequest.isMtSmsPolling
                ? DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS : DATAGRAM_TYPE_SMS;
                ? DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS : DATAGRAM_TYPE_SMS;
        if (resultCode == SATELLITE_RESULT_SUCCESS) {
        if (resultCode == SATELLITE_RESULT_SUCCESS) {
            long smsTransmissionTime = mSmsTransmissionStartTime > 0
            long smsTransmissionTime = mSmsTransmissionStartTime.get() > 0
                    ? (System.currentTimeMillis() - mSmsTransmissionStartTime) : 0;
                    ? (System.currentTimeMillis() - mSmsTransmissionStartTime.get()) : 0;
            mControllerMetricsStats.reportOutgoingDatagramSuccessCount(datagramType, false);
            mControllerMetricsStats.reportOutgoingDatagramSuccessCount(datagramType, false);
            mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram(
            mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram(
                    datagramType, smsTransmissionTime);
                    datagramType, smsTransmissionTime);
@@ -814,7 +806,7 @@ public class DatagramDispatcher extends Handler {
     */
     */
    public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) {
    public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) {
        synchronized (mLock) {
        synchronized (mLock) {
            mModemState = state;
            mModemState.set(state);
            if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF
            if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF
                    || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) {
                    || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) {
                plogd("onSatelliteModemStateChanged: cleaning up resources");
                plogd("onSatelliteModemStateChanged: cleaning up resources");
@@ -824,11 +816,11 @@ public class DatagramDispatcher extends Handler {
            }
            }


            if (state == SATELLITE_MODEM_STATE_CONNECTED) {
            if (state == SATELLITE_MODEM_STATE_CONNECTED) {
                mHasEnteredConnectedState = true;
                mHasEnteredConnectedState.set(true);


                mConnectedStateCounter++;
                mConnectedStateCounter.incrementAndGet();
                if (isFirstConnected()) {
                if (isFirstConnected()) {
                    mShouldPollMtSms = shouldPollMtSms();
                    mShouldPollMtSms.set(shouldPollMtSms());
                }
                }


                if (isDatagramWaitForConnectedStateTimerStarted()) {
                if (isDatagramWaitForConnectedStateTimerStarted()) {
@@ -838,9 +830,9 @@ public class DatagramDispatcher extends Handler {
            }
            }


            if (state == SATELLITE_MODEM_STATE_NOT_CONNECTED) {
            if (state == SATELLITE_MODEM_STATE_NOT_CONNECTED) {
                if (mHasEnteredConnectedState) {
                if (mHasEnteredConnectedState.get()) {
                    mHasEnteredConnectedState = false;
                    mHasEnteredConnectedState.set(false);
                    mShouldPollMtSms = shouldPollMtSms();
                    mShouldPollMtSms.set(shouldPollMtSms());
                }
                }
            }
            }
        }
        }
@@ -851,7 +843,7 @@ public class DatagramDispatcher extends Handler {


    /** Returns true if this is the first time the satellite modem is connected. */
    /** Returns true if this is the first time the satellite modem is connected. */
    private boolean isFirstConnected() {
    private boolean isFirstConnected() {
        return mConnectedStateCounter == 1;
        return mConnectedStateCounter.get() == 1;
    }
    }


    @GuardedBy("mLock")
    @GuardedBy("mLock")
@@ -882,10 +874,10 @@ public class DatagramDispatcher extends Handler {
        mSendSatelliteDatagramRequest = null;
        mSendSatelliteDatagramRequest = null;
        mIsAligned.set(false);
        mIsAligned.set(false);
        mLastSendRequestDatagramType.set(DATAGRAM_TYPE_UNKNOWN);
        mLastSendRequestDatagramType.set(DATAGRAM_TYPE_UNKNOWN);
        mModemState = SATELLITE_MODEM_STATE_UNKNOWN;
        mModemState.set(SATELLITE_MODEM_STATE_UNKNOWN);
        mHasEnteredConnectedState = false;
        mHasEnteredConnectedState.set(false);
        mShouldPollMtSms = false;
        mShouldPollMtSms.set(false);
        mConnectedStateCounter = 0;
        mConnectedStateCounter.set(0);
        stopMtSmsPollingThrottle();
        stopMtSmsPollingThrottle();
    }
    }


@@ -1287,7 +1279,7 @@ public class DatagramDispatcher extends Handler {
                reportSendSmsCompleted(pendingSms, SATELLITE_RESULT_SUCCESS);
                reportSendSmsCompleted(pendingSms, SATELLITE_RESULT_SUCCESS);
                if (datagramType == DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS) {
                if (datagramType == DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS) {
                    startMtSmsPollingThrottle();
                    startMtSmsPollingThrottle();
                    mShouldPollMtSms = false;
                    mShouldPollMtSms.set(false);
                }
                }
            } else {
            } else {
                // Update send status
                // Update send status
@@ -1325,14 +1317,14 @@ public class DatagramDispatcher extends Handler {


    private void handleCmdSendMtSmsPollingMessage() {
    private void handleCmdSendMtSmsPollingMessage() {
        synchronized (mLock) {
        synchronized (mLock) {
            if (!mShouldPollMtSms) {
            if (!mShouldPollMtSms.get()) {
                plogd("sendMtSmsPollingMessage: mShouldPollMtSms=" + mShouldPollMtSms);
                plogd("sendMtSmsPollingMessage: mShouldPollMtSms=" + mShouldPollMtSms.get());
                return;
                return;
            }
            }


            plogd("sendMtSmsPollingMessage");
            plogd("sendMtSmsPollingMessage");
            if (!allowCheckMessageInNotConnected()) {
            if (!allowCheckMessageInNotConnected()) {
                mShouldPollMtSms = false;
                mShouldPollMtSms.set(false);
            }
            }


            for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
            for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
@@ -1361,17 +1353,15 @@ public class DatagramDispatcher extends Handler {
        smsDispatchersController.sendMtSmsPollingMessage();
        smsDispatchersController.sendMtSmsPollingMessage();
    }
    }


    @GuardedBy("mLock")
    private void startMtSmsPollingThrottle() {
    private void startMtSmsPollingThrottle() {
        plogd("startMtSmsPollingThrottle");
        plogd("startMtSmsPollingThrottle");
        mIsMtSmsPollingThrottled = true;
        mIsMtSmsPollingThrottled.set(true);
        sendMessageDelayed(obtainMessage(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT),
        sendMessageDelayed(obtainMessage(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT),
                getMtSmsPollingThrottleMillis());
                getMtSmsPollingThrottleMillis());
    }
    }


    @GuardedBy("mLock")
    private void stopMtSmsPollingThrottle() {
    private void stopMtSmsPollingThrottle() {
        mIsMtSmsPollingThrottled = false;
        mIsMtSmsPollingThrottled.set(false);
        removeMessages(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT);
        removeMessages(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT);
    }
    }


@@ -1385,22 +1375,16 @@ public class DatagramDispatcher extends Handler {
            return false;
            return false;
        }
        }


        boolean isModemStateConnectedOrTransferring;
        boolean isModemStateConnectedOrTransferring =
        boolean isAligned = mIsAligned.get();
                mModemState.get() == SATELLITE_MODEM_STATE_CONNECTED
        boolean isMtSmsPollingThrottled;
                        || mModemState.get() == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
        synchronized (mLock) {
            isMtSmsPollingThrottled = mIsMtSmsPollingThrottled;
            isModemStateConnectedOrTransferring =
                    mModemState == SATELLITE_MODEM_STATE_CONNECTED
                            || mModemState == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
        }


        if (isMtSmsPollingThrottled) {
        if (mIsMtSmsPollingThrottled.get()) {
            plogd("allowMtSmsPolling: polling is throttled");
            plogd("allowMtSmsPolling: polling is throttled");
            return false;
            return false;
        }
        }


        if (!isAligned) {
        if (!mIsAligned.get()) {
            plogd("allowMtSmsPolling: not aligned");
            plogd("allowMtSmsPolling: not aligned");
            return false;
            return false;
        }
        }