Loading src/java/com/android/internal/telephony/satellite/DatagramController.java +1 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ public class DatagramController { @NonNull private final DatagramDispatcher mDatagramDispatcher; @NonNull private final DatagramReceiver mDatagramReceiver; public static final long MAX_DATAGRAM_ID = (long) Math.pow(2, 16); public static final int ROUNDING_UNIT = 10; /** Variables used to update onSendDatagramStateChanged(). */ private int mSendSubId; Loading src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +45 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony.satellite; import static com.android.internal.telephony.satellite.DatagramController.ROUNDING_UNIT; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; Loading @@ -30,6 +32,7 @@ import android.telephony.satellite.SatelliteManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; import com.android.internal.telephony.metrics.SatelliteStats; import java.util.LinkedHashMap; import java.util.Map.Entry; Loading Loading @@ -127,6 +130,7 @@ public class DatagramDispatcher extends Handler { public @NonNull SatelliteDatagram datagram; public boolean needFullScreenPointingUI; public @NonNull Consumer<Integer> callback; public long datagramStartTime; SendSatelliteDatagramArgument(int subId, long datagramId, @SatelliteManager.DatagramType int datagramType, Loading @@ -139,6 +143,23 @@ public class DatagramDispatcher extends Handler { this.needFullScreenPointingUI = needFullScreenPointingUI; this.callback = callback; } /** returns the size of outgoing SMS, rounded by 10 bytes */ public int getDatagramRoundedSizeBytes() { if (datagram.getSatelliteDatagram() != null) { int sizeBytes = datagram.getSatelliteDatagram().length; // rounded by ROUNDING_UNIT return (int) (Math.round((double) sizeBytes / ROUNDING_UNIT) * ROUNDING_UNIT); } else { return 0; } } /** sets the start time at datagram is sent out */ public void setDatagramStartTime() { datagramStartTime = datagramStartTime == 0 ? System.currentTimeMillis() : datagramStartTime; } } @Override Loading Loading @@ -169,6 +190,9 @@ public class DatagramDispatcher extends Handler { } else { loge("sendSatelliteDatagram: No phone object"); argument.callback.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE); // report phone == null case reportSendDatagramCompleted(argument, SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE); synchronized (mLock) { // Remove current datagram from pending map Loading @@ -193,6 +217,8 @@ public class DatagramDispatcher extends Handler { SendSatelliteDatagramArgument argument = (SendSatelliteDatagramArgument) request.argument; logd("EVENT_SEND_SATELLITE_DATAGRAM_DONE error: " + error); // log metrics about the outgoing datagram reportSendDatagramCompleted(argument, error); synchronized (mLock) { mSendingDatagramInProgress = false; Loading Loading @@ -258,8 +284,9 @@ public class DatagramDispatcher extends Handler { long datagramId = mNextDatagramId.getAndUpdate( n -> ((n + 1) % DatagramController.MAX_DATAGRAM_ID)); SendSatelliteDatagramArgument datagramArgs = new SendSatelliteDatagramArgument(subId, datagramId, datagramType, datagram, needFullScreenPointingUI, callback); SendSatelliteDatagramArgument datagramArgs = new SendSatelliteDatagramArgument(subId, datagramId, datagramType, datagram, needFullScreenPointingUI, callback); synchronized (mLock) { if (datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) { Loading @@ -270,6 +297,7 @@ public class DatagramDispatcher extends Handler { if (!mSendingDatagramInProgress) { mSendingDatagramInProgress = true; datagramArgs.setDatagramStartTime(); sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArgs, phone); mDatagramController.updateSendStatus(subId, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING, Loading Loading @@ -297,6 +325,8 @@ public class DatagramDispatcher extends Handler { mSendingDatagramInProgress = true; SendSatelliteDatagramArgument datagramArg = pendingDatagram.iterator().next().getValue(); // Sets the trigger time for getting pending datagrams datagramArg.setDatagramStartTime(); sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArg, phone); mDatagramController.updateSendStatus(datagramArg.subId, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING, Loading @@ -321,6 +351,7 @@ public class DatagramDispatcher extends Handler { pendingDatagramsMap.entrySet()) { SendSatelliteDatagramArgument argument = entry.getValue(); argument.callback.accept(errorCode); reportSendDatagramCompleted(argument, errorCode); } // Clear pending datagram maps Loading Loading @@ -374,6 +405,18 @@ public class DatagramDispatcher extends Handler { msg.sendToTarget(); } private void reportSendDatagramCompleted(@NonNull SendSatelliteDatagramArgument argument, @NonNull @SatelliteManager.SatelliteError int resultCode) { SatelliteStats.getInstance().onSatelliteOutgoingDatagramMetrics( new SatelliteStats.SatelliteOutgoingDatagramParams.Builder() .setDatagramType(argument.datagramType) .setResultCode(resultCode) .setDatagramSizeBytes(argument.getDatagramRoundedSizeBytes()) .setDatagramTransferTimeMillis( System.currentTimeMillis() - argument.datagramStartTime) .build()); } /** * Destroys this DatagramDispatcher. Used for tearing down static resources during testing. */ Loading src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +40 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony.satellite; import static com.android.internal.telephony.satellite.DatagramController.ROUNDING_UNIT; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ContentResolver; Loading @@ -42,6 +44,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.ILongConsumer; import com.android.internal.telephony.Phone; import com.android.internal.telephony.metrics.SatelliteStats; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; Loading @@ -67,6 +70,8 @@ public class DatagramReceiver extends Handler { @NonNull private SharedPreferences mSharedPreferences = null; @NonNull private final DatagramController mDatagramController; private long mDatagramTransferStartTime = 0; /** * The background handler to perform database operations. This is running on a separate thread. */ Loading Loading @@ -344,6 +349,10 @@ public class DatagramReceiver extends Handler { SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, pendingCount, SatelliteManager.SATELLITE_ERROR_NONE); } // Send the captured data about incoming datagram to metric sInstance.reportMetrics( satelliteDatagram, SatelliteManager.SATELLITE_ERROR_NONE); break; } Loading Loading @@ -402,6 +411,9 @@ public class DatagramReceiver extends Handler { SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, mDatagramController.getReceivePendingCount(), SatelliteManager.SATELLITE_ERROR_NONE); // report not able to poll pending datagrams reportMetrics(null, SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE); } break; } Loading @@ -418,6 +430,7 @@ public class DatagramReceiver extends Handler { mDatagramController.updateReceiveStatus(request.subId, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED, mDatagramController.getReceivePendingCount(), error); reportMetrics(null, error); } break; } Loading Loading @@ -510,6 +523,7 @@ public class DatagramReceiver extends Handler { mDatagramController.getReceivePendingCount(), SatelliteManager.SATELLITE_ERROR_NONE); mDatagramTransferStartTime = System.currentTimeMillis(); Phone phone = SatelliteServiceUtils.getPhone(); sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, callback, phone, subId); } Loading @@ -530,6 +544,31 @@ public class DatagramReceiver extends Handler { msg.sendToTarget(); } /** Report incoming datagram related metrics */ private void reportMetrics(@Nullable SatelliteDatagram satelliteDatagram, @NonNull @SatelliteManager.SatelliteError int resultCode) { int datagramSizeRoundedBytes = -1; int datagramTransferTime = 0; if (satelliteDatagram != null) { if (satelliteDatagram.getSatelliteDatagram() != null) { int sizeBytes = satelliteDatagram.getSatelliteDatagram().length; // rounded by 10 bytes datagramSizeRoundedBytes = (int) (Math.round((double) sizeBytes / ROUNDING_UNIT) * ROUNDING_UNIT); } datagramTransferTime = (int) (System.currentTimeMillis() - mDatagramTransferStartTime); mDatagramTransferStartTime = 0; } SatelliteStats.getInstance().onSatelliteIncomingDatagramMetrics( new SatelliteStats.SatelliteIncomingDatagramParams.Builder() .setResultCode(resultCode) .setDatagramSizeBytes(datagramSizeRoundedBytes) .setDatagramTransferTimeMillis(datagramTransferTime) .build()); } /** * Destroys this DatagramDispatcher. Used for tearing down static resources during testing. */ Loading Loading
src/java/com/android/internal/telephony/satellite/DatagramController.java +1 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ public class DatagramController { @NonNull private final DatagramDispatcher mDatagramDispatcher; @NonNull private final DatagramReceiver mDatagramReceiver; public static final long MAX_DATAGRAM_ID = (long) Math.pow(2, 16); public static final int ROUNDING_UNIT = 10; /** Variables used to update onSendDatagramStateChanged(). */ private int mSendSubId; Loading
src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +45 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony.satellite; import static com.android.internal.telephony.satellite.DatagramController.ROUNDING_UNIT; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; Loading @@ -30,6 +32,7 @@ import android.telephony.satellite.SatelliteManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; import com.android.internal.telephony.metrics.SatelliteStats; import java.util.LinkedHashMap; import java.util.Map.Entry; Loading Loading @@ -127,6 +130,7 @@ public class DatagramDispatcher extends Handler { public @NonNull SatelliteDatagram datagram; public boolean needFullScreenPointingUI; public @NonNull Consumer<Integer> callback; public long datagramStartTime; SendSatelliteDatagramArgument(int subId, long datagramId, @SatelliteManager.DatagramType int datagramType, Loading @@ -139,6 +143,23 @@ public class DatagramDispatcher extends Handler { this.needFullScreenPointingUI = needFullScreenPointingUI; this.callback = callback; } /** returns the size of outgoing SMS, rounded by 10 bytes */ public int getDatagramRoundedSizeBytes() { if (datagram.getSatelliteDatagram() != null) { int sizeBytes = datagram.getSatelliteDatagram().length; // rounded by ROUNDING_UNIT return (int) (Math.round((double) sizeBytes / ROUNDING_UNIT) * ROUNDING_UNIT); } else { return 0; } } /** sets the start time at datagram is sent out */ public void setDatagramStartTime() { datagramStartTime = datagramStartTime == 0 ? System.currentTimeMillis() : datagramStartTime; } } @Override Loading Loading @@ -169,6 +190,9 @@ public class DatagramDispatcher extends Handler { } else { loge("sendSatelliteDatagram: No phone object"); argument.callback.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE); // report phone == null case reportSendDatagramCompleted(argument, SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE); synchronized (mLock) { // Remove current datagram from pending map Loading @@ -193,6 +217,8 @@ public class DatagramDispatcher extends Handler { SendSatelliteDatagramArgument argument = (SendSatelliteDatagramArgument) request.argument; logd("EVENT_SEND_SATELLITE_DATAGRAM_DONE error: " + error); // log metrics about the outgoing datagram reportSendDatagramCompleted(argument, error); synchronized (mLock) { mSendingDatagramInProgress = false; Loading Loading @@ -258,8 +284,9 @@ public class DatagramDispatcher extends Handler { long datagramId = mNextDatagramId.getAndUpdate( n -> ((n + 1) % DatagramController.MAX_DATAGRAM_ID)); SendSatelliteDatagramArgument datagramArgs = new SendSatelliteDatagramArgument(subId, datagramId, datagramType, datagram, needFullScreenPointingUI, callback); SendSatelliteDatagramArgument datagramArgs = new SendSatelliteDatagramArgument(subId, datagramId, datagramType, datagram, needFullScreenPointingUI, callback); synchronized (mLock) { if (datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) { Loading @@ -270,6 +297,7 @@ public class DatagramDispatcher extends Handler { if (!mSendingDatagramInProgress) { mSendingDatagramInProgress = true; datagramArgs.setDatagramStartTime(); sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArgs, phone); mDatagramController.updateSendStatus(subId, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING, Loading Loading @@ -297,6 +325,8 @@ public class DatagramDispatcher extends Handler { mSendingDatagramInProgress = true; SendSatelliteDatagramArgument datagramArg = pendingDatagram.iterator().next().getValue(); // Sets the trigger time for getting pending datagrams datagramArg.setDatagramStartTime(); sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArg, phone); mDatagramController.updateSendStatus(datagramArg.subId, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING, Loading @@ -321,6 +351,7 @@ public class DatagramDispatcher extends Handler { pendingDatagramsMap.entrySet()) { SendSatelliteDatagramArgument argument = entry.getValue(); argument.callback.accept(errorCode); reportSendDatagramCompleted(argument, errorCode); } // Clear pending datagram maps Loading Loading @@ -374,6 +405,18 @@ public class DatagramDispatcher extends Handler { msg.sendToTarget(); } private void reportSendDatagramCompleted(@NonNull SendSatelliteDatagramArgument argument, @NonNull @SatelliteManager.SatelliteError int resultCode) { SatelliteStats.getInstance().onSatelliteOutgoingDatagramMetrics( new SatelliteStats.SatelliteOutgoingDatagramParams.Builder() .setDatagramType(argument.datagramType) .setResultCode(resultCode) .setDatagramSizeBytes(argument.getDatagramRoundedSizeBytes()) .setDatagramTransferTimeMillis( System.currentTimeMillis() - argument.datagramStartTime) .build()); } /** * Destroys this DatagramDispatcher. Used for tearing down static resources during testing. */ Loading
src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +40 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.telephony.satellite; import static com.android.internal.telephony.satellite.DatagramController.ROUNDING_UNIT; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ContentResolver; Loading @@ -42,6 +44,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.ILongConsumer; import com.android.internal.telephony.Phone; import com.android.internal.telephony.metrics.SatelliteStats; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; Loading @@ -67,6 +70,8 @@ public class DatagramReceiver extends Handler { @NonNull private SharedPreferences mSharedPreferences = null; @NonNull private final DatagramController mDatagramController; private long mDatagramTransferStartTime = 0; /** * The background handler to perform database operations. This is running on a separate thread. */ Loading Loading @@ -344,6 +349,10 @@ public class DatagramReceiver extends Handler { SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, pendingCount, SatelliteManager.SATELLITE_ERROR_NONE); } // Send the captured data about incoming datagram to metric sInstance.reportMetrics( satelliteDatagram, SatelliteManager.SATELLITE_ERROR_NONE); break; } Loading Loading @@ -402,6 +411,9 @@ public class DatagramReceiver extends Handler { SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, mDatagramController.getReceivePendingCount(), SatelliteManager.SATELLITE_ERROR_NONE); // report not able to poll pending datagrams reportMetrics(null, SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE); } break; } Loading @@ -418,6 +430,7 @@ public class DatagramReceiver extends Handler { mDatagramController.updateReceiveStatus(request.subId, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED, mDatagramController.getReceivePendingCount(), error); reportMetrics(null, error); } break; } Loading Loading @@ -510,6 +523,7 @@ public class DatagramReceiver extends Handler { mDatagramController.getReceivePendingCount(), SatelliteManager.SATELLITE_ERROR_NONE); mDatagramTransferStartTime = System.currentTimeMillis(); Phone phone = SatelliteServiceUtils.getPhone(); sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, callback, phone, subId); } Loading @@ -530,6 +544,31 @@ public class DatagramReceiver extends Handler { msg.sendToTarget(); } /** Report incoming datagram related metrics */ private void reportMetrics(@Nullable SatelliteDatagram satelliteDatagram, @NonNull @SatelliteManager.SatelliteError int resultCode) { int datagramSizeRoundedBytes = -1; int datagramTransferTime = 0; if (satelliteDatagram != null) { if (satelliteDatagram.getSatelliteDatagram() != null) { int sizeBytes = satelliteDatagram.getSatelliteDatagram().length; // rounded by 10 bytes datagramSizeRoundedBytes = (int) (Math.round((double) sizeBytes / ROUNDING_UNIT) * ROUNDING_UNIT); } datagramTransferTime = (int) (System.currentTimeMillis() - mDatagramTransferStartTime); mDatagramTransferStartTime = 0; } SatelliteStats.getInstance().onSatelliteIncomingDatagramMetrics( new SatelliteStats.SatelliteIncomingDatagramParams.Builder() .setResultCode(resultCode) .setDatagramSizeBytes(datagramSizeRoundedBytes) .setDatagramTransferTimeMillis(datagramTransferTime) .build()); } /** * Destroys this DatagramDispatcher. Used for tearing down static resources during testing. */ Loading