Addition of GNSS key performance indicator logs
Bug: 35963181
Test: Manual
Change-Id: Ibbc8986eb5c52b8e0065b5fd2fdb8579eda11949
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 3a1ddd7..8fe021c 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -77,10 +77,12 @@
import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IBatteryStats;
+import com.android.internal.location.gnssmetrics.GnssMetrics;
import com.android.internal.location.GpsNetInitiatedHandler;
import com.android.internal.location.GpsNetInitiatedHandler.GpsNiNotification;
import com.android.internal.location.ProviderProperties;
import com.android.internal.location.ProviderRequest;
+
import com.android.server.power.BatterySaverPolicy;
import com.android.server.power.BatterySaverPolicy.ServiceType;
@@ -412,6 +414,9 @@
private static final float ITAR_SPEED_LIMIT_METERS_PER_SECOND = 400.0F;
private boolean mItarSpeedLimitExceeded = false;
+ // GNSS Metrics
+ private GnssMetrics mGnssMetrics;
+
private final IGnssStatusProvider mGnssStatusProvider = new IGnssStatusProvider.Stub() {
@Override
public void registerGnssStatusCallback(IGnssStatusListener callback) {
@@ -768,6 +773,7 @@
return isEnabled();
}
};
+ mGnssMetrics = new GnssMetrics();
}
/**
@@ -1477,6 +1483,7 @@
if (mItarSpeedLimitExceeded) {
Log.i(TAG, "Hal reported a speed in excess of ITAR limit." +
" GPS/GNSS Navigation output blocked.");
+ mGnssMetrics.logReceivedLocationStatus(false);
return; // No output of location allowed
}
@@ -1496,11 +1503,23 @@
}
}
+ mGnssMetrics.logReceivedLocationStatus(hasLatLong);
+ if (hasLatLong) {
+ if (location.hasAccuracy()) {
+ mGnssMetrics.logPositionAccuracyMeters(location.getAccuracy());
+ }
+ if (mTimeToFirstFix > 0) {
+ int timeBetweenFixes = (int) (System.currentTimeMillis() - mLastFixTime);
+ mGnssMetrics.logMissedReports(mFixInterval, timeBetweenFixes);
+ }
+ }
+
mLastFixTime = System.currentTimeMillis();
// report time to first fix
if (mTimeToFirstFix == 0 && hasLatLong) {
mTimeToFirstFix = (int)(mLastFixTime - mFixRequestTime);
if (DEBUG) Log.d(TAG, "TTFF: " + mTimeToFirstFix);
+ mGnssMetrics.logTimeToFirstFixMilliSecs(mTimeToFirstFix);
// notify status listeners
mListenerHelper.onFirstFix(mTimeToFirstFix);
@@ -1782,6 +1801,25 @@
};
}
+ public interface GnssMetricsProvider {
+ /**
+ * Returns GNSS metrics as proto string
+ */
+ String getGnssMetricsAsProtoString();
+ }
+
+ /**
+ * @hide
+ */
+ public GnssMetricsProvider getGnssMetricsProvider() {
+ return new GnssMetricsProvider() {
+ @Override
+ public String getGnssMetricsAsProtoString() {
+ return mGnssMetrics.dumpGnssMetricsAsProtoString();
+ }
+ };
+ }
+
/**
* Initialize Batching if enabled
*/
@@ -2411,6 +2449,8 @@
}
}
+
+
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
StringBuilder s = new StringBuilder();
@@ -2427,10 +2467,9 @@
if (hasCapability(GPS_CAPABILITY_MEASUREMENTS)) s.append("MEASUREMENTS ");
if (hasCapability(GPS_CAPABILITY_NAV_MESSAGES)) s.append("NAV_MESSAGES ");
s.append(")\n");
-
- s.append(" internal state: ").append(native_get_internal_state());
+ s.append(mGnssMetrics.dumpGnssMetricsAsText());
+ s.append(" native internal state: ").append(native_get_internal_state());
s.append("\n");
-
pw.append(s);
}