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

Commit 0557c214 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Log session gap min, avg and max

Bug: 399531231
Test: make
Flag: EXEMPT bugfix
Change-Id: I0ace2752dcbb78ec6bd331e2bd32f95a0171bebf
parent e954c80d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1634,6 +1634,7 @@ public class PersistAtomsStorage {
                    mAtoms.carrierRoamingSatelliteControllerStats;
            mAtoms.carrierRoamingSatelliteControllerStats =
                    new CarrierRoamingSatelliteControllerStats[0];
            SatelliteStats.getInstance().resetCarrierRoamingSatelliteControllerStats();
            saveAtomsToFile(SAVE_TO_FILE_DELAY_FOR_GET_MILLIS);
            return statsArray;
        } else {
+36 −21
Original line number Diff line number Diff line
@@ -2115,9 +2115,9 @@ public class SatelliteStats {
        private final int mCountOfEntitlementStatusQueryRequest;
        private final int mCountOfSatelliteConfigUpdateRequest;
        private final int mCountOfSatelliteNotificationDisplayed;
        private final int mSatelliteSessionGapMinSec;
        private final int mSatelliteSessionGapAvgSec;
        private final int mSatelliteSessionGapMaxSec;
        private static int sSatelliteSessionGapMinSec;
        private static int sSatelliteSessionGapAvgSec;
        private static int sSatelliteSessionGapMaxSec;
        private static int sCarrierId;
        private static boolean sIsDeviceEntitled;

@@ -2129,9 +2129,17 @@ public class SatelliteStats {
                    builder.mCountOfSatelliteConfigUpdateRequest;
            this.mCountOfSatelliteNotificationDisplayed =
                    builder.mCountOfSatelliteNotificationDisplayed;
            this.mSatelliteSessionGapMinSec = builder.mSatelliteSessionGapMinSec;
            this.mSatelliteSessionGapAvgSec = builder.mSatelliteSessionGapAvgSec;
            this.mSatelliteSessionGapMaxSec = builder.mSatelliteSessionGapMaxSec;

            // Update session gap params only when they are explicitly provided
            if (builder.mSatelliteSessionGapMinSec.isPresent()) {
                this.sSatelliteSessionGapMinSec = builder.mSatelliteSessionGapMinSec.get();
            }
            if (builder.mSatelliteSessionGapAvgSec.isPresent()) {
                this.sSatelliteSessionGapAvgSec = builder.mSatelliteSessionGapAvgSec.get();
            }
            if (builder.mSatelliteSessionGapMaxSec.isPresent()) {
                this.sSatelliteSessionGapMaxSec = builder.mSatelliteSessionGapMaxSec.get();
            }

            // Carrier ID value should be updated only when it is meaningful.
            if (builder.mCarrierId.isPresent()) {
@@ -2162,15 +2170,15 @@ public class SatelliteStats {
        }

        public int getSatelliteSessionGapMinSec() {
            return mSatelliteSessionGapMinSec;
            return sSatelliteSessionGapMinSec;
        }

        public int getSatelliteSessionGapAvgSec() {
            return mSatelliteSessionGapAvgSec;
            return sSatelliteSessionGapAvgSec;
        }

        public int getSatelliteSessionGapMaxSec() {
            return mSatelliteSessionGapMaxSec;
            return sSatelliteSessionGapMaxSec;
        }

        public int getCarrierId() {
@@ -2190,9 +2198,9 @@ public class SatelliteStats {
            private int mCountOfEntitlementStatusQueryRequest = 0;
            private int mCountOfSatelliteConfigUpdateRequest = 0;
            private int mCountOfSatelliteNotificationDisplayed = 0;
            private int mSatelliteSessionGapMinSec = 0;
            private int mSatelliteSessionGapAvgSec = 0;
            private int mSatelliteSessionGapMaxSec = 0;
            private Optional<Integer> mSatelliteSessionGapMinSec = Optional.empty();
            private Optional<Integer> mSatelliteSessionGapAvgSec = Optional.empty();
            private Optional<Integer> mSatelliteSessionGapMaxSec = Optional.empty();
            private Optional<Integer> mCarrierId = Optional.empty();
            private Optional<Boolean> mIsDeviceEntitled = Optional.empty();

@@ -2240,7 +2248,7 @@ public class SatelliteStats {
             * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
             */
            public Builder setSatelliteSessionGapMinSec(int satelliteSessionGapMinSec) {
                this.mSatelliteSessionGapMinSec = satelliteSessionGapMinSec;
                this.mSatelliteSessionGapMinSec = Optional.of(satelliteSessionGapMinSec);
                return this;
            }

@@ -2249,7 +2257,7 @@ public class SatelliteStats {
             * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
             */
            public Builder setSatelliteSessionGapAvgSec(int satelliteSessionGapAvgSec) {
                this.mSatelliteSessionGapAvgSec = satelliteSessionGapAvgSec;
                this.mSatelliteSessionGapAvgSec = Optional.of(satelliteSessionGapAvgSec);
                return this;
            }

@@ -2258,7 +2266,7 @@ public class SatelliteStats {
             * {@link CarrierRoamingSatelliteControllerStats} atom then returns Builder class
             */
            public Builder setSatelliteSessionGapMaxSec(int satelliteSessionGapMaxSec) {
                this.mSatelliteSessionGapMaxSec = satelliteSessionGapMaxSec;
                this.mSatelliteSessionGapMaxSec = Optional.of(satelliteSessionGapMaxSec);
                return this;
            }

@@ -2294,9 +2302,9 @@ public class SatelliteStats {
                    + mCountOfSatelliteConfigUpdateRequest
                    + ", countOfSatelliteNotificationDisplayed="
                    + mCountOfSatelliteNotificationDisplayed
                    + ", satelliteSessionGapMinSec=" + mSatelliteSessionGapMinSec
                    + ", satelliteSessionGapAvgSec=" + mSatelliteSessionGapAvgSec
                    + ", satelliteSessionGapMaxSec=" + mSatelliteSessionGapMaxSec
                    + ", satelliteSessionGapMinSec=" + sSatelliteSessionGapMinSec
                    + ", satelliteSessionGapAvgSec=" + sSatelliteSessionGapAvgSec
                    + ", satelliteSessionGapMaxSec=" + sSatelliteSessionGapMaxSec
                    + ", carrierId=" + sCarrierId
                    + ", isDeviceEntitled=" + sIsDeviceEntitled
                    + ")";
@@ -2952,14 +2960,21 @@ public class SatelliteStats {
        proto.countOfEntitlementStatusQueryRequest = param.mCountOfEntitlementStatusQueryRequest;
        proto.countOfSatelliteConfigUpdateRequest = param.mCountOfSatelliteConfigUpdateRequest;
        proto.countOfSatelliteNotificationDisplayed = param.mCountOfSatelliteNotificationDisplayed;
        proto.satelliteSessionGapMinSec = param.mSatelliteSessionGapMinSec;
        proto.satelliteSessionGapAvgSec = param.mSatelliteSessionGapAvgSec;
        proto.satelliteSessionGapMaxSec = param.mSatelliteSessionGapMaxSec;
        proto.satelliteSessionGapMinSec = param.getSatelliteSessionGapMinSec();
        proto.satelliteSessionGapAvgSec = param.getSatelliteSessionGapAvgSec();
        proto.satelliteSessionGapMaxSec = param.getSatelliteSessionGapMaxSec();
        proto.carrierId = param.getCarrierId();
        proto.isDeviceEntitled = param.isDeviceEntitled();
        mAtomsStorage.addCarrierRoamingSatelliteControllerStats(proto);
    }

    /** Reset carrier roaming satellite controller stats after atom is pulled. */
    public synchronized void resetCarrierRoamingSatelliteControllerStats() {
        com.android.internal.telephony.satellite.metrics
                .CarrierRoamingSatelliteControllerStats.getOrCreateInstance()
                .resetSessionGapLists();
    }

    /**  Create a new atom for SatelliteEntitlement metrics */
    public synchronized  void onSatelliteEntitlementMetrics(SatelliteEntitlementParams param) {
        SatelliteEntitlement proto = new SatelliteEntitlement();
+2 −0
Original line number Diff line number Diff line
@@ -6121,12 +6121,14 @@ public class SatelliteController extends Handler {
                sessionStats.onSessionStart(phone.getCarrierId(), phone,
                        supported_satellite_services, dataPolicy);
                mCarrierRoamingSatelliteSessionStatsMap.put(subId, sessionStats);
                mCarrierRoamingSatelliteControllerStats.onSessionStart();
            } else if (lastNotifiedNtnMode && !currNtnMode) {
                // Log satellite session end
                CarrierRoamingSatelliteSessionStats sessionStats =
                        mCarrierRoamingSatelliteSessionStatsMap.get(subId);
                sessionStats.onSessionEnd();
                mCarrierRoamingSatelliteSessionStatsMap.remove(subId);
                mCarrierRoamingSatelliteControllerStats.onSessionEnd();
            }
        }
    }
+77 −0
Original line number Diff line number Diff line
@@ -22,15 +22,22 @@ import android.util.Log;
import com.android.internal.telephony.metrics.SatelliteStats;
import com.android.internal.telephony.satellite.SatelliteConstants;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CarrierRoamingSatelliteControllerStats {
    private static final String TAG = CarrierRoamingSatelliteControllerStats.class.getSimpleName();
    private static CarrierRoamingSatelliteControllerStats sInstance = null;
    private static final int ADD_COUNT = 1;

    private SatelliteStats mSatelliteStats;
    private List<Long> mSessionStartTimeList;
    private List<Long> mSessionEndTimeList;

    private CarrierRoamingSatelliteControllerStats() {
        mSatelliteStats = SatelliteStats.getInstance();
        resetSessionGapLists();
    }

    /**
@@ -96,6 +103,76 @@ public class CarrierRoamingSatelliteControllerStats {
                        .build());
    }

    /** Log carrier roaming satellite session start */
    public void onSessionStart() {
        mSessionStartTimeList.add(getCurrentTime());
    }

    /** Log carrier roaming satellite session end */
    public void onSessionEnd() {
        mSessionEndTimeList.add(getCurrentTime());

        int numberOfSatelliteSessions = getNumberOfSatelliteSessions();
        List<Integer> sessionGapList = getSatelliteSessionGapList(numberOfSatelliteSessions);
        int satelliteSessionGapMinSec = 0;
        int satelliteSessionGapMaxSec = 0;
        if (!sessionGapList.isEmpty()) {
            satelliteSessionGapMinSec = Collections.min(sessionGapList);
            satelliteSessionGapMaxSec = Collections.max(sessionGapList);
        }

        mSatelliteStats.onCarrierRoamingSatelliteControllerStatsMetrics(
                new SatelliteStats.CarrierRoamingSatelliteControllerStatsParams.Builder()
                        .setSatelliteSessionGapMinSec(satelliteSessionGapMinSec)
                        .setSatelliteSessionGapAvgSec(getAvg(sessionGapList))
                        .setSatelliteSessionGapMaxSec(satelliteSessionGapMaxSec)
                        .build());
    }

    /** Atom is pulled once per day. Reset session gap lists after the atom is pulled. */
    public void resetSessionGapLists() {
        mSessionStartTimeList = new ArrayList<>();
        mSessionEndTimeList = new ArrayList<>();
    }

    private int getNumberOfSatelliteSessions() {
        return Math.min(mSessionStartTimeList.size(), mSessionEndTimeList.size());
    }

    private List<Integer> getSatelliteSessionGapList(int numberOfSatelliteSessions) {
        if (numberOfSatelliteSessions == 0) {
            return new ArrayList<>();
        }

        List<Integer> sessionGapList = new ArrayList<>();
        for (int i = 1; i < numberOfSatelliteSessions; i++) {
            long prevSessionEndTime = mSessionEndTimeList.get(i - 1);
            long currentSessionStartTime = mSessionStartTimeList.get(i);
            if (currentSessionStartTime > prevSessionEndTime && prevSessionEndTime > 0) {
                sessionGapList.add((int) (
                        (currentSessionStartTime - prevSessionEndTime) / 1000));
            }
        }
        return sessionGapList;
    }

    private int getAvg(@NonNull List<Integer> list) {
        if (list.isEmpty()) {
            return 0;
        }

        int total = 0;
        for (int num : list) {
            total += num;
        }

        return total / list.size();
    }

    private long getCurrentTime() {
        return System.currentTimeMillis();
    }

    private static void logd(@NonNull String log) {
        Log.d(TAG, log);
    }