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

Commit 721b07bc authored by Hakjun Choi's avatar Hakjun Choi Committed by Android (Google) Code Review
Browse files

Merge "add datagram log to satellite metrics" into udc-dev

parents 70f80c17 8190b391
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+45 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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,
@@ -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
@@ -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
@@ -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;
@@ -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) {
@@ -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,
@@ -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,
@@ -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
@@ -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.
     */
+40 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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.
     */
@@ -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;
                }

@@ -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;
            }
@@ -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;
            }
@@ -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);
    }
@@ -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.
     */