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

Commit b70dee8e authored by Julian Thomassie's avatar Julian Thomassie Committed by joonhunshin
Browse files

Conclude stats before saving/clearing TelephonyDebugService atoms

Fixes: 231615417
Test: atest FrameworksTelephonyTests passes
Test: manually triggered saveatoms
Change-Id: I03a06c4c91114f17b945300717b1987faced01c1
parent 83e50b48
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -52,13 +52,15 @@ public class DebugService {
                    TelephonyMetrics.getInstance().dump(fd, pw, args);
                    return;
                case "--saveatoms":
                    if (Build.IS_DEBUGGABLE) {
                        log("Saving atoms..");
                    PhoneFactory.getMetricsCollector().getAtomsStorage().flushAtoms();
                        PhoneFactory.getMetricsCollector().flushAtomsStorage();
                    }
                    return;
                case "--clearatoms":
                    if (Build.IS_DEBUGGABLE) {
                        log("Clearing atoms..");
                        PhoneFactory.getMetricsCollector().getAtomsStorage().clearAtoms();
                        PhoneFactory.getMetricsCollector().clearAtomsStorage();
                    }
                    return;
            }
+43 −15
Original line number Diff line number Diff line
@@ -263,6 +263,18 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
        return mStorage;
    }

    /** Updates duration segments and calls {@link PersistAtomsStorage#flushAtoms()}. */
    public void flushAtomsStorage() {
        concludeAll();
        mStorage.flushAtoms();
    }

    /** Updates duration segments and calls {@link PersistAtomsStorage#clearAtoms()}. */
    public void clearAtomsStorage() {
        concludeAll();
        mStorage.clearAtoms();
    }

    /**
     * Registers a {@link DataCallSessionStats} which will be pinged for on-going data calls when
     * data call atoms are pulled.
@@ -276,6 +288,34 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
        mOngoingDataCallStats.remove(call);
    }

    private void concludeDataCallSessionStats() {
        for (DataCallSessionStats stats : mOngoingDataCallStats) {
            stats.conclude();
        }
    }

    private void concludeImsStats() {
        for (Phone phone : getPhonesIfAny()) {
            ImsPhone imsPhone = (ImsPhone) phone.getImsPhone();
            if (imsPhone != null) {
                imsPhone.getImsStats().conclude();
            }
        }
    }

    private void concludeServiceStateStats() {
        for (Phone phone : getPhonesIfAny()) {
            phone.getServiceStateTracker().getServiceStateStats().conclude();
        }
    }

    private void concludeAll() {
        concludeDataCallSessionStats();
        concludeImsStats();
        concludeServiceStateStats();
        RcsStats.getInstance().concludeSipTransportFeatureTagsStat();
    }

    private static int pullSimSlotState(List<StatsEvent> data) {
        SimSlotState state;
        try {
@@ -383,10 +423,7 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {

    private int pullDataCallSession(List<StatsEvent> data) {
        // Include ongoing data call segments
        for (DataCallSessionStats stats : mOngoingDataCallStats) {
            stats.conclude();
        }

        concludeDataCallSessionStats();
        DataCallSession[] dataCallSessions = mStorage.getDataCallSessions(MIN_COOLDOWN_MILLIS);
        if (dataCallSessions != null) {
            Arrays.stream(dataCallSessions)
@@ -414,10 +451,7 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {

    private int pullCellularServiceState(List<StatsEvent> data) {
        // Include the latest durations
        for (Phone phone : getPhonesIfAny()) {
            phone.getServiceStateTracker().getServiceStateStats().conclude();
        }

        concludeServiceStateStats();
        CellularServiceState[] persistAtoms =
                mStorage.getCellularServiceStates(MIN_COOLDOWN_MILLIS);
        if (persistAtoms != null) {
@@ -433,13 +467,7 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {

    private int pullImsRegistrationStats(List<StatsEvent> data) {
        // Include the latest durations
        for (Phone phone : getPhonesIfAny()) {
            ImsPhone imsPhone = (ImsPhone) phone.getImsPhone();
            if (imsPhone != null) {
                imsPhone.getImsStats().conclude();
            }
        }

        concludeImsStats();
        ImsRegistrationStats[] persistAtoms = mStorage.getImsRegistrationStats(MIN_COOLDOWN_MILLIS);
        if (persistAtoms != null) {
            // list is already shuffled when instances were inserted