use of com.android.internal.telephony.nano.PersistAtomsProto.RawVoiceCallRatUsage in project android_frameworks_opt_telephony by LineageOS.
the class PersistAtomsStorageTest method multiplyVoiceCallRatUsage.
private static RawVoiceCallRatUsage[] multiplyVoiceCallRatUsage(RawVoiceCallRatUsage[] usages, int times) {
RawVoiceCallRatUsage[] multipliedUsages = new RawVoiceCallRatUsage[usages.length];
for (int i = 0; i < usages.length; i++) {
multipliedUsages[i] = new RawVoiceCallRatUsage();
multipliedUsages[i].carrierId = usages[i].carrierId;
multipliedUsages[i].rat = usages[i].rat;
multipliedUsages[i].callCount = usages[i].callCount * 2;
multipliedUsages[i].totalDurationMillis = usages[i].totalDurationMillis * 2;
}
return multipliedUsages;
}
use of com.android.internal.telephony.nano.PersistAtomsProto.RawVoiceCallRatUsage in project android_frameworks_opt_telephony by LineageOS.
the class VoiceCallSessionStatsTest method concurrentImsCalls_firstCallHangupLast.
@Test
@SmallTest
public void concurrentImsCalls_firstCallHangupLast() {
doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getVoiceNetworkType();
// call 0 starts first, MO
doReturn(false).when(mImsConnection0).isIncoming();
doReturn(2000L).when(mImsConnection0).getCreateTime();
doReturn(mImsCall0).when(mImsConnection0).getCall();
doReturn(new ArrayList(List.of(mImsConnection0))).when(mImsCall0).getConnections();
VoiceCallSession expectedCall0 = makeSlot0CallProto(VOICE_CALL_SESSION__BEARER_AT_END__CALL_BEARER_IMS, VOICE_CALL_SESSION__DIRECTION__CALL_DIRECTION_MO, TelephonyManager.NETWORK_TYPE_LTE, ImsReasonInfo.CODE_USER_TERMINATED);
expectedCall0.setupDuration = VOICE_CALL_SESSION__SETUP_DURATION__CALL_SETUP_DURATION_ULTRA_FAST;
expectedCall0.setupFailed = false;
expectedCall0.codecBitmask = 1L << AudioCodec.AUDIO_CODEC_AMR;
expectedCall0.concurrentCallCountAtStart = 0;
expectedCall0.concurrentCallCountAtEnd = 0;
expectedCall0.ratSwitchCount = 2L;
expectedCall0.ratAtEnd = TelephonyManager.NETWORK_TYPE_UMTS;
// call 1 starts later, MT
doReturn(true).when(mImsConnection1).isIncoming();
doReturn(60000L).when(mImsConnection1).getCreateTime();
doReturn(mImsCall1).when(mImsConnection1).getCall();
doReturn(new ArrayList(List.of(mImsConnection1))).when(mImsCall1).getConnections();
VoiceCallSession expectedCall1 = makeSlot0CallProto(VOICE_CALL_SESSION__BEARER_AT_END__CALL_BEARER_IMS, VOICE_CALL_SESSION__DIRECTION__CALL_DIRECTION_MT, TelephonyManager.NETWORK_TYPE_LTE, ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE);
expectedCall1.setupDuration = VOICE_CALL_SESSION__SETUP_DURATION__CALL_SETUP_DURATION_EXTREMELY_FAST;
expectedCall1.setupFailed = false;
expectedCall1.codecBitmask = 1L << AudioCodec.AUDIO_CODEC_AMR;
expectedCall1.concurrentCallCountAtStart = 1;
expectedCall1.concurrentCallCountAtEnd = 1;
expectedCall1.ratSwitchCount = 1L;
expectedCall1.ratAtEnd = TelephonyManager.NETWORK_TYPE_HSPA;
RawVoiceCallRatUsage expectedRatUsageLte = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_LTE, 2000L, 80000L, 2L);
RawVoiceCallRatUsage expectedRatUsageHspa = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_HSPA, 80000L, 100000L, 2L);
RawVoiceCallRatUsage expectedRatUsageUmts = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_UMTS, 100000L, 120000L, 1L);
final AtomicReference<RawVoiceCallRatUsage[]> ratUsage = setupRatUsageCapture();
// call 0 dial
mVoiceCallSessionStats0.setTimeMillis(2000L);
doReturn(Call.State.DIALING).when(mImsCall0).getState();
doReturn(Call.State.DIALING).when(mImsConnection0).getState();
mVoiceCallSessionStats0.onImsDial(mImsConnection0);
mVoiceCallSessionStats0.setTimeMillis(2020L);
mVoiceCallSessionStats0.onAudioCodecChanged(mImsConnection0, ImsStreamMediaProfile.AUDIO_QUALITY_AMR);
mVoiceCallSessionStats0.setTimeMillis(2080L);
doReturn(Call.State.ALERTING).when(mImsCall0).getState();
doReturn(Call.State.ALERTING).when(mImsConnection0).getState();
mVoiceCallSessionStats0.onCallStateChanged(mImsCall0);
mVoiceCallSessionStats0.setTimeMillis(4000L);
doReturn(Call.State.ACTIVE).when(mImsCall0).getState();
doReturn(Call.State.ACTIVE).when(mImsConnection0).getState();
mVoiceCallSessionStats0.onCallStateChanged(mImsCall0);
// call 1 ring
mVoiceCallSessionStats0.setTimeMillis(60000L);
doReturn(Call.State.INCOMING).when(mImsCall1).getState();
doReturn(Call.State.INCOMING).when(mImsConnection1).getState();
mVoiceCallSessionStats0.onImsCallReceived(mImsConnection1);
mVoiceCallSessionStats0.setTimeMillis(60100L);
mVoiceCallSessionStats0.onAudioCodecChanged(mImsConnection1, ImsStreamMediaProfile.AUDIO_QUALITY_AMR);
mVoiceCallSessionStats0.setTimeMillis(65000L);
mVoiceCallSessionStats0.onImsAcceptCall(List.of(mImsConnection1));
mVoiceCallSessionStats0.setTimeMillis(65020L);
doReturn(Call.State.ACTIVE).when(mImsCall1).getState();
doReturn(Call.State.ACTIVE).when(mImsConnection1).getState();
mVoiceCallSessionStats0.onCallStateChanged(mImsCall1);
// RAT change, LTE to HSPA
mVoiceCallSessionStats0.setTimeMillis(80000L);
doReturn(TelephonyManager.NETWORK_TYPE_HSPA).when(mServiceState).getVoiceNetworkType();
mVoiceCallSessionStats0.onServiceStateChanged(mServiceState);
// call 1 hangup by remote
mVoiceCallSessionStats0.setTimeMillis(90000L);
mVoiceCallSessionStats0.onImsCallTerminated(mImsConnection1, new ImsReasonInfo(ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE, 0));
// RAT change, HSPA to UMTS
mVoiceCallSessionStats0.setTimeMillis(100000L);
doReturn(TelephonyManager.NETWORK_TYPE_UMTS).when(mServiceState).getVoiceNetworkType();
mVoiceCallSessionStats0.onServiceStateChanged(mServiceState);
// call 0 hangup by local
mVoiceCallSessionStats0.setTimeMillis(120000L);
mVoiceCallSessionStats0.onImsCallTerminated(mImsConnection0, new ImsReasonInfo(ImsReasonInfo.CODE_USER_TERMINATED, 0));
ArgumentCaptor<VoiceCallSession> callCaptor = ArgumentCaptor.forClass(VoiceCallSession.class);
verify(mPersistAtomsStorage, times(2)).addVoiceCallSession(callCaptor.capture());
verify(mPersistAtomsStorage, times(1)).addVoiceCallRatUsage(any());
verifyNoMoreInteractions(mPersistAtomsStorage);
assertSortedProtoArrayEquals(new VoiceCallSession[] { expectedCall0, expectedCall1 }, callCaptor.getAllValues().stream().toArray(VoiceCallSession[]::new));
assertSortedProtoArrayEquals(new RawVoiceCallRatUsage[] { expectedRatUsageLte, expectedRatUsageHspa, expectedRatUsageUmts }, ratUsage.get());
}
use of com.android.internal.telephony.nano.PersistAtomsProto.RawVoiceCallRatUsage in project android_frameworks_opt_telephony by LineageOS.
the class VoiceCallSessionStatsTest method singleCsCall_moAccepted.
@Test
@SmallTest
public void singleCsCall_moAccepted() {
doReturn(false).when(mGsmConnection0).isIncoming();
doReturn(2000L).when(mGsmConnection0).getCreateTime();
doReturn(mCsCall0).when(mGsmConnection0).getCall();
VoiceCallSession expectedCall = makeSlot0CallProto(VOICE_CALL_SESSION__BEARER_AT_END__CALL_BEARER_CS, VOICE_CALL_SESSION__DIRECTION__CALL_DIRECTION_MO, TelephonyManager.NETWORK_TYPE_LTE, DisconnectCause.NORMAL);
expectedCall.ratAtEnd = TelephonyManager.NETWORK_TYPE_UMTS;
expectedCall.setupDuration = VOICE_CALL_SESSION__SETUP_DURATION__CALL_SETUP_DURATION_VERY_SLOW;
expectedCall.disconnectExtraCode = PreciseDisconnectCause.NORMAL;
expectedCall.ratSwitchCount = 1L;
expectedCall.setupFailed = false;
expectedCall.codecBitmask = 1L << AudioCodec.AUDIO_CODEC_AMR;
RawVoiceCallRatUsage expectedRatUsageLte = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_LTE, 2000L, 3000L, 1L);
RawVoiceCallRatUsage expectedRatUsageUmts = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_UMTS, 3000L, 100000L, 1L);
final AtomicReference<RawVoiceCallRatUsage[]> ratUsage = setupRatUsageCapture();
mVoiceCallSessionStats0.setTimeMillis(2000L);
doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getVoiceNetworkType();
doReturn(Call.State.DIALING).when(mCsCall0).getState();
doReturn(Call.State.DIALING).when(mGsmConnection0).getState();
doReturn(DisconnectCause.NOT_DISCONNECTED).when(mGsmConnection0).getDisconnectCause();
mVoiceCallSessionStats0.onRilDial(mGsmConnection0);
mVoiceCallSessionStats0.setTimeMillis(3000L);
doReturn(TelephonyManager.NETWORK_TYPE_UMTS).when(mServiceState).getVoiceNetworkType();
mVoiceCallSessionStats0.onServiceStateChanged(mServiceState);
mVoiceCallSessionStats0.setTimeMillis(3100L);
mVoiceCallSessionStats0.onAudioCodecChanged(mGsmConnection0, DriverCall.AUDIO_QUALITY_AMR);
mVoiceCallSessionStats0.setTimeMillis(7000L);
doReturn(Call.State.ALERTING).when(mCsCall0).getState();
doReturn(Call.State.ALERTING).when(mGsmConnection0).getState();
mVoiceCallSessionStats0.onRilCallListChanged(List.of(mGsmConnection0));
mVoiceCallSessionStats0.setTimeMillis(10000L);
doReturn(Call.State.ACTIVE).when(mCsCall0).getState();
doReturn(Call.State.ACTIVE).when(mGsmConnection0).getState();
mVoiceCallSessionStats0.onRilCallListChanged(List.of(mGsmConnection0));
mVoiceCallSessionStats0.setTimeMillis(100000L);
doReturn(DisconnectCause.NORMAL).when(mGsmConnection0).getDisconnectCause();
doReturn(PreciseDisconnectCause.NORMAL).when(mGsmConnection0).getPreciseDisconnectCause();
mVoiceCallSessionStats0.onRilCallListChanged(List.of(mGsmConnection0));
ArgumentCaptor<VoiceCallSession> callCaptor = ArgumentCaptor.forClass(VoiceCallSession.class);
verify(mPersistAtomsStorage, times(1)).addVoiceCallSession(callCaptor.capture());
verify(mPersistAtomsStorage, times(1)).addVoiceCallRatUsage(any());
verifyNoMoreInteractions(mPersistAtomsStorage);
assertProtoEquals(expectedCall, callCaptor.getValue());
assertSortedProtoArrayEquals(new RawVoiceCallRatUsage[] { expectedRatUsageLte, expectedRatUsageUmts }, ratUsage.get());
}
use of com.android.internal.telephony.nano.PersistAtomsProto.RawVoiceCallRatUsage in project android_frameworks_opt_telephony by LineageOS.
the class VoiceCallSessionStatsTest method singleImsCall_moAccepted.
@Test
@SmallTest
public void singleImsCall_moAccepted() {
doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getVoiceNetworkType();
doReturn(false).when(mImsConnection0).isIncoming();
doReturn(2000L).when(mImsConnection0).getCreateTime();
doReturn(mImsCall0).when(mImsConnection0).getCall();
doReturn(new ArrayList(List.of(mImsConnection0))).when(mImsCall0).getConnections();
VoiceCallSession expectedCall = makeSlot0CallProto(VOICE_CALL_SESSION__BEARER_AT_END__CALL_BEARER_IMS, VOICE_CALL_SESSION__DIRECTION__CALL_DIRECTION_MO, TelephonyManager.NETWORK_TYPE_LTE, ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE);
expectedCall.setupDuration = VOICE_CALL_SESSION__SETUP_DURATION__CALL_SETUP_DURATION_VERY_FAST;
expectedCall.setupFailed = false;
expectedCall.codecBitmask = 1L << AudioCodec.AUDIO_CODEC_EVS_SWB;
expectedCall.disconnectExtraMessage = "normal call clearing";
RawVoiceCallRatUsage expectedRatUsage = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_LTE, 2000L, 100000L, 1L);
final AtomicReference<RawVoiceCallRatUsage[]> ratUsage = setupRatUsageCapture();
mVoiceCallSessionStats0.setTimeMillis(2000L);
doReturn(Call.State.DIALING).when(mImsCall0).getState();
doReturn(Call.State.DIALING).when(mImsConnection0).getState();
mVoiceCallSessionStats0.onImsDial(mImsConnection0);
mVoiceCallSessionStats0.setTimeMillis(2100L);
mVoiceCallSessionStats0.onAudioCodecChanged(mImsConnection0, ImsStreamMediaProfile.AUDIO_QUALITY_EVS_SWB);
mVoiceCallSessionStats0.setTimeMillis(2200L);
doReturn(Call.State.ALERTING).when(mImsCall0).getState();
doReturn(Call.State.ALERTING).when(mImsConnection0).getState();
mVoiceCallSessionStats0.onCallStateChanged(mImsCall0);
mVoiceCallSessionStats0.setTimeMillis(12000L);
doReturn(Call.State.ACTIVE).when(mImsCall0).getState();
doReturn(Call.State.ACTIVE).when(mImsConnection0).getState();
mVoiceCallSessionStats0.onCallStateChanged(mImsCall0);
mVoiceCallSessionStats0.setTimeMillis(100000L);
mVoiceCallSessionStats0.onImsCallTerminated(mImsConnection0, new ImsReasonInfo(ImsReasonInfo.CODE_USER_TERMINATED_BY_REMOTE, 0, "normal call clearing"));
ArgumentCaptor<VoiceCallSession> callCaptor = ArgumentCaptor.forClass(VoiceCallSession.class);
verify(mPersistAtomsStorage, times(1)).addVoiceCallSession(callCaptor.capture());
verify(mPersistAtomsStorage, times(1)).addVoiceCallRatUsage(any());
verifyNoMoreInteractions(mPersistAtomsStorage);
assertProtoEquals(expectedCall, callCaptor.getValue());
assertThat(ratUsage.get()).hasLength(1);
assertProtoEquals(expectedRatUsage, ratUsage.get()[0]);
}
use of com.android.internal.telephony.nano.PersistAtomsProto.RawVoiceCallRatUsage in project android_frameworks_opt_telephony by LineageOS.
the class VoiceCallSessionStatsTest method singleCsCall_moRejected.
@Test
@SmallTest
public void singleCsCall_moRejected() {
doReturn(false).when(mGsmConnection0).isIncoming();
doReturn(2000L).when(mGsmConnection0).getCreateTime();
doReturn(mCsCall0).when(mGsmConnection0).getCall();
VoiceCallSession expectedCall = makeSlot0CallProto(VOICE_CALL_SESSION__BEARER_AT_END__CALL_BEARER_CS, VOICE_CALL_SESSION__DIRECTION__CALL_DIRECTION_MO, TelephonyManager.NETWORK_TYPE_LTE, DisconnectCause.NORMAL);
expectedCall.ratAtEnd = TelephonyManager.NETWORK_TYPE_UMTS;
expectedCall.setupDuration = VOICE_CALL_SESSION__SETUP_DURATION__CALL_SETUP_DURATION_VERY_SLOW;
expectedCall.disconnectExtraCode = PreciseDisconnectCause.CALL_REJECTED;
expectedCall.ratSwitchCount = 1L;
expectedCall.setupFailed = true;
expectedCall.codecBitmask = 1L << AudioCodec.AUDIO_CODEC_AMR;
RawVoiceCallRatUsage expectedRatUsageLte = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_LTE, 2000L, 3000L, 1L);
RawVoiceCallRatUsage expectedRatUsageUmts = makeRatUsageProto(CARRIER_ID_SLOT_0, TelephonyManager.NETWORK_TYPE_UMTS, 3000L, 15000L, 1L);
final AtomicReference<RawVoiceCallRatUsage[]> ratUsage = setupRatUsageCapture();
mVoiceCallSessionStats0.setTimeMillis(2000L);
doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getVoiceNetworkType();
doReturn(Call.State.DIALING).when(mCsCall0).getState();
doReturn(Call.State.DIALING).when(mGsmConnection0).getState();
doReturn(DisconnectCause.NOT_DISCONNECTED).when(mGsmConnection0).getDisconnectCause();
mVoiceCallSessionStats0.onRilDial(mGsmConnection0);
mVoiceCallSessionStats0.setTimeMillis(3000L);
doReturn(TelephonyManager.NETWORK_TYPE_UMTS).when(mServiceState).getVoiceNetworkType();
mVoiceCallSessionStats0.onServiceStateChanged(mServiceState);
mVoiceCallSessionStats0.setTimeMillis(3100L);
mVoiceCallSessionStats0.onAudioCodecChanged(mGsmConnection0, DriverCall.AUDIO_QUALITY_AMR);
mVoiceCallSessionStats0.setTimeMillis(7000L);
doReturn(Call.State.ALERTING).when(mCsCall0).getState();
doReturn(Call.State.ALERTING).when(mGsmConnection0).getState();
mVoiceCallSessionStats0.onRilCallListChanged(List.of(mGsmConnection0));
mVoiceCallSessionStats0.setTimeMillis(15000L);
doReturn(DisconnectCause.NORMAL).when(mGsmConnection0).getDisconnectCause();
doReturn(PreciseDisconnectCause.CALL_REJECTED).when(mGsmConnection0).getPreciseDisconnectCause();
mVoiceCallSessionStats0.onRilCallListChanged(List.of(mGsmConnection0));
ArgumentCaptor<VoiceCallSession> callCaptor = ArgumentCaptor.forClass(VoiceCallSession.class);
verify(mPersistAtomsStorage, times(1)).addVoiceCallSession(callCaptor.capture());
verify(mPersistAtomsStorage, times(1)).addVoiceCallRatUsage(any());
verifyNoMoreInteractions(mPersistAtomsStorage);
assertProtoEquals(expectedCall, callCaptor.getValue());
assertSortedProtoArrayEquals(new RawVoiceCallRatUsage[] { expectedRatUsageLte, expectedRatUsageUmts }, ratUsage.get());
}
Aggregations