Loading proto/src/persist_atoms.proto +1 −0 Original line number Diff line number Diff line Loading @@ -437,6 +437,7 @@ message ImsRegistrationStats { optional int64 registering_millis = 13; optional int64 unregistered_millis = 14; optional bool is_iwlan_cross_sim = 15; optional int64 registered_times = 16; // Internal use only optional int64 last_used_millis = 10001; Loading src/java/com/android/internal/telephony/metrics/ImsStats.java +11 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,10 @@ public class ImsStats { return; } stats.registeredTimes = mLastRegistrationStats.registeredTimes; // initialize registeredTimes after copying mLastRegistrationStats to be updated mLastRegistrationStats.registeredTimes = 0; switch (mLastRegistrationState) { case REGISTRATION_STATE_REGISTERED: stats.registeredMillis = duration; Loading Loading @@ -341,6 +345,13 @@ public class ImsStats { if (mLastRegistrationState == REGISTRATION_STATE_NOT_REGISTERED) { updateImsRegistrationStats(); } if (mLastRegistrationState != REGISTRATION_STATE_REGISTERED) { // RegistrationStats captures in every state. Changing REGISTERED state has to capture // only once. mLastRegistrationStats.registeredTimes = 1; } mLastRegistrationStats.rat = convertTransportTypeToNetworkType(attributes.getTransportType()); mLastRegistrationStats.isIwlanCrossSim = attributes.getRegistrationTechnology() Loading src/java/com/android/internal/telephony/metrics/MetricsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -1118,7 +1118,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { roundAndConvertMillisToSeconds(stats.utAvailableMillis), roundAndConvertMillisToSeconds(stats.registeringMillis), roundAndConvertMillisToSeconds(stats.unregisteredMillis), stats.isIwlanCrossSim); stats.isIwlanCrossSim, roundAndConvertMillisToSeconds(stats.registeredTimes)); } private static StatsEvent buildStatsEvent(ImsRegistrationTermination termination) { Loading src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +3 −0 Original line number Diff line number Diff line Loading @@ -409,6 +409,7 @@ public class PersistAtomsStorage { existingStats.utAvailableMillis += stats.utAvailableMillis; existingStats.registeringMillis += stats.registeringMillis; existingStats.unregisteredMillis += stats.unregisteredMillis; existingStats.registeredTimes += stats.registeredTimes; existingStats.lastUsedMillis = getWallTimeMillis(); } else { stats.lastUsedMillis = getWallTimeMillis(); Loading Loading @@ -2290,6 +2291,8 @@ public class PersistAtomsStorage { normalizeDurationTo24H(stats[i].registeringMillis, intervalMillis); stats[i].unregisteredMillis = normalizeDurationTo24H(stats[i].unregisteredMillis, intervalMillis); stats[i].registeredTimes = normalizeDurationTo24H(stats[i].registeredTimes, intervalMillis); } return stats; } Loading tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(2000L, stats.utAvailableMillis); assertEquals(2000L, stats.smsCapableMillis); assertEquals(2000L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -292,6 +293,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -321,6 +323,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(2000L, stats.registeredMillis); assertEquals(2000L, stats.voiceCapableMillis); assertEquals(2000L, stats.voiceAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -374,6 +377,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0, stats.simSlotIndex); assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat); assertEquals(2000L, stats.unregisteredMillis); assertEquals(0, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -414,6 +418,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0, stats.simSlotIndex); assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, stats.rat); assertEquals(2000L, stats.registeringMillis); assertEquals(0, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -564,6 +569,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); // ServiceStateStats should be notified verify(mServiceStateStats).onImsVoiceRegistrationChanged(); Loading Loading @@ -603,6 +609,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); // ServiceStateStats should be notified verify(mServiceStateStats, times(2)).onImsVoiceRegistrationChanged(); Loading Loading @@ -642,6 +649,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(2000L, stats.smsCapableMillis); assertEquals(2000L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); // ServiceStateStats should not be notified verify(mServiceStateStats, never()).onImsVoiceRegistrationChanged(); Loading Loading @@ -679,6 +687,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -709,6 +718,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, statsLte.utAvailableMillis); assertEquals(0L, statsLte.smsCapableMillis); assertEquals(0L, statsLte.smsAvailableMillis); assertEquals(1, statsLte.registeredTimes); ImsRegistrationStats statsWifi = captor.getAllValues().get(1); assertEquals(CARRIER1_ID, statsWifi.carrierId); assertEquals(0, statsWifi.simSlotIndex); Loading @@ -722,6 +732,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, statsWifi.utAvailableMillis); assertEquals(0L, statsWifi.smsCapableMillis); assertEquals(0L, statsWifi.smsAvailableMillis); assertEquals(0, statsWifi.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading @@ -742,6 +753,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat); assertEquals(0L, stats.registeredMillis); assertEquals(2000L, stats.registeringMillis); assertEquals(0, stats.registeredTimes); } @Test Loading Loading @@ -778,6 +790,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0, stats.simSlotIndex); assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat); assertEquals(2000L, stats.unregisteredMillis); assertEquals(0, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -860,6 +873,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = ArgumentCaptor.forClass(ImsRegistrationTermination.class); verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture()); Loading Loading @@ -1086,6 +1100,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = ArgumentCaptor.forClass(ImsRegistrationTermination.class); verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture()); Loading Loading @@ -1120,6 +1135,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, stats.rat); assertEquals(true, stats.isIwlanCrossSim); assertEquals(2000L, stats.registeredMillis); assertEquals(1, stats.registeredTimes); ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = ArgumentCaptor.forClass(ImsRegistrationTermination.class); Loading Loading
proto/src/persist_atoms.proto +1 −0 Original line number Diff line number Diff line Loading @@ -437,6 +437,7 @@ message ImsRegistrationStats { optional int64 registering_millis = 13; optional int64 unregistered_millis = 14; optional bool is_iwlan_cross_sim = 15; optional int64 registered_times = 16; // Internal use only optional int64 last_used_millis = 10001; Loading
src/java/com/android/internal/telephony/metrics/ImsStats.java +11 −0 Original line number Diff line number Diff line Loading @@ -239,6 +239,10 @@ public class ImsStats { return; } stats.registeredTimes = mLastRegistrationStats.registeredTimes; // initialize registeredTimes after copying mLastRegistrationStats to be updated mLastRegistrationStats.registeredTimes = 0; switch (mLastRegistrationState) { case REGISTRATION_STATE_REGISTERED: stats.registeredMillis = duration; Loading Loading @@ -341,6 +345,13 @@ public class ImsStats { if (mLastRegistrationState == REGISTRATION_STATE_NOT_REGISTERED) { updateImsRegistrationStats(); } if (mLastRegistrationState != REGISTRATION_STATE_REGISTERED) { // RegistrationStats captures in every state. Changing REGISTERED state has to capture // only once. mLastRegistrationStats.registeredTimes = 1; } mLastRegistrationStats.rat = convertTransportTypeToNetworkType(attributes.getTransportType()); mLastRegistrationStats.isIwlanCrossSim = attributes.getRegistrationTechnology() Loading
src/java/com/android/internal/telephony/metrics/MetricsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -1118,7 +1118,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback { roundAndConvertMillisToSeconds(stats.utAvailableMillis), roundAndConvertMillisToSeconds(stats.registeringMillis), roundAndConvertMillisToSeconds(stats.unregisteredMillis), stats.isIwlanCrossSim); stats.isIwlanCrossSim, roundAndConvertMillisToSeconds(stats.registeredTimes)); } private static StatsEvent buildStatsEvent(ImsRegistrationTermination termination) { Loading
src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java +3 −0 Original line number Diff line number Diff line Loading @@ -409,6 +409,7 @@ public class PersistAtomsStorage { existingStats.utAvailableMillis += stats.utAvailableMillis; existingStats.registeringMillis += stats.registeringMillis; existingStats.unregisteredMillis += stats.unregisteredMillis; existingStats.registeredTimes += stats.registeredTimes; existingStats.lastUsedMillis = getWallTimeMillis(); } else { stats.lastUsedMillis = getWallTimeMillis(); Loading Loading @@ -2290,6 +2291,8 @@ public class PersistAtomsStorage { normalizeDurationTo24H(stats[i].registeringMillis, intervalMillis); stats[i].unregisteredMillis = normalizeDurationTo24H(stats[i].unregisteredMillis, intervalMillis); stats[i].registeredTimes = normalizeDurationTo24H(stats[i].registeredTimes, intervalMillis); } return stats; } Loading
tests/telephonytests/src/com/android/internal/telephony/metrics/ImsStatsTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -198,6 +198,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(2000L, stats.utAvailableMillis); assertEquals(2000L, stats.smsCapableMillis); assertEquals(2000L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -292,6 +293,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -321,6 +323,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(2000L, stats.registeredMillis); assertEquals(2000L, stats.voiceCapableMillis); assertEquals(2000L, stats.voiceAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -374,6 +377,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0, stats.simSlotIndex); assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat); assertEquals(2000L, stats.unregisteredMillis); assertEquals(0, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -414,6 +418,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0, stats.simSlotIndex); assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, stats.rat); assertEquals(2000L, stats.registeringMillis); assertEquals(0, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -564,6 +569,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); // ServiceStateStats should be notified verify(mServiceStateStats).onImsVoiceRegistrationChanged(); Loading Loading @@ -603,6 +609,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); // ServiceStateStats should be notified verify(mServiceStateStats, times(2)).onImsVoiceRegistrationChanged(); Loading Loading @@ -642,6 +649,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(2000L, stats.smsCapableMillis); assertEquals(2000L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); // ServiceStateStats should not be notified verify(mServiceStateStats, never()).onImsVoiceRegistrationChanged(); Loading Loading @@ -679,6 +687,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -709,6 +718,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, statsLte.utAvailableMillis); assertEquals(0L, statsLte.smsCapableMillis); assertEquals(0L, statsLte.smsAvailableMillis); assertEquals(1, statsLte.registeredTimes); ImsRegistrationStats statsWifi = captor.getAllValues().get(1); assertEquals(CARRIER1_ID, statsWifi.carrierId); assertEquals(0, statsWifi.simSlotIndex); Loading @@ -722,6 +732,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, statsWifi.utAvailableMillis); assertEquals(0L, statsWifi.smsCapableMillis); assertEquals(0L, statsWifi.smsAvailableMillis); assertEquals(0, statsWifi.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading @@ -742,6 +753,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat); assertEquals(0L, stats.registeredMillis); assertEquals(2000L, stats.registeringMillis); assertEquals(0, stats.registeredTimes); } @Test Loading Loading @@ -778,6 +790,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0, stats.simSlotIndex); assertEquals(TelephonyManager.NETWORK_TYPE_LTE, stats.rat); assertEquals(2000L, stats.unregisteredMillis); assertEquals(0, stats.registeredTimes); verifyNoMoreInteractions(mPersistAtomsStorage); } Loading Loading @@ -860,6 +873,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = ArgumentCaptor.forClass(ImsRegistrationTermination.class); verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture()); Loading Loading @@ -1086,6 +1100,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(0L, stats.utAvailableMillis); assertEquals(0L, stats.smsCapableMillis); assertEquals(0L, stats.smsAvailableMillis); assertEquals(1, stats.registeredTimes); ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = ArgumentCaptor.forClass(ImsRegistrationTermination.class); verify(mPersistAtomsStorage).addImsRegistrationTermination(terminationCaptor.capture()); Loading Loading @@ -1120,6 +1135,7 @@ public class ImsStatsTest extends TelephonyTest { assertEquals(TelephonyManager.NETWORK_TYPE_IWLAN, stats.rat); assertEquals(true, stats.isIwlanCrossSim); assertEquals(2000L, stats.registeredMillis); assertEquals(1, stats.registeredTimes); ArgumentCaptor<ImsRegistrationTermination> terminationCaptor = ArgumentCaptor.forClass(ImsRegistrationTermination.class); Loading