Add max signal level into satellite session metrics
It is added to report latest ntn signal strength when the latest is stronger than prior one. the max value will be logged per enabled satellite session
Bug: 336858177
Test: SatelliteStatsTest PersistAtomsStorageTest
manually tested using satellite enable and compare log and the value in persist_atoms.pb proto
Change-Id: Id79f4eda855acb17b31fde7fbf4a7fe5505dac1e
diff --git a/proto/src/persist_atoms.proto b/proto/src/persist_atoms.proto
index 46a2400..3847fcd 100644
--- a/proto/src/persist_atoms.proto
+++ b/proto/src/persist_atoms.proto
@@ -682,6 +682,7 @@
optional int32 count_of_incoming_datagram_success = 10;
optional int32 count_of_incoming_datagram_failed = 11;
optional bool is_demo_mode = 12;
+ optional int32 max_ntn_signal_strength_level = 13;
}
message SatelliteIncomingDatagram {
diff --git a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
index 61325316..0031c7e 100644
--- a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
+++ b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
@@ -1370,7 +1370,8 @@
satelliteSession.countOfOutgoingDatagramFailed,
satelliteSession.countOfIncomingDatagramSuccess,
satelliteSession.countOfIncomingDatagramFailed,
- satelliteSession.isDemoMode);
+ satelliteSession.isDemoMode,
+ satelliteSession.maxNtnSignalStrengthLevel);
}
private static StatsEvent buildStatsEvent(SatelliteIncomingDatagram stats) {
diff --git a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
index 979777b..8afdc36 100644
--- a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
+++ b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
@@ -2066,7 +2066,7 @@
}
/**
- * Returns SatelliteOutgoingDatagram atom that has same values or {@code null}
+ * Returns SatelliteSession atom that has same values or {@code null}
* if it does not exist.
*/
private @Nullable SatelliteSession find(
@@ -2085,7 +2085,8 @@
&& stats.countOfOutgoingDatagramFailed == key.countOfOutgoingDatagramFailed
&& stats.countOfIncomingDatagramSuccess == key.countOfIncomingDatagramSuccess
&& stats.countOfIncomingDatagramFailed == key.countOfIncomingDatagramFailed
- && stats.isDemoMode == key.isDemoMode) {
+ && stats.isDemoMode == key.isDemoMode
+ && stats.maxNtnSignalStrengthLevel == key.maxNtnSignalStrengthLevel) {
return stats;
}
}
@@ -2093,7 +2094,7 @@
}
/**
- * Returns SatelliteOutgoingDatagram atom that has same values or {@code null}
+ * Returns SatelliteSosMessageRecommender atom that has same values or {@code null}
* if it does not exist.
*/
private @Nullable SatelliteSosMessageRecommender find(
diff --git a/src/java/com/android/internal/telephony/metrics/SatelliteStats.java b/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
index a9aab58..e097c62 100644
--- a/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
+++ b/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
@@ -16,6 +16,9 @@
package com.android.internal.telephony.metrics;
+import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
+
+import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import com.android.internal.telephony.PhoneFactory;
@@ -560,6 +563,7 @@
private final int mCountOfIncomingDatagramSuccess;
private final int mCountOfIncomingDatagramFailed;
private final boolean mIsDemoMode;
+ private final @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel;
private SatelliteSessionParams(Builder builder) {
this.mSatelliteServiceInitializationResult =
@@ -575,6 +579,7 @@
this.mCountOfIncomingDatagramSuccess = builder.mCountOfIncomingDatagramSuccess;
this.mCountOfIncomingDatagramFailed = builder.mCountOfIncomingDatagramFailed;
this.mIsDemoMode = builder.mIsDemoMode;
+ this.mMaxNtnSignalStrengthLevel = builder.mMaxNtnSignalStrengthLevel;
}
public int getSatelliteServiceInitializationResult() {
@@ -621,6 +626,10 @@
return mIsDemoMode;
}
+ public @NtnSignalStrength.NtnSignalStrengthLevel int getMaxNtnSignalStrengthLevel() {
+ return mMaxNtnSignalStrengthLevel;
+ }
+
/**
* A builder class to create {@link SatelliteSessionParams} data structure class
*/
@@ -636,6 +645,8 @@
private int mCountOfIncomingDatagramSuccess = -1;
private int mCountOfIncomingDatagramFailed = -1;
private boolean mIsDemoMode = false;
+ private @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel =
+ NTN_SIGNAL_STRENGTH_NONE;
/**
* Sets satelliteServiceInitializationResult value of {@link SatelliteSession}
@@ -711,6 +722,13 @@
return this;
}
+ /** Sets the max ntn signal strength for the satellite session */
+ public Builder setMaxNtnSignalStrengthLevel(
+ @NtnSignalStrength.NtnSignalStrengthLevel int maxNtnSignalStrengthLevel) {
+ this.mMaxNtnSignalStrengthLevel = maxNtnSignalStrengthLevel;
+ return this;
+ }
+
/**
* Returns SessionParams, which contains whole component of
* {@link SatelliteSession} atom
@@ -735,6 +753,7 @@
+ ", CountOfIncomingDatagramSuccess=" + mCountOfIncomingDatagramSuccess
+ ", CountOfIncomingDatagramFailed=" + mCountOfIncomingDatagramFailed
+ ", IsDemoMode=" + mIsDemoMode
+ + ", MaxNtnSignalStrengthLevel=" + mMaxNtnSignalStrengthLevel
+ ")";
}
}
@@ -1261,6 +1280,7 @@
proto.countOfIncomingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
proto.countOfIncomingDatagramFailed = param.getCountOfOutgoingDatagramFailed();
proto.isDemoMode = param.getIsDemoMode();
+ proto.maxNtnSignalStrengthLevel = param.getMaxNtnSignalStrengthLevel();
mAtomsStorage.addSatelliteSessionStats(proto);
}
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index c0917fe..acdb6c2 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -3430,6 +3430,7 @@
synchronized (mNtnSignalsStrengthLock) {
mNtnSignalStrength = ntnSignalStrength;
}
+ mSessionMetricsStats.updateMaxNtnSignalStrengthLevel(ntnSignalStrength.getLevel());
List<INtnSignalStrengthCallback> deadCallersList = new ArrayList<>();
mNtnSignalStrengthChangedListeners.values().forEach(listener -> {
diff --git a/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java b/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java
index c50db07..73ede60 100644
--- a/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java
+++ b/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java
@@ -16,7 +16,10 @@
package com.android.internal.telephony.satellite.metrics;
+import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
+
import android.annotation.NonNull;
+import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import android.util.Log;
@@ -41,7 +44,7 @@
private int mCountOfSuccessfulIncomingDatagram;
private int mCountOfIncomingDatagramFailed;
private boolean mIsDemoMode;
-
+ private @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel;
private SessionMetricsStats() {
initializeSessionMetricsParam();
@@ -144,6 +147,17 @@
return this;
}
+ /** Updates the max Ntn signal strength level for the session. */
+ public SessionMetricsStats updateMaxNtnSignalStrengthLevel(
+ @NtnSignalStrength.NtnSignalStrengthLevel int latestNtnSignalStrengthLevel) {
+ if (latestNtnSignalStrengthLevel > mMaxNtnSignalStrengthLevel) {
+ mMaxNtnSignalStrengthLevel = latestNtnSignalStrengthLevel;
+ }
+ logd("updateMaxNtnSignalsStrength: latest signal strength=" + latestNtnSignalStrengthLevel
+ + ", max signal strength=" + mMaxNtnSignalStrengthLevel);
+ return this;
+ }
+
/** Report the session metrics atoms to PersistAtomsStorage in telephony. */
public void reportSessionMetrics() {
SatelliteStats.SatelliteSessionParams sessionParams =
@@ -159,6 +173,7 @@
.setCountOfIncomingDatagramSuccess(mCountOfSuccessfulIncomingDatagram)
.setCountOfIncomingDatagramFailed(mCountOfIncomingDatagramFailed)
.setIsDemoMode(mIsDemoMode)
+ .setMaxNtnSignalStrengthLevel(mMaxNtnSignalStrengthLevel)
.build();
logd("reportSessionMetrics: " + sessionParams.toString());
SatelliteStats.getInstance().onSatelliteSessionMetrics(sessionParams);
@@ -187,6 +202,7 @@
mCountOfSuccessfulIncomingDatagram = 0;
mCountOfIncomingDatagramFailed = 0;
mIsDemoMode = false;
+ mMaxNtnSignalStrengthLevel = NTN_SIGNAL_STRENGTH_NONE;
}
private static void logd(@NonNull String log) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
index 3aad333..5e5cb9a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
@@ -1149,6 +1149,7 @@
mSatelliteSession1.countOfIncomingDatagramSuccess = 1;
mSatelliteSession1.countOfIncomingDatagramFailed = 0;
mSatelliteSession1.isDemoMode = false;
+ mSatelliteSession1.maxNtnSignalStrengthLevel = 2;
mSatelliteSession2 = new SatelliteSession();
mSatelliteSession2.satelliteServiceInitializationResult =
@@ -1156,16 +1157,17 @@
mSatelliteSession2.satelliteTechnology =
SatelliteProtoEnums.NT_RADIO_TECHNOLOGY_NB_IOT_NTN;
mSatelliteSession2.count = 1;
- mSatelliteSession1.satelliteServiceTerminationResult =
+ mSatelliteSession2.satelliteServiceTerminationResult =
SatelliteProtoEnums.SATELLITE_ERROR_NONE;
- mSatelliteSession1.initializationProcessingTimeMillis = 300;
- mSatelliteSession1.terminationProcessingTimeMillis = 100;
- mSatelliteSession1.sessionDurationSeconds = 10;
- mSatelliteSession1.countOfOutgoingDatagramSuccess = 0;
- mSatelliteSession1.countOfOutgoingDatagramFailed = 2;
- mSatelliteSession1.countOfIncomingDatagramSuccess = 0;
- mSatelliteSession1.countOfIncomingDatagramFailed = 1;
+ mSatelliteSession2.initializationProcessingTimeMillis = 300;
+ mSatelliteSession2.terminationProcessingTimeMillis = 100;
+ mSatelliteSession2.sessionDurationSeconds = 10;
+ mSatelliteSession2.countOfOutgoingDatagramSuccess = 0;
+ mSatelliteSession2.countOfOutgoingDatagramFailed = 2;
+ mSatelliteSession2.countOfIncomingDatagramSuccess = 0;
+ mSatelliteSession2.countOfIncomingDatagramFailed = 1;
mSatelliteSession2.isDemoMode = true;
+ mSatelliteSession2.maxNtnSignalStrengthLevel = 4;
mSatelliteSessions =
new SatelliteSession[] {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
index 9a84224..bc665f8 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
@@ -16,6 +16,8 @@
package com.android.internal.telephony.metrics;
+import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_GOOD;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -167,6 +169,7 @@
.setCountOfIncomingDatagramSuccess(1)
.setCountOfIncomingDatagramFailed(0)
.setIsDemoMode(false)
+ .setMaxNtnSignalStrengthLevel(NTN_SIGNAL_STRENGTH_GOOD)
.build();
mSatelliteStats.onSatelliteSessionMetrics(param);
@@ -189,6 +192,7 @@
stats.countOfIncomingDatagramSuccess);
assertEquals(param.getCountOfIncomingDatagramFailed(), stats.countOfIncomingDatagramFailed);
assertEquals(param.getIsDemoMode(), stats.isDemoMode);
+ assertEquals(param.getMaxNtnSignalStrengthLevel(), stats.maxNtnSignalStrengthLevel);
verifyNoMoreInteractions(mPersistAtomsStorage);
}