summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Soonil Nagarkar <sooniln@google.com> 2019-07-10 13:31:47 -0700
committer Soonil Nagarkar <sooniln@google.com> 2019-07-10 14:27:50 -0700
commit1c572559c658205b42f06230361cd18e73c842ad (patch)
treef66f26e9866fccbb4452d445c924aa592d912e2d
parent1aaa574c8d46e9197cdf4911bbc36302db89c89a (diff)
Improve dumpsys formatting
Make dumpsys readable. Test: n/a Change-Id: Ie1701227b8dddaee7636c37f97c9469729e499c3
-rw-r--r--location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java687
-rw-r--r--services/core/java/com/android/server/LocationManagerService.java169
-rw-r--r--services/core/java/com/android/server/location/GeofenceManager.java26
-rw-r--r--services/core/java/com/android/server/location/GnssLocationProvider.java19
-rw-r--r--services/core/java/com/android/server/location/LocationProviderProxy.java4
-rw-r--r--services/core/java/com/android/server/location/MockProvider.java2
-rw-r--r--services/core/java/com/android/server/location/PassiveProvider.java2
7 files changed, 460 insertions, 449 deletions
diff --git a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
index 78239714ca3b..274e0e4c2b65 100644
--- a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
+++ b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java
@@ -40,127 +40,116 @@ import java.util.Arrays;
*/
public class GnssMetrics {
- private static final String TAG = GnssMetrics.class.getSimpleName();
+ private static final String TAG = GnssMetrics.class.getSimpleName();
- /* Constant which indicates GPS signal quality is as yet unknown */
- public static final int GPS_SIGNAL_QUALITY_UNKNOWN =
- ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_UNKNOWN; // -1
+ /* Constant which indicates GPS signal quality is as yet unknown */
+ private static final int GPS_SIGNAL_QUALITY_UNKNOWN =
+ ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_UNKNOWN; // -1
- /* Constant which indicates GPS signal quality is poor */
- public static final int GPS_SIGNAL_QUALITY_POOR =
- ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_POOR; // 0
+ /* Constant which indicates GPS signal quality is poor */
+ private static final int GPS_SIGNAL_QUALITY_POOR =
+ ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_POOR; // 0
- /* Constant which indicates GPS signal quality is good */
- public static final int GPS_SIGNAL_QUALITY_GOOD =
- ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_GOOD; // 1
+ /* Constant which indicates GPS signal quality is good */
+ private static final int GPS_SIGNAL_QUALITY_GOOD =
+ ServerLocationProtoEnums.GPS_SIGNAL_QUALITY_GOOD; // 1
- /* Number of GPS signal quality levels */
- public static final int NUM_GPS_SIGNAL_QUALITY_LEVELS = GPS_SIGNAL_QUALITY_GOOD + 1;
+ /* Number of GPS signal quality levels */
+ public static final int NUM_GPS_SIGNAL_QUALITY_LEVELS = GPS_SIGNAL_QUALITY_GOOD + 1;
- /** Default time between location fixes (in millisecs) */
- private static final int DEFAULT_TIME_BETWEEN_FIXES_MILLISECS = 1000;
+ /** Default time between location fixes (in millisecs) */
+ private static final int DEFAULT_TIME_BETWEEN_FIXES_MILLISECS = 1000;
- /* The time since boot when logging started */
- private String logStartInElapsedRealTime;
+ /* The time since boot when logging started */
+ private String mLogStartInElapsedRealTime;
- /* GNSS power metrics */
- private GnssPowerMetrics mGnssPowerMetrics;
+ /* GNSS power metrics */
+ private GnssPowerMetrics mGnssPowerMetrics;
- /**
- * A boolean array indicating whether the constellation types have been used in fix.
- */
+ /* A boolean array indicating whether the constellation types have been used in fix. */
private boolean[] mConstellationTypes;
-
- /** Constructor */
- public GnssMetrics(IBatteryStats stats) {
- mGnssPowerMetrics = new GnssPowerMetrics(stats);
- locationFailureStatistics = new Statistics();
- timeToFirstFixSecStatistics = new Statistics();
- positionAccuracyMeterStatistics = new Statistics();
- topFourAverageCn0Statistics = new Statistics();
- reset();
- }
-
- /**
- * Logs the status of a location report received from the HAL
- *
- * @param isSuccessful
- */
- public void logReceivedLocationStatus(boolean isSuccessful) {
- if (!isSuccessful) {
- locationFailureStatistics.addItem(1.0);
- return;
+ /** Location failure statistics */
+ private Statistics mLocationFailureStatistics;
+ /** Time to first fix statistics */
+ private Statistics mTimeToFirstFixSecStatistics;
+ /** Position accuracy statistics */
+ private Statistics mPositionAccuracyMeterStatistics;
+ /** Top 4 average CN0 statistics */
+ private Statistics mTopFourAverageCn0Statistics;
+
+ public GnssMetrics(IBatteryStats stats) {
+ mGnssPowerMetrics = new GnssPowerMetrics(stats);
+ mLocationFailureStatistics = new Statistics();
+ mTimeToFirstFixSecStatistics = new Statistics();
+ mPositionAccuracyMeterStatistics = new Statistics();
+ mTopFourAverageCn0Statistics = new Statistics();
+ reset();
}
- locationFailureStatistics.addItem(0.0);
- return;
- }
-
- /**
- * Logs missed reports
- *
- * @param desiredTimeBetweenFixesMilliSeconds
- * @param actualTimeBetweenFixesMilliSeconds
- */
- public void logMissedReports(int desiredTimeBetweenFixesMilliSeconds,
- int actualTimeBetweenFixesMilliSeconds) {
- int numReportMissed = (actualTimeBetweenFixesMilliSeconds /
- Math.max(DEFAULT_TIME_BETWEEN_FIXES_MILLISECS, desiredTimeBetweenFixesMilliSeconds)) - 1;
- if (numReportMissed > 0) {
- for (int i = 0; i < numReportMissed; i++) {
- locationFailureStatistics.addItem(1.0);
- }
+
+ /**
+ * Logs the status of a location report received from the HAL
+ */
+ public void logReceivedLocationStatus(boolean isSuccessful) {
+ if (!isSuccessful) {
+ mLocationFailureStatistics.addItem(1.0);
+ return;
+ }
+ mLocationFailureStatistics.addItem(0.0);
}
- return;
- }
-
- /**
- * Logs time to first fix
- *
- * @param timeToFirstFixMilliSeconds
- */
- public void logTimeToFirstFixMilliSecs(int timeToFirstFixMilliSeconds) {
- timeToFirstFixSecStatistics.addItem((double) (timeToFirstFixMilliSeconds/1000));
- return;
- }
-
- /**
- * Logs position accuracy
- *
- * @param positionAccuracyMeters
- */
- public void logPositionAccuracyMeters(float positionAccuracyMeters) {
- positionAccuracyMeterStatistics.addItem((double) positionAccuracyMeters);
- return;
- }
-
- /*
- * Logs CN0 when at least 4 SVs are available
- *
- */
- public void logCn0(float[] cn0s, int numSv) {
- if (numSv == 0 || cn0s == null || cn0s.length == 0 || cn0s.length < numSv) {
- if (numSv == 0) {
- mGnssPowerMetrics.reportSignalQuality(null, 0);
- }
- return;
+
+ /**
+ * Logs missed reports
+ */
+ public void logMissedReports(int desiredTimeBetweenFixesMilliSeconds,
+ int actualTimeBetweenFixesMilliSeconds) {
+ int numReportMissed = (actualTimeBetweenFixesMilliSeconds / Math.max(
+ DEFAULT_TIME_BETWEEN_FIXES_MILLISECS, desiredTimeBetweenFixesMilliSeconds)) - 1;
+ if (numReportMissed > 0) {
+ for (int i = 0; i < numReportMissed; i++) {
+ mLocationFailureStatistics.addItem(1.0);
+ }
+ }
}
- float[] cn0Array = Arrays.copyOf(cn0s, numSv);
- Arrays.sort(cn0Array);
- mGnssPowerMetrics.reportSignalQuality(cn0Array, numSv);
- if (numSv < 4) {
- return;
+
+ /**
+ * Logs time to first fix
+ */
+ public void logTimeToFirstFixMilliSecs(int timeToFirstFixMilliSeconds) {
+ mTimeToFirstFixSecStatistics.addItem((double) (timeToFirstFixMilliSeconds / 1000));
}
- if (cn0Array[numSv - 4] > 0.0) {
- double top4AvgCn0 = 0.0;
- for (int i = numSv - 4; i < numSv; i++) {
- top4AvgCn0 += (double) cn0Array[i];
- }
- top4AvgCn0 /= 4;
- topFourAverageCn0Statistics.addItem(top4AvgCn0);
+
+ /**
+ * Logs position accuracy
+ */
+ public void logPositionAccuracyMeters(float positionAccuracyMeters) {
+ mPositionAccuracyMeterStatistics.addItem((double) positionAccuracyMeters);
}
- return;
- }
+ /**
+ * Logs CN0 when at least 4 SVs are available
+ */
+ public void logCn0(float[] cn0s, int numSv) {
+ if (numSv == 0 || cn0s == null || cn0s.length == 0 || cn0s.length < numSv) {
+ if (numSv == 0) {
+ mGnssPowerMetrics.reportSignalQuality(null, 0);
+ }
+ return;
+ }
+ float[] cn0Array = Arrays.copyOf(cn0s, numSv);
+ Arrays.sort(cn0Array);
+ mGnssPowerMetrics.reportSignalQuality(cn0Array, numSv);
+ if (numSv < 4) {
+ return;
+ }
+ if (cn0Array[numSv - 4] > 0.0) {
+ double top4AvgCn0 = 0.0;
+ for (int i = numSv - 4; i < numSv; i++) {
+ top4AvgCn0 += (double) cn0Array[i];
+ }
+ top4AvgCn0 /= 4;
+ mTopFourAverageCn0Statistics.addItem(top4AvgCn0);
+ }
+ }
/**
* Logs that a constellation type has been observed.
@@ -173,82 +162,82 @@ public class GnssMetrics {
mConstellationTypes[constellationType] = true;
}
- /**
- * Dumps GNSS metrics as a proto string
- * @return
- */
- public String dumpGnssMetricsAsProtoString() {
- GnssLog msg = new GnssLog();
- if (locationFailureStatistics.getCount() > 0) {
- msg.numLocationReportProcessed = locationFailureStatistics.getCount();
- msg.percentageLocationFailure = (int) (100.0 * locationFailureStatistics.getMean());
- }
- if (timeToFirstFixSecStatistics.getCount() > 0) {
- msg.numTimeToFirstFixProcessed = timeToFirstFixSecStatistics.getCount();
- msg.meanTimeToFirstFixSecs = (int) timeToFirstFixSecStatistics.getMean();
- msg.standardDeviationTimeToFirstFixSecs
- = (int) timeToFirstFixSecStatistics.getStandardDeviation();
- }
- if (positionAccuracyMeterStatistics.getCount() > 0) {
- msg.numPositionAccuracyProcessed = positionAccuracyMeterStatistics.getCount();
- msg.meanPositionAccuracyMeters = (int) positionAccuracyMeterStatistics.getMean();
- msg.standardDeviationPositionAccuracyMeters
- = (int) positionAccuracyMeterStatistics.getStandardDeviation();
- }
- if (topFourAverageCn0Statistics.getCount() > 0) {
- msg.numTopFourAverageCn0Processed = topFourAverageCn0Statistics.getCount();
- msg.meanTopFourAverageCn0DbHz = topFourAverageCn0Statistics.getMean();
- msg.standardDeviationTopFourAverageCn0DbHz
- = topFourAverageCn0Statistics.getStandardDeviation();
- }
- msg.powerMetrics = mGnssPowerMetrics.buildProto();
- msg.hardwareRevision = SystemProperties.get("ro.boot.revision", "");
- String s = Base64.encodeToString(GnssLog.toByteArray(msg), Base64.DEFAULT);
- reset();
- return s;
- }
-
- /**
- * Dumps GNSS Metrics as text
- *
- * @return GNSS Metrics
- */
- public String dumpGnssMetricsAsText() {
- StringBuilder s = new StringBuilder();
- s.append("GNSS_KPI_START").append('\n');
- s.append(" KPI logging start time: ").append(logStartInElapsedRealTime).append("\n");
- s.append(" KPI logging end time: ");
- TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s);
- s.append("\n");
- s.append(" Number of location reports: ").append(
- locationFailureStatistics.getCount()).append("\n");
- if (locationFailureStatistics.getCount() > 0) {
- s.append(" Percentage location failure: ").append(
- 100.0 * locationFailureStatistics.getMean()).append("\n");
- }
- s.append(" Number of TTFF reports: ").append(
- timeToFirstFixSecStatistics.getCount()).append("\n");
- if (timeToFirstFixSecStatistics.getCount() > 0) {
- s.append(" TTFF mean (sec): ").append(timeToFirstFixSecStatistics.getMean()).append("\n");
- s.append(" TTFF standard deviation (sec): ").append(
- timeToFirstFixSecStatistics.getStandardDeviation()).append("\n");
- }
- s.append(" Number of position accuracy reports: ").append(
- positionAccuracyMeterStatistics.getCount()).append("\n");
- if (positionAccuracyMeterStatistics.getCount() > 0) {
- s.append(" Position accuracy mean (m): ").append(
- positionAccuracyMeterStatistics.getMean()).append("\n");
- s.append(" Position accuracy standard deviation (m): ").append(
- positionAccuracyMeterStatistics.getStandardDeviation()).append("\n");
- }
- s.append(" Number of CN0 reports: ").append(
- topFourAverageCn0Statistics.getCount()).append("\n");
- if (topFourAverageCn0Statistics.getCount() > 0) {
- s.append(" Top 4 Avg CN0 mean (dB-Hz): ").append(
- topFourAverageCn0Statistics.getMean()).append("\n");
- s.append(" Top 4 Avg CN0 standard deviation (dB-Hz): ").append(
- topFourAverageCn0Statistics.getStandardDeviation()).append("\n");
+ /**
+ * Dumps GNSS metrics as a proto string
+ */
+ public String dumpGnssMetricsAsProtoString() {
+ GnssLog msg = new GnssLog();
+ if (mLocationFailureStatistics.getCount() > 0) {
+ msg.numLocationReportProcessed = mLocationFailureStatistics.getCount();
+ msg.percentageLocationFailure = (int) (100.0 * mLocationFailureStatistics.getMean());
+ }
+ if (mTimeToFirstFixSecStatistics.getCount() > 0) {
+ msg.numTimeToFirstFixProcessed = mTimeToFirstFixSecStatistics.getCount();
+ msg.meanTimeToFirstFixSecs = (int) mTimeToFirstFixSecStatistics.getMean();
+ msg.standardDeviationTimeToFirstFixSecs =
+ (int) mTimeToFirstFixSecStatistics.getStandardDeviation();
+ }
+ if (mPositionAccuracyMeterStatistics.getCount() > 0) {
+ msg.numPositionAccuracyProcessed = mPositionAccuracyMeterStatistics.getCount();
+ msg.meanPositionAccuracyMeters = (int) mPositionAccuracyMeterStatistics.getMean();
+ msg.standardDeviationPositionAccuracyMeters =
+ (int) mPositionAccuracyMeterStatistics.getStandardDeviation();
+ }
+ if (mTopFourAverageCn0Statistics.getCount() > 0) {
+ msg.numTopFourAverageCn0Processed = mTopFourAverageCn0Statistics.getCount();
+ msg.meanTopFourAverageCn0DbHz = mTopFourAverageCn0Statistics.getMean();
+ msg.standardDeviationTopFourAverageCn0DbHz =
+ mTopFourAverageCn0Statistics.getStandardDeviation();
+ }
+ msg.powerMetrics = mGnssPowerMetrics.buildProto();
+ msg.hardwareRevision = SystemProperties.get("ro.boot.revision", "");
+ String s = Base64.encodeToString(GnssLog.toByteArray(msg), Base64.DEFAULT);
+ reset();
+ return s;
}
+
+ /**
+ * Dumps GNSS Metrics as text
+ *
+ * @return GNSS Metrics
+ */
+ public String dumpGnssMetricsAsText() {
+ StringBuilder s = new StringBuilder();
+ s.append("GNSS_KPI_START").append('\n');
+ s.append(" KPI logging start time: ").append(mLogStartInElapsedRealTime).append("\n");
+ s.append(" KPI logging end time: ");
+ TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s);
+ s.append("\n");
+ s.append(" Number of location reports: ").append(
+ mLocationFailureStatistics.getCount()).append("\n");
+ if (mLocationFailureStatistics.getCount() > 0) {
+ s.append(" Percentage location failure: ").append(
+ 100.0 * mLocationFailureStatistics.getMean()).append("\n");
+ }
+ s.append(" Number of TTFF reports: ").append(
+ mTimeToFirstFixSecStatistics.getCount()).append("\n");
+ if (mTimeToFirstFixSecStatistics.getCount() > 0) {
+ s.append(" TTFF mean (sec): ").append(mTimeToFirstFixSecStatistics.getMean()).append(
+ "\n");
+ s.append(" TTFF standard deviation (sec): ").append(
+ mTimeToFirstFixSecStatistics.getStandardDeviation()).append("\n");
+ }
+ s.append(" Number of position accuracy reports: ").append(
+ mPositionAccuracyMeterStatistics.getCount()).append("\n");
+ if (mPositionAccuracyMeterStatistics.getCount() > 0) {
+ s.append(" Position accuracy mean (m): ").append(
+ mPositionAccuracyMeterStatistics.getMean()).append("\n");
+ s.append(" Position accuracy standard deviation (m): ").append(
+ mPositionAccuracyMeterStatistics.getStandardDeviation()).append("\n");
+ }
+ s.append(" Number of CN0 reports: ").append(
+ mTopFourAverageCn0Statistics.getCount()).append("\n");
+ if (mTopFourAverageCn0Statistics.getCount() > 0) {
+ s.append(" Top 4 Avg CN0 mean (dB-Hz): ").append(
+ mTopFourAverageCn0Statistics.getMean()).append("\n");
+ s.append(" Top 4 Avg CN0 standard deviation (dB-Hz): ").append(
+ mTopFourAverageCn0Statistics.getStandardDeviation()).append("\n");
+ }
s.append(" Used-in-fix constellation types: ");
for (int i = 0; i < mConstellationTypes.length; i++) {
if (mConstellationTypes[i]) {
@@ -256,199 +245,193 @@ public class GnssMetrics {
}
}
s.append("\n");
- s.append("GNSS_KPI_END").append("\n");
- GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats();
- if (stats != null) {
- s.append("Power Metrics").append("\n");
- s.append(" Time on battery (min): "
- + stats.getLoggingDurationMs() / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n");
- long[] t = stats.getTimeInGpsSignalQualityLevel();
- if (t != null && t.length == NUM_GPS_SIGNAL_QUALITY_LEVELS) {
- s.append(" Amount of time (while on battery) Top 4 Avg CN0 > " +
- Double.toString(GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) +
- " dB-Hz (min): ").append(t[1] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n");
- s.append(" Amount of time (while on battery) Top 4 Avg CN0 <= " +
- Double.toString(GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) +
- " dB-Hz (min): ").append(t[0] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n");
- }
- s.append(" Energy consumed while on battery (mAh): ").append(
- stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS)).append("\n");
- }
- s.append("Hardware Version: " + SystemProperties.get("ro.boot.revision", "")).append("\n");
- return s.toString();
- }
-
- /** Class for storing statistics */
- private class Statistics {
-
- /** Resets statistics */
- public void reset() {
- count = 0;
- sum = 0.0;
- sumSquare = 0.0;
+ s.append("GNSS_KPI_END").append("\n");
+ GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats();
+ if (stats != null) {
+ s.append("Power Metrics").append("\n");
+ s.append(" Time on battery (min): ").append(
+ stats.getLoggingDurationMs() / ((double) DateUtils.MINUTE_IN_MILLIS)).append(
+ "\n");
+ long[] t = stats.getTimeInGpsSignalQualityLevel();
+ if (t != null && t.length == NUM_GPS_SIGNAL_QUALITY_LEVELS) {
+ s.append(" Amount of time (while on battery) Top 4 Avg CN0 > "
+ + GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ
+ + " dB-Hz (min): ").append(
+ t[1] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n");
+ s.append(" Amount of time (while on battery) Top 4 Avg CN0 <= "
+ + GnssPowerMetrics.POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ
+ + " dB-Hz (min): ").append(
+ t[0] / ((double) DateUtils.MINUTE_IN_MILLIS)).append("\n");
+ }
+ s.append(" Energy consumed while on battery (mAh): ").append(
+ stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS)).append(
+ "\n");
+ }
+ s.append("Hardware Version: ").append(SystemProperties.get("ro.boot.revision", "")).append(
+ "\n");
+ return s.toString();
}
- /** Adds an item */
- public void addItem(double item) {
- count++;
- sum += item;
- sumSquare += item * item;
+ private void reset() {
+ StringBuilder s = new StringBuilder();
+ TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s);
+ mLogStartInElapsedRealTime = s.toString();
+ mLocationFailureStatistics.reset();
+ mTimeToFirstFixSecStatistics.reset();
+ mPositionAccuracyMeterStatistics.reset();
+ mTopFourAverageCn0Statistics.reset();
+ resetConstellationTypes();
}
- /** Returns number of items added */
- public int getCount() {
- return count;
+ /** Resets {@link #mConstellationTypes} as an all-false boolean array. */
+ public void resetConstellationTypes() {
+ mConstellationTypes = new boolean[GnssStatus.CONSTELLATION_COUNT];
}
- /** Returns mean */
- public double getMean() {
- return sum/count;
- }
+ /** Class for storing statistics */
+ private class Statistics {
- /** Returns standard deviation */
- public double getStandardDeviation() {
- double m = sum/count;
- m = m * m;
- double v = sumSquare/count;
- if (v > m) {
- return Math.sqrt(v - m);
- }
- return 0;
- }
+ private int mCount;
+ private double mSum;
+ private double mSumSquare;
- private int count;
- private double sum;
- private double sumSquare;
- }
-
- /** Location failure statistics */
- private Statistics locationFailureStatistics;
-
- /** Time to first fix statistics */
- private Statistics timeToFirstFixSecStatistics;
-
- /** Position accuracy statistics */
- private Statistics positionAccuracyMeterStatistics;
-
- /** Top 4 average CN0 statistics */
- private Statistics topFourAverageCn0Statistics;
-
- /**
- * Resets GNSS metrics
- */
- private void reset() {
- StringBuilder s = new StringBuilder();
- TimeUtils.formatDuration(SystemClock.elapsedRealtimeNanos() / 1000000L, s);
- logStartInElapsedRealTime = s.toString();
- locationFailureStatistics.reset();
- timeToFirstFixSecStatistics.reset();
- positionAccuracyMeterStatistics.reset();
- topFourAverageCn0Statistics.reset();
- resetConstellationTypes();
- return;
- }
+ /** Resets statistics */
+ public void reset() {
+ mCount = 0;
+ mSum = 0.0;
+ mSumSquare = 0.0;
+ }
- /** Resets {@link #mConstellationTypes} as an all-false boolean array. */
- public void resetConstellationTypes() {
- mConstellationTypes = new boolean[GnssStatus.CONSTELLATION_COUNT];
+ /** Adds an item */
+ public void addItem(double item) {
+ mCount++;
+ mSum += item;
+ mSumSquare += item * item;
+ }
+
+ /** Returns number of items added */
+ public int getCount() {
+ return mCount;
+ }
+
+ /** Returns mean */
+ public double getMean() {
+ return mSum / mCount;
+ }
+
+ /** Returns standard deviation */
+ public double getStandardDeviation() {
+ double m = mSum / mCount;
+ m = m * m;
+ double v = mSumSquare / mCount;
+ if (v > m) {
+ return Math.sqrt(v - m);
+ }
+ return 0;
+ }
}
- /* Class for handling GNSS power related metrics */
- private class GnssPowerMetrics {
+ /* Class for handling GNSS power related metrics */
+ private class GnssPowerMetrics {
- /* Threshold for Top Four Average CN0 below which GNSS signal quality is declared poor */
- public static final double POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ = 20.0;
+ /* Threshold for Top Four Average CN0 below which GNSS signal quality is declared poor */
+ public static final double POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ = 20.0;
- /* Minimum change in Top Four Average CN0 needed to trigger a report */
- private static final double REPORTING_THRESHOLD_DB_HZ = 1.0;
+ /* Minimum change in Top Four Average CN0 needed to trigger a report */
+ private static final double REPORTING_THRESHOLD_DB_HZ = 1.0;
- /* BatteryStats API */
- private final IBatteryStats mBatteryStats;
+ /* BatteryStats API */
+ private final IBatteryStats mBatteryStats;
- /* Last reported Top Four Average CN0 */
- private double mLastAverageCn0;
+ /* Last reported Top Four Average CN0 */
+ private double mLastAverageCn0;
- /* Last reported signal quality bin (based on Top Four Average CN0) */
- private int mLastSignalLevel;
+ /* Last reported signal quality bin (based on Top Four Average CN0) */
+ private int mLastSignalLevel;
- public GnssPowerMetrics(IBatteryStats stats) {
- mBatteryStats = stats;
- // Used to initialize the variable to a very small value (unachievable in practice) so that
- // the first CNO report will trigger an update to BatteryStats
- mLastAverageCn0 = -100.0;
- mLastSignalLevel = GPS_SIGNAL_QUALITY_UNKNOWN;
- }
+ private GnssPowerMetrics(IBatteryStats stats) {
+ mBatteryStats = stats;
+ // Used to initialize the variable to a very small value (unachievable in practice)
+ // so that
+ // the first CNO report will trigger an update to BatteryStats
+ mLastAverageCn0 = -100.0;
+ mLastSignalLevel = GPS_SIGNAL_QUALITY_UNKNOWN;
+ }
- /**
- * Builds power metrics proto buf. This is included in the gnss proto buf.
- * @return PowerMetrics
- */
- public PowerMetrics buildProto() {
- PowerMetrics p = new PowerMetrics();
- GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats();
- if (stats != null) {
- p.loggingDurationMs = stats.getLoggingDurationMs();
- p.energyConsumedMah = stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS);
- long[] t = stats.getTimeInGpsSignalQualityLevel();
- p.timeInSignalQualityLevelMs = new long[t.length];
- for (int i = 0; i < t.length; i++) {
- p.timeInSignalQualityLevelMs[i] = t[i];
+ /**
+ * Builds power metrics proto buf. This is included in the gnss proto buf.
+ *
+ * @return PowerMetrics
+ */
+ public PowerMetrics buildProto() {
+ PowerMetrics p = new PowerMetrics();
+ GpsBatteryStats stats = mGnssPowerMetrics.getGpsBatteryStats();
+ if (stats != null) {
+ p.loggingDurationMs = stats.getLoggingDurationMs();
+ p.energyConsumedMah =
+ stats.getEnergyConsumedMaMs() / ((double) DateUtils.HOUR_IN_MILLIS);
+ long[] t = stats.getTimeInGpsSignalQualityLevel();
+ p.timeInSignalQualityLevelMs = new long[t.length];
+ for (int i = 0; i < t.length; i++) {
+ p.timeInSignalQualityLevelMs[i] = t[i];
+ }
+ }
+ return p;
}
- }
- return p;
- }
- /**
- * Returns the GPS power stats
- * @return GpsBatteryStats
- */
- public GpsBatteryStats getGpsBatteryStats() {
- try {
- return mBatteryStats.getGpsBatteryStats();
- } catch (Exception e) {
- Log.w(TAG, "Exception", e);
- return null;
- }
- }
+ /**
+ * Returns the GPS power stats
+ *
+ * @return GpsBatteryStats
+ */
+ public GpsBatteryStats getGpsBatteryStats() {
+ try {
+ return mBatteryStats.getGpsBatteryStats();
+ } catch (Exception e) {
+ Log.w(TAG, "Exception", e);
+ return null;
+ }
+ }
- /**
- * Reports signal quality to BatteryStats. Signal quality is based on Top four average CN0. If
- * the number of SVs seen is less than 4, then signal quality is the average CN0.
- * Changes are reported only if the average CN0 changes by more than REPORTING_THRESHOLD_DB_HZ.
- */
- public void reportSignalQuality(float[] ascendingCN0Array, int numSv) {
- double avgCn0 = 0.0;
- if (numSv > 0) {
- for (int i = Math.max(0, numSv - 4); i < numSv; i++) {
- avgCn0 += (double) ascendingCN0Array[i];
+ /**
+ * Reports signal quality to BatteryStats. Signal quality is based on Top four average CN0.
+ * If
+ * the number of SVs seen is less than 4, then signal quality is the average CN0.
+ * Changes are reported only if the average CN0 changes by more than
+ * REPORTING_THRESHOLD_DB_HZ.
+ */
+ public void reportSignalQuality(float[] ascendingCN0Array, int numSv) {
+ double avgCn0 = 0.0;
+ if (numSv > 0) {
+ for (int i = Math.max(0, numSv - 4); i < numSv; i++) {
+ avgCn0 += (double) ascendingCN0Array[i];
+ }
+ avgCn0 /= Math.min(numSv, 4);
+ }
+ if (Math.abs(avgCn0 - mLastAverageCn0) < REPORTING_THRESHOLD_DB_HZ) {
+ return;
+ }
+ int signalLevel = getSignalLevel(avgCn0);
+ if (signalLevel != mLastSignalLevel) {
+ StatsLog.write(StatsLog.GPS_SIGNAL_QUALITY_CHANGED, signalLevel);
+ mLastSignalLevel = signalLevel;
+ }
+ try {
+ mBatteryStats.noteGpsSignalQuality(signalLevel);
+ mLastAverageCn0 = avgCn0;
+ } catch (Exception e) {
+ Log.w(TAG, "Exception", e);
+ }
}
- avgCn0 /= Math.min(numSv, 4);
- }
- if (Math.abs(avgCn0 - mLastAverageCn0) < REPORTING_THRESHOLD_DB_HZ) {
- return;
- }
- int signalLevel = getSignalLevel(avgCn0);
- if (signalLevel != mLastSignalLevel) {
- StatsLog.write(StatsLog.GPS_SIGNAL_QUALITY_CHANGED, signalLevel);
- mLastSignalLevel = signalLevel;
- }
- try {
- mBatteryStats.noteGpsSignalQuality(signalLevel);
- mLastAverageCn0 = avgCn0;
- } catch (Exception e) {
- Log.w(TAG, "Exception", e);
- }
- return;
- }
- /**
- * Obtains signal level based on CN0
- */
- private int getSignalLevel(double cn0) {
- if (cn0 > POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) {
- return GnssMetrics.GPS_SIGNAL_QUALITY_GOOD;
- }
- return GnssMetrics.GPS_SIGNAL_QUALITY_POOR;
+ /**
+ * Obtains signal level based on CN0
+ */
+ private int getSignalLevel(double cn0) {
+ if (cn0 > POOR_TOP_FOUR_AVG_CN0_THRESHOLD_DB_HZ) {
+ return GnssMetrics.GPS_SIGNAL_QUALITY_GOOD;
+ }
+ return GnssMetrics.GPS_SIGNAL_QUALITY_POOR;
+ }
}
- }
}
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index 3ebe70266c71..9128ecc46162 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -97,6 +97,7 @@ import com.android.internal.location.ProviderProperties;
import com.android.internal.location.ProviderRequest;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DumpUtils;
+import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
import com.android.server.location.AbstractLocationProvider;
import com.android.server.location.ActivityRecognitionProxy;
@@ -1039,25 +1040,29 @@ public class LocationManagerService extends ILocationManager.Stub {
}
@GuardedBy("mLock")
- public void dumpLocked(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.print(" " + mName + " provider");
+ public void dumpLocked(FileDescriptor fd, IndentingPrintWriter pw, String[] args) {
+ pw.print(mName + " provider");
if (isMock()) {
pw.print(" [mock]");
}
pw.println(":");
- pw.println(" useable=" + mUseable);
+ pw.increaseIndent();
+
+ pw.println("useable=" + mUseable);
if (!mUseable) {
- pw.println(" attached=" + (mProvider != null));
+ pw.println("attached=" + (mProvider != null));
if (mIsManagedBySettings) {
- pw.println(" allowed=" + mAllowed);
+ pw.println("allowed=" + mAllowed);
}
- pw.println(" enabled=" + mEnabled);
+ pw.println("enabled=" + mEnabled);
}
- pw.println(" properties=" + mProperties);
+ pw.println("properties=" + mProperties);
if (mProvider != null) {
+ // in order to be consistent with other provider APIs, this should be run on the
+ // location thread... but this likely isn't worth it just for dumping info.
long identity = Binder.clearCallingIdentity();
try {
mProvider.dump(fd, pw, args);
@@ -1065,6 +1070,8 @@ public class LocationManagerService extends ILocationManager.Stub {
Binder.restoreCallingIdentity(identity);
}
}
+
+ pw.decreaseIndent();
}
@GuardedBy("mLock")
@@ -2916,6 +2923,12 @@ public class LocationManagerService extends ILocationManager.Stub {
mCallerIdentity = callerIdentity;
mListenerName = listenerName;
}
+
+ @Override
+ public String toString() {
+ return mListenerName + "[" + mCallerIdentity.mPackageName + "(" + mCallerIdentity.mPid
+ + ")]";
+ }
}
private static class LinkedListener<TListener> extends LinkedListenerBase {
@@ -3671,6 +3684,8 @@ public class LocationManagerService extends ILocationManager.Stub {
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
+ IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ");
+
synchronized (mLock) {
if (args.length > 0 && args[0].equals("--gnssmetrics")) {
if (mGnssMetricsProvider != null) {
@@ -3678,115 +3693,133 @@ public class LocationManagerService extends ILocationManager.Stub {
}
return;
}
- pw.println("Current Location Manager state:");
- pw.print(" Current System Time: "
+
+ ipw.println("Location Manager State:");
+ ipw.increaseIndent();
+ ipw.print("Current System Time: "
+ TimeUtils.logTimeOfDay(System.currentTimeMillis()));
- pw.println(", Current Elapsed Time: "
+ ipw.println(", Current Elapsed Time: "
+ TimeUtils.formatDuration(SystemClock.elapsedRealtime()));
- pw.println(" Current user: " + mCurrentUserId + " " + Arrays.toString(
+ ipw.println("Current user: " + mCurrentUserId + " " + Arrays.toString(
mCurrentUserProfiles));
- pw.println(" Location mode: " + isLocationEnabled());
- pw.println(" Battery Saver Location Mode: "
+ ipw.println("Location Mode: " + isLocationEnabled());
+ ipw.println("Battery Saver Location Mode: "
+ locationPowerSaveModeToString(mBatterySaverMode));
- pw.println(" Location Listeners:");
+
+ ipw.println("Location Listeners:");
+ ipw.increaseIndent();
for (Receiver receiver : mReceivers.values()) {
- pw.println(" " + receiver);
+ ipw.println(receiver);
}
- pw.println(" Active Records by Provider:");
+ ipw.decreaseIndent();
+
+ ipw.println("Active Records by Provider:");
+ ipw.increaseIndent();
for (Map.Entry<String, ArrayList<UpdateRecord>> entry : mRecordsByProvider.entrySet()) {
- pw.println(" " + entry.getKey() + ":");
+ ipw.println(entry.getKey() + ":");
+ ipw.increaseIndent();
for (UpdateRecord record : entry.getValue()) {
- pw.println(" " + record);
+ ipw.println(record);
}
+ ipw.decreaseIndent();
+ }
+ ipw.decreaseIndent();
+
+ ipw.println("GnssMeasurement Listeners:");
+ ipw.increaseIndent();
+ for (LinkedListenerBase listener : mGnssMeasurementsListeners.values()) {
+ ipw.println(listener + ": " + isThrottlingExemptLocked(listener.mCallerIdentity));
+ }
+ ipw.decreaseIndent();
+
+ ipw.println("GnssNavigationMessage Listeners:");
+ ipw.increaseIndent();
+ for (LinkedListenerBase listener : mGnssNavigationMessageListeners.values()) {
+ ipw.println(listener + ": " + isThrottlingExemptLocked(listener.mCallerIdentity));
}
+ ipw.decreaseIndent();
- pw.println(" Active GnssMeasurement Listeners:");
- dumpGnssDataListenersLocked(pw, mGnssMeasurementsListeners);
- pw.println(" Active GnssNavigationMessage Listeners:");
- dumpGnssDataListenersLocked(pw, mGnssNavigationMessageListeners);
- pw.println(" Active GnssStatus Listeners:");
- dumpGnssDataListenersLocked(pw, mGnssStatusListeners);
+ ipw.println("GnssStatus Listeners:");
+ ipw.increaseIndent();
+ for (LinkedListenerBase listener : mGnssStatusListeners.values()) {
+ ipw.println(listener + ": " + isThrottlingExemptLocked(listener.mCallerIdentity));
+ }
+ ipw.decreaseIndent();
- pw.println(" Historical Records by Provider:");
+ ipw.println("Historical Records by Provider:");
+ ipw.increaseIndent();
for (Map.Entry<PackageProviderKey, PackageStatistics> entry
: mRequestStatistics.statistics.entrySet()) {
PackageProviderKey key = entry.getKey();
- PackageStatistics stats = entry.getValue();
- pw.println(" " + key.packageName + ": " + key.providerName + ": " + stats);
+ ipw.println(key.packageName + ": " + key.providerName + ": " + entry.getValue());
}
- pw.println(" Last Known Locations:");
+ ipw.decreaseIndent();
+
+ ipw.println("Last Known Locations:");
+ ipw.increaseIndent();
for (Map.Entry<String, Location> entry : mLastLocation.entrySet()) {
- String provider = entry.getKey();
- Location location = entry.getValue();
- pw.println(" " + provider + ": " + location);
+ ipw.println(entry.getKey() + ": " + entry.getValue());
}
+ ipw.decreaseIndent();
- pw.println(" Last Known Locations Coarse Intervals:");
+ ipw.println("Last Known Coarse Locations:");
+ ipw.increaseIndent();
for (Map.Entry<String, Location> entry : mLastLocationCoarseInterval.entrySet()) {
- String provider = entry.getKey();
- Location location = entry.getValue();
- pw.println(" " + provider + ": " + location);
+ ipw.println(entry.getKey() + ": " + entry.getValue());
}
+ ipw.decreaseIndent();
if (mGeofenceManager != null) {
- mGeofenceManager.dump(pw);
- } else {
- pw.println(" Geofences: null");
+ ipw.println("Geofences:");
+ ipw.increaseIndent();
+ mGeofenceManager.dump(ipw);
+ ipw.decreaseIndent();
}
if (mBlacklist != null) {
- pw.append(" ");
- mBlacklist.dump(pw);
- } else {
- pw.println(" mBlacklist=null");
+ mBlacklist.dump(ipw);
}
if (mExtraLocationControllerPackage != null) {
- pw.println(" Location controller extra package: " + mExtraLocationControllerPackage
- + " enabled: " + mExtraLocationControllerPackageEnabled);
+ ipw.println("Location Controller Extra Package: " + mExtraLocationControllerPackage
+ + (mExtraLocationControllerPackageEnabled ? " [enabled]" : "[disabled]"));
}
if (!mBackgroundThrottlePackageWhitelist.isEmpty()) {
- pw.println(" Throttling Whitelisted Packages:");
+ ipw.println("Throttling Whitelisted Packages:");
+ ipw.increaseIndent();
for (String packageName : mBackgroundThrottlePackageWhitelist) {
- pw.println(" " + packageName);
+ ipw.println(packageName);
}
+ ipw.decreaseIndent();
}
if (!mIgnoreSettingsPackageWhitelist.isEmpty()) {
- pw.println(" Bypass Whitelisted Packages:");
+ ipw.println("Bypass Whitelisted Packages:");
+ ipw.increaseIndent();
for (String packageName : mIgnoreSettingsPackageWhitelist) {
- pw.println(" " + packageName);
+ ipw.println(packageName);
}
+ ipw.decreaseIndent();
}
if (mLocationFudger != null) {
- pw.append(" fudger: ");
- mLocationFudger.dump(fd, pw, args);
- } else {
- pw.println(" fudger: null");
+ ipw.println("Location Fudger:");
+ ipw.increaseIndent();
+ mLocationFudger.dump(fd, ipw, args);
+ ipw.decreaseIndent();
}
- if (args.length > 0 && "short".equals(args[0])) {
- return;
- }
+ ipw.println("Location Providers:");
+ ipw.increaseIndent();
for (LocationProvider provider : mProviders) {
- provider.dumpLocked(fd, pw, args);
+ provider.dumpLocked(fd, ipw, args);
}
+ ipw.decreaseIndent();
+
if (mGnssBatchingInProgress) {
- pw.println(" GNSS batching in progress");
+ ipw.println("GNSS batching in progress");
}
}
}
-
- @GuardedBy("mLock")
- private void dumpGnssDataListenersLocked(PrintWriter pw,
- ArrayMap<IBinder, ? extends LinkedListenerBase> gnssDataListeners) {
- for (LinkedListenerBase listener : gnssDataListeners.values()) {
- CallerIdentity callerIdentity = listener.mCallerIdentity;
- pw.println(" " + callerIdentity.mPid + " " + callerIdentity.mUid + " "
- + callerIdentity.mPackageName + ": "
- + isThrottlingExemptLocked(callerIdentity));
- }
- }
}
diff --git a/services/core/java/com/android/server/location/GeofenceManager.java b/services/core/java/com/android/server/location/GeofenceManager.java
index fafe99c9fe18..a1922067e7cf 100644
--- a/services/core/java/com/android/server/location/GeofenceManager.java
+++ b/services/core/java/com/android/server/location/GeofenceManager.java
@@ -16,11 +16,6 @@
package com.android.server.location;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
@@ -44,6 +39,11 @@ import android.util.Slog;
import com.android.server.LocationManagerService;
import com.android.server.PendingIntentUtils;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
public class GeofenceManager implements LocationListener, PendingIntent.OnFinished {
private static final String TAG = "GeofenceManager";
private static final boolean D = LocationManagerService.D;
@@ -79,13 +79,13 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish
private final GeofenceHandler mHandler;
private final LocationBlacklist mBlacklist;
- private Object mLock = new Object();
+ private final Object mLock = new Object();
// access to members below is synchronized on mLock
/**
* A list containing all registered geofences.
*/
- private List<GeofenceState> mFences = new LinkedList<GeofenceState>();
+ private List<GeofenceState> mFences = new LinkedList<>();
/**
* This is set true when we have an active request for {@link Location} updates via
@@ -272,8 +272,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish
*/
// Runs on the handler.
private void updateFences() {
- List<PendingIntent> enterIntents = new LinkedList<PendingIntent>();
- List<PendingIntent> exitIntents = new LinkedList<PendingIntent>();
+ List<PendingIntent> enterIntents = new LinkedList<>();
+ List<PendingIntent> exitIntents = new LinkedList<>();
synchronized (mLock) {
mPendingUpdate = false;
@@ -446,14 +446,8 @@ public class GeofenceManager implements LocationListener, PendingIntent.OnFinish
}
public void dump(PrintWriter pw) {
- pw.println(" Geofences:");
-
for (GeofenceState state : mFences) {
- pw.append(" ");
- pw.append(state.mPackageName);
- pw.append(" ");
- pw.append(state.mFence.toString());
- pw.append("\n");
+ pw.println(state.mPackageName + " " + state.mFence);
}
}
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 88576187163f..924b217170ce 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -2171,18 +2171,18 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
StringBuilder s = new StringBuilder();
- s.append(" mStarted=").append(mStarted).append(" (changed ");
+ s.append("mStarted=").append(mStarted).append(" (changed ");
TimeUtils.formatDuration(SystemClock.elapsedRealtime()
- mStartedChangedElapsedRealtime, s);
s.append(" ago)").append('\n');
- s.append(" mFixInterval=").append(mFixInterval).append('\n');
- s.append(" mLowPowerMode=").append(mLowPowerMode).append('\n');
- s.append(" mGnssMeasurementsProvider.isRegistered()=")
+ s.append("mFixInterval=").append(mFixInterval).append('\n');
+ s.append("mLowPowerMode=").append(mLowPowerMode).append('\n');
+ s.append("mGnssMeasurementsProvider.isRegistered()=")
.append(mGnssMeasurementsProvider.isRegistered()).append('\n');
- s.append(" mGnssNavigationMessageProvider.isRegistered()=")
+ s.append("mGnssNavigationMessageProvider.isRegistered()=")
.append(mGnssNavigationMessageProvider.isRegistered()).append('\n');
- s.append(" mDisableGpsForPowerManager=").append(mDisableGpsForPowerManager).append('\n');
- s.append(" mTopHalCapabilities=0x").append(Integer.toHexString(mTopHalCapabilities));
+ s.append("mDisableGpsForPowerManager=").append(mDisableGpsForPowerManager).append('\n');
+ s.append("mTopHalCapabilities=0x").append(Integer.toHexString(mTopHalCapabilities));
s.append(" ( ");
if (hasCapability(GPS_CAPABILITY_SCHEDULING)) s.append("SCHEDULING ");
if (hasCapability(GPS_CAPABILITY_MSB)) s.append("MSB ");
@@ -2199,12 +2199,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
}
s.append(")\n");
if (hasCapability(GPS_CAPABILITY_MEASUREMENT_CORRECTIONS)) {
- s.append(" SubHal=MEASUREMENT_CORRECTIONS[");
+ s.append("SubHal=MEASUREMENT_CORRECTIONS[");
s.append(mGnssMeasurementCorrectionsProvider.toStringCapabilities());
s.append("]\n");
}
s.append(mGnssMetrics.dumpGnssMetricsAsText());
- s.append(" native internal state: ").append(native_get_internal_state());
+ s.append("native internal state: \n");
+ s.append(" ").append(native_get_internal_state());
s.append("\n");
pw.append(s);
}
diff --git a/services/core/java/com/android/server/location/LocationProviderProxy.java b/services/core/java/com/android/server/location/LocationProviderProxy.java
index ddbc20358a9d..3a7a249008e0 100644
--- a/services/core/java/com/android/server/location/LocationProviderProxy.java
+++ b/services/core/java/com/android/server/location/LocationProviderProxy.java
@@ -181,10 +181,10 @@ public class LocationProviderProxy extends AbstractLocationProvider {
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println(" service=" + mServiceWatcher);
+ pw.println("service=" + mServiceWatcher);
synchronized (mProviderPackagesLock) {
if (mProviderPackages.size() > 1) {
- pw.println(" additional packages=" + mProviderPackages);
+ pw.println("additional packages=" + mProviderPackages);
}
}
}
diff --git a/services/core/java/com/android/server/location/MockProvider.java b/services/core/java/com/android/server/location/MockProvider.java
index 6accad8a93a0..c645b5546b85 100644
--- a/services/core/java/com/android/server/location/MockProvider.java
+++ b/services/core/java/com/android/server/location/MockProvider.java
@@ -81,7 +81,7 @@ public class MockProvider extends AbstractLocationProvider {
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println(" last location=" + mLocation);
+ pw.println("last location=" + mLocation);
}
@Override
diff --git a/services/core/java/com/android/server/location/PassiveProvider.java b/services/core/java/com/android/server/location/PassiveProvider.java
index 3a841c91399e..7cba1aaca0d6 100644
--- a/services/core/java/com/android/server/location/PassiveProvider.java
+++ b/services/core/java/com/android/server/location/PassiveProvider.java
@@ -68,6 +68,6 @@ public class PassiveProvider extends AbstractLocationProvider {
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println(" report location=" + mReportLocation);
+ pw.println("report location=" + mReportLocation);
}
}