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

Commit 7b03d7a6 authored by Hakjun Choi's avatar Hakjun Choi
Browse files

Enforce satellite session metrics

1. Add missed provision metrics report case
2. fix unnecessary type casting from long to int which may cause
   overflow.
3. enforce satelite session metrics

Bug: 330262741
Test: atest SatelliteStatsTest SatelliteControllerTest DatagramDispatcherTest DatagramReceiverTest PersistAtomsStorageTest
MetricsCollectorTest
    Manually tested whether telephony satellite atoms are saved as expected on pixel using below command
    adb pull /data/user_de/0/com.android.phone/files/persist_atoms.pb && gqui from persist_atoms.pb proto ~/src/24D1-dev/frameworks/opt/telephony/proto/src/persist_atoms.proto:telephonyStatsLog.PersistAtoms
    and logs

Change-Id: Id9d3507067424e50ccdd3ca1d1f646e799e79450
parent 33294684
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -665,6 +665,14 @@ message SatelliteSession {
    optional int32 satellite_service_initialization_result = 1;
    optional int32 satellite_technology = 2;
    optional int32 count = 3;
    optional int32 satellite_service_termination_result = 4;
    optional int64 initialization_processing_time_millis = 5;
    optional int64 termination_processing_time_millis = 6;
    optional int32 session_duration_seconds = 7;
    optional int32 count_of_outgoing_datagram_success = 8;
    optional int32 count_of_outgoing_datagram_failed = 9;
    optional int32 count_of_incoming_datagram_success = 10;
    optional int32 count_of_incoming_datagram_failed = 11;
}

message SatelliteIncomingDatagram {
+9 −1
Original line number Diff line number Diff line
@@ -1353,7 +1353,15 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
                SATELLITE_SESSION,
                satelliteSession.satelliteServiceInitializationResult,
                satelliteSession.satelliteTechnology,
                satelliteSession.count);
                satelliteSession.count,
                satelliteSession.satelliteServiceTerminationResult,
                satelliteSession.initializationProcessingTimeMillis,
                satelliteSession.terminationProcessingTimeMillis,
                satelliteSession.sessionDurationSeconds,
                satelliteSession.countOfOutgoingDatagramSuccess,
                satelliteSession.countOfOutgoingDatagramFailed,
                satelliteSession.countOfIncomingDatagramSuccess,
                satelliteSession.countOfIncomingDatagramFailed);
    }

    private static StatsEvent buildStatsEvent(SatelliteIncomingDatagram stats) {
+11 −1
Original line number Diff line number Diff line
@@ -2058,7 +2058,17 @@ public class PersistAtomsStorage {
        for (SatelliteSession stats : mAtoms.satelliteSession) {
            if (stats.satelliteServiceInitializationResult
                    == key.satelliteServiceInitializationResult
                    && stats.satelliteTechnology == key.satelliteTechnology) {
                    && stats.satelliteTechnology == key.satelliteTechnology
                    && stats.satelliteServiceTerminationResult
                    == key.satelliteServiceTerminationResult
                    && stats.initializationProcessingTimeMillis
                    == key.initializationProcessingTimeMillis
                    && stats.terminationProcessingTimeMillis == key.terminationProcessingTimeMillis
                    && stats.sessionDurationSeconds == key.sessionDurationSeconds
                    && stats.countOfOutgoingDatagramSuccess == key.countOfOutgoingDatagramSuccess
                    && stats.countOfOutgoingDatagramFailed == key.countOfOutgoingDatagramFailed
                    && stats.countOfIncomingDatagramSuccess == key.countOfIncomingDatagramSuccess
                    && stats.countOfIncomingDatagramFailed == key.countOfIncomingDatagramFailed) {
                return stats;
            }
        }
+124 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.internal.telephony.metrics;

import android.telephony.satellite.SatelliteManager;

import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteController;
import com.android.internal.telephony.nano.PersistAtomsProto.SatelliteIncomingDatagram;
@@ -385,11 +387,28 @@ public class SatelliteStats {
    public class SatelliteSessionParams {
        private final int mSatelliteServiceInitializationResult;
        private final int mSatelliteTechnology;
        private final int mTerminationResult;
        private final long mInitializationProcessingTimeMillis;
        private final long mTerminationProcessingTimeMillis;
        private final int mSessionDurationSec;
        private final int mCountOfOutgoingDatagramSuccess;
        private final int mCountOfOutgoingDatagramFailed;
        private final int mCountOfIncomingDatagramSuccess;
        private final int mCountOfIncomingDatagramFailed;

        private SatelliteSessionParams(Builder builder) {
            this.mSatelliteServiceInitializationResult =
                    builder.mSatelliteServiceInitializationResult;
            this.mSatelliteTechnology = builder.mSatelliteTechnology;
            this.mTerminationResult = builder.mTerminationResult;
            this.mInitializationProcessingTimeMillis = builder.mInitializationProcessingTimeMillis;
            this.mTerminationProcessingTimeMillis =
                    builder.mTerminationProcessingTimeMillis;
            this.mSessionDurationSec = builder.mSessionDurationSec;
            this.mCountOfOutgoingDatagramSuccess = builder.mCountOfOutgoingDatagramSuccess;
            this.mCountOfOutgoingDatagramFailed = builder.mCountOfOutgoingDatagramFailed;
            this.mCountOfIncomingDatagramSuccess = builder.mCountOfIncomingDatagramSuccess;
            this.mCountOfIncomingDatagramFailed = builder.mCountOfIncomingDatagramFailed;
        }

        public int getSatelliteServiceInitializationResult() {
@@ -400,12 +419,52 @@ public class SatelliteStats {
            return mSatelliteTechnology;
        }

        public int getTerminationResult() {
            return mTerminationResult;
        }

        public long getInitializationProcessingTime() {
            return mInitializationProcessingTimeMillis;
        }

        public long getTerminationProcessingTime() {
            return mTerminationProcessingTimeMillis;
        }

        public int getSessionDuration() {
            return mSessionDurationSec;
        }

        public int getCountOfOutgoingDatagramSuccess() {
            return mCountOfOutgoingDatagramSuccess;
        }

        public int getCountOfOutgoingDatagramFailed() {
            return mCountOfOutgoingDatagramFailed;
        }

        public int getCountOfIncomingDatagramSuccess() {
            return mCountOfIncomingDatagramSuccess;
        }

        public int getCountOfIncomingDatagramFailed() {
            return mCountOfIncomingDatagramFailed;
        }

        /**
         * A builder class to create {@link SatelliteSessionParams} data structure class
         */
        public static class Builder {
            private int mSatelliteServiceInitializationResult = -1;
            private int mSatelliteTechnology = -1;
            private int mTerminationResult = -1;
            private long mInitializationProcessingTimeMillis = -1;
            private long mTerminationProcessingTimeMillis = -1;
            private int mSessionDurationSec = -1;
            private int mCountOfOutgoingDatagramSuccess = -1;
            private int mCountOfOutgoingDatagramFailed = -1;
            private int mCountOfIncomingDatagramSuccess = -1;
            private int mCountOfIncomingDatagramFailed = -1;

            /**
             * Sets satelliteServiceInitializationResult value of {@link SatelliteSession}
@@ -426,6 +485,55 @@ public class SatelliteStats {
                return this;
            }

            /** Sets the satellite de-initialization result. */
            public Builder setTerminationResult(
                    @SatelliteManager.SatelliteResult int result) {
                this.mTerminationResult = result;
                return this;
            }

            /** Sets the satellite initialization processing time. */
            public Builder setInitializationProcessingTime(long processingTime) {
                this.mInitializationProcessingTimeMillis = processingTime;
                return this;
            }

            /** Sets the satellite de-initialization processing time. */
            public Builder setTerminationProcessingTime(long processingTime) {
                this.mTerminationProcessingTimeMillis = processingTime;
                return this;
            }

            /** Sets the total enabled time for the satellite session. */
            public Builder setSessionDuration(int sessionDurationSec) {
                this.mSessionDurationSec = sessionDurationSec;
                return this;
            }

            /** Sets the total number of successful outgoing datagram transmission. */
            public Builder setCountOfOutgoingDatagramSuccess(int countOfoutgoingDatagramSuccess) {
                this.mCountOfOutgoingDatagramSuccess = countOfoutgoingDatagramSuccess;
                return this;
            }

            /** Sets the total number of failed outgoing datagram transmission. */
            public Builder setCountOfOutgoingDatagramFailed(int countOfoutgoingDatagramFailed) {
                this.mCountOfOutgoingDatagramFailed = countOfoutgoingDatagramFailed;
                return this;
            }

            /** Sets the total number of successful incoming datagram transmission. */
            public Builder setCountOfIncomingDatagramSuccess(int countOfincomingDatagramSuccess) {
                this.mCountOfIncomingDatagramSuccess = countOfincomingDatagramSuccess;
                return this;
            }

            /** Sets the total number of failed incoming datagram transmission. */
            public Builder setCountOfIncomingDatagramFailed(int countOfincomingDatagramFailed) {
                this.mCountOfIncomingDatagramFailed = countOfincomingDatagramFailed;
                return this;
            }

            /**
             * Returns SessionParams, which contains whole component of
             * {@link SatelliteSession} atom
@@ -441,7 +549,14 @@ public class SatelliteStats {
            return "SessionParams("
                    + ", satelliteServiceInitializationResult="
                    + mSatelliteServiceInitializationResult
                    + ", satelliteTechnology=" + mSatelliteTechnology
                    + ", TerminationResult=" + mTerminationResult
                    + ", InitializationProcessingTimeMillis=" + mInitializationProcessingTimeMillis
                    + ", TerminationProcessingTimeMillis=" + mTerminationProcessingTimeMillis
                    + ", SessionDurationSec=" + mSessionDurationSec
                    + ", CountOfOutgoingDatagramSuccess=" + mCountOfOutgoingDatagramSuccess
                    + ", CountOfOutgoingDatagramFailed=" + mCountOfOutgoingDatagramFailed
                    + ", CountOfIncomingDatagramSuccess=" + mCountOfIncomingDatagramSuccess
                    + ", CountOfIncomingDatagramFailed=" + mCountOfIncomingDatagramFailed
                    + ")";
        }
    }
@@ -912,6 +1027,14 @@ public class SatelliteStats {
                param.getSatelliteServiceInitializationResult();
        proto.satelliteTechnology = param.getSatelliteTechnology();
        proto.count = 1;
        proto.satelliteServiceTerminationResult = param.getTerminationResult();
        proto.initializationProcessingTimeMillis = param.getInitializationProcessingTime();
        proto.terminationProcessingTimeMillis = param.getTerminationProcessingTime();
        proto.sessionDurationSeconds = param.getSessionDuration();
        proto.countOfOutgoingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
        proto.countOfOutgoingDatagramFailed = param.getCountOfOutgoingDatagramFailed();
        proto.countOfIncomingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
        proto.countOfIncomingDatagramFailed = param.getCountOfOutgoingDatagramFailed();
        mAtomsStorage.addSatelliteSessionStats(proto);
    }

+11 −2
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.metrics.SatelliteStats;
import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats;
import com.android.internal.telephony.satellite.metrics.SessionMetricsStats;

import java.util.LinkedHashMap;
import java.util.Map.Entry;
@@ -70,6 +71,7 @@ public class DatagramDispatcher extends Handler {
    @NonNull private final Context mContext;
    @NonNull private final DatagramController mDatagramController;
    @NonNull private final ControllerMetricsStats mControllerMetricsStats;
    @NonNull private final SessionMetricsStats mSessionMetricsStats;

    private boolean mIsDemoMode = false;
    private boolean mIsAligned = false;
@@ -134,6 +136,7 @@ public class DatagramDispatcher extends Handler {
        mContext = context;
        mDatagramController = datagramController;
        mControllerMetricsStats = ControllerMetricsStats.getInstance();
        mSessionMetricsStats = SessionMetricsStats.getInstance();

        synchronized (mLock) {
            mSendingDatagramInProgress = false;
@@ -276,6 +279,7 @@ public class DatagramDispatcher extends Handler {
                                getPendingDatagramCount(), error);
                        mControllerMetricsStats.reportOutgoingDatagramSuccessCount(
                                argument.datagramType);
                        mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram();
                        startWaitForSimulatedPollDatagramsDelayTimer(request);
                        if (getPendingDatagramCount() > 0) {
                            // Send response for current datagram
@@ -304,6 +308,7 @@ public class DatagramDispatcher extends Handler {
                        // Abort sending all the pending datagrams
                        mControllerMetricsStats.reportOutgoingDatagramFailCount(
                                argument.datagramType);
                        mSessionMetricsStats.addCountOfFailedOutgoingDatagram();
                        abortSendingPendingDatagrams(argument.subId,
                                SatelliteManager.SATELLITE_RESULT_REQUEST_ABORTED);
                    }
@@ -593,8 +598,10 @@ public class DatagramDispatcher extends Handler {
                        .setDatagramType(argument.datagramType)
                        .setResultCode(resultCode)
                        .setDatagramSizeBytes(argument.getDatagramRoundedSizeBytes())
                        .setDatagramTransferTimeMillis(
                                System.currentTimeMillis() - argument.datagramStartTime)
                        /* In case pending datagram has not been attempted to send to modem
                        interface. transfer time will be 0. */
                        .setDatagramTransferTimeMillis(argument.datagramStartTime > 0
                                ? (System.currentTimeMillis() - argument.datagramStartTime) : 0)
                        .build());
    }

@@ -719,6 +726,8 @@ public class DatagramDispatcher extends Handler {
                    0, SatelliteManager.SATELLITE_RESULT_SUCCESS);
            abortSendingPendingDatagrams(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
                    SATELLITE_RESULT_NOT_REACHABLE);
            mControllerMetricsStats.reportOutgoingDatagramFailCount(argument.datagramType);
            mSessionMetricsStats.addCountOfFailedOutgoingDatagram();
        }
    }

Loading