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

Commit 09bc48df authored by Hall Liu's avatar Hall Liu Committed by android-build-merger
Browse files

Add cap on number of calls stored in analytics am: d93b9ece am: 27a76bca

am: 2fbb880a

Change-Id: I27b66f2a44bb95facbabb7a261b260f080a42f17
parents b794cfc1 2fbb880a
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.stream.Collectors;

import static android.telecom.ParcelableCallAnalytics.AnalyticsEvent;
@@ -523,8 +524,11 @@ public class Analytics {

    public static final long MILLIS_IN_1_SECOND = ParcelableCallAnalytics.MILLIS_IN_1_SECOND;

    public static final int MAX_NUM_CALLS_TO_STORE = 100;

    private static final Object sLock = new Object(); // Coarse lock for all of analytics
    private static final Map<String, CallInfoImpl> sCallIdToInfo = new HashMap<>();
    private static final LinkedList<String> sActiveCallIds = new LinkedList<>();
    private static final List<SessionTiming> sSessionTimings = new LinkedList<>();

    public static void addSessionTiming(String sessionName, long time) {
@@ -540,7 +544,12 @@ public class Analytics {
        Log.d(TAG, "Starting analytics for call " + callId);
        CallInfoImpl callInfo = new CallInfoImpl(callId, direction);
        synchronized (sLock) {
            while (sActiveCallIds.size() >= MAX_NUM_CALLS_TO_STORE) {
                String callToRemove = sActiveCallIds.remove();
                sCallIdToInfo.remove(callToRemove);
            }
            sCallIdToInfo.put(callId, callInfo);
            sActiveCallIds.add(callId);
        }
        return callInfo;
    }
+21 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.server.telecom.TelecomLogClass;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -338,6 +339,26 @@ public class AnalyticsTests extends TelecomSystemTest {
                analyticsProto.callLogs[0].getConnectionProperties() & expectedProperties);
    }

    @SmallTest
    public void testAnalyticsMaxSize() throws Exception {
        Analytics.reset();
        for (int i = 0; i < Analytics.MAX_NUM_CALLS_TO_STORE * 2; i++) {
            Analytics.initiateCallAnalytics(String.valueOf(i), Analytics.INCOMING_DIRECTION)
                    .addCallTechnology(i);
        }

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        Analytics.dumpToEncodedProto(pw, new String[]{});
        TelecomLogClass.TelecomLog analyticsProto =
                TelecomLogClass.TelecomLog.parseFrom(Base64.decode(sw.toString(), Base64.DEFAULT));

        assertEquals(Analytics.MAX_NUM_CALLS_TO_STORE, analyticsProto.callLogs.length);
        assertEquals(Arrays.stream(analyticsProto.callLogs)
                .filter(x -> x.getCallTechnologies() < 100)
                .count(), 0);
    }

    private void assertIsRoundedToOneSigFig(long x) {
        assertEquals(x, Analytics.roundToOneSigFig(x));
    }