Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 504800e9 authored by Blake Kragten's avatar Blake Kragten Committed by Automerger Merge Worker
Browse files

Merge "Add GnssPowerStats Metrics" into sc-dev am: dd33639b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13606030

Change-Id: I35c885b5f50f0b0d9ff2a670a6434174f0d1053e
parents fd983f82 dd33639b
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -81,7 +81,7 @@ public class GnssManagerService {
        mGnssNative = gnssNative;
        mGnssNative = gnssNative;


        mGnssMetrics = new GnssMetrics(mContext, IBatteryStats.Stub.asInterface(
        mGnssMetrics = new GnssMetrics(mContext, IBatteryStats.Stub.asInterface(
                ServiceManager.getService(BatteryStats.SERVICE_NAME)));
                ServiceManager.getService(BatteryStats.SERVICE_NAME)), mGnssNative);


        mGnssLocationProvider = new GnssLocationProvider(mContext, injector, mGnssNative,
        mGnssLocationProvider = new GnssLocationProvider(mContext, injector, mGnssNative,
                mGnssMetrics);
                mGnssMetrics);
+75 −22
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.internal.location.nano.GnssLogsProto.GnssLog;
import com.android.internal.location.nano.GnssLogsProto.PowerMetrics;
import com.android.internal.location.nano.GnssLogsProto.PowerMetrics;
import com.android.internal.util.ConcurrentUtils;
import com.android.internal.util.ConcurrentUtils;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.location.gnss.hal.GnssNative;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
@@ -52,11 +53,14 @@ public class GnssMetrics {


    /** Default time between location fixes (in millisecs) */
    /** Default time between location fixes (in millisecs) */
    private static final int DEFAULT_TIME_BETWEEN_FIXES_MILLISECS = 1000;
    private static final int DEFAULT_TIME_BETWEEN_FIXES_MILLISECS = 1000;
    private static final int CONVERT_MILLI_TO_MICRO = 1000;
    private static final int VENDOR_SPECIFIC_POWER_MODES_SIZE = 10;


    /** Frequency range of GPS L5, Galileo E5a, QZSS J5 frequency band */
    /** Frequency range of GPS L5, Galileo E5a, QZSS J5 frequency band */
    private static final double L5_CARRIER_FREQ_RANGE_LOW_HZ = 1164 * 1e6;
    private static final double L5_CARRIER_FREQ_RANGE_LOW_HZ = 1164 * 1e6;
    private static final double L5_CARRIER_FREQ_RANGE_HIGH_HZ = 1189 * 1e6;
    private static final double L5_CARRIER_FREQ_RANGE_HIGH_HZ = 1189 * 1e6;



    private long mLogStartInElapsedRealtimeMs;
    private long mLogStartInElapsedRealtimeMs;


    GnssPowerMetrics mGnssPowerMetrics;
    GnssPowerMetrics mGnssPowerMetrics;
@@ -88,8 +92,10 @@ public class GnssMetrics {
    long mL5SvStatusReportsUsedInFix;
    long mL5SvStatusReportsUsedInFix;


    private final StatsManager mStatsManager;
    private final StatsManager mStatsManager;
    private final GnssNative mGnssNative;


    public GnssMetrics(Context context, IBatteryStats stats) {
    public GnssMetrics(Context context, IBatteryStats stats, GnssNative gnssNative) {
        mGnssNative = gnssNative;
        mGnssPowerMetrics = new GnssPowerMetrics(stats);
        mGnssPowerMetrics = new GnssPowerMetrics(stats);
        mLocationFailureStatistics = new Statistics();
        mLocationFailureStatistics = new Statistics();
        mTimeToFirstFixSecStatistics = new Statistics();
        mTimeToFirstFixSecStatistics = new Statistics();
@@ -432,7 +438,8 @@ public class GnssMetrics {
        private double mSumSquare;
        private double mSumSquare;
        private long mLongSum;
        private long mLongSum;


        Statistics() {}
        Statistics() {
        }


        /** Resets statistics */
        /** Resets statistics */
        public synchronized void reset() {
        public synchronized void reset() {
@@ -585,6 +592,10 @@ public class GnssMetrics {
                FrameworkStatsLog.GNSS_STATS,
                FrameworkStatsLog.GNSS_STATS,
                null, // use default PullAtomMetadata values
                null, // use default PullAtomMetadata values
                ConcurrentUtils.DIRECT_EXECUTOR, pullAtomCallback);
                ConcurrentUtils.DIRECT_EXECUTOR, pullAtomCallback);
        mStatsManager.setPullAtomCallback(
                FrameworkStatsLog.GNSS_POWER_STATS,
                null, // use default PullAtomMetadata values
                ConcurrentUtils.DIRECT_EXECUTOR, pullAtomCallback);
    }
    }


    /**
    /**
@@ -593,13 +604,12 @@ public class GnssMetrics {
     */
     */
    private class StatsPullAtomCallbackImpl implements StatsManager.StatsPullAtomCallback {
    private class StatsPullAtomCallbackImpl implements StatsManager.StatsPullAtomCallback {


        StatsPullAtomCallbackImpl() {}
        StatsPullAtomCallbackImpl() {
        }


        @Override
        @Override
        public int onPullAtom(int atomTag, List<StatsEvent> data) {
        public int onPullAtom(int atomTag, List<StatsEvent> data) {
            if (atomTag != FrameworkStatsLog.GNSS_STATS) {
            if (atomTag == FrameworkStatsLog.GNSS_STATS) {
                throw new UnsupportedOperationException("Unknown tagId = " + atomTag);
            }
                data.add(FrameworkStatsLog.buildStatsEvent(atomTag,
                data.add(FrameworkStatsLog.buildStatsEvent(atomTag,
                        mLocationFailureReportsStatistics.getCount(),
                        mLocationFailureReportsStatistics.getCount(),
                        mLocationFailureReportsStatistics.getLongSum(),
                        mLocationFailureReportsStatistics.getLongSum(),
@@ -611,7 +621,50 @@ public class GnssMetrics {
                        mTopFourAverageCn0DbmHzReportsStatistics.getLongSum(),
                        mTopFourAverageCn0DbmHzReportsStatistics.getLongSum(),
                        mL5TopFourAverageCn0DbmHzReportsStatistics.getCount(),
                        mL5TopFourAverageCn0DbmHzReportsStatistics.getCount(),
                        mL5TopFourAverageCn0DbmHzReportsStatistics.getLongSum(), mSvStatusReports,
                        mL5TopFourAverageCn0DbmHzReportsStatistics.getLongSum(), mSvStatusReports,
                    mSvStatusReportsUsedInFix, mL5SvStatusReports, mL5SvStatusReportsUsedInFix));
                        mSvStatusReportsUsedInFix, mL5SvStatusReports,
                        mL5SvStatusReportsUsedInFix));
            } else if (atomTag == FrameworkStatsLog.GNSS_POWER_STATS) {
                mGnssNative.requestPowerStats();
                GnssPowerStats gnssPowerStats = mGnssNative.getPowerStats();
                if (gnssPowerStats == null) {
                    return StatsManager.PULL_SKIP;
                }
                double[] otherModesEnergyMilliJoule = new double[VENDOR_SPECIFIC_POWER_MODES_SIZE];
                double[] tempGnssPowerStatsOtherModes =
                        gnssPowerStats.getOtherModesEnergyMilliJoule();
                if (tempGnssPowerStatsOtherModes.length < VENDOR_SPECIFIC_POWER_MODES_SIZE) {
                    System.arraycopy(tempGnssPowerStatsOtherModes, 0,
                            otherModesEnergyMilliJoule, 0,
                            tempGnssPowerStatsOtherModes.length);
                } else {
                    System.arraycopy(tempGnssPowerStatsOtherModes, 0,
                            otherModesEnergyMilliJoule, 0,
                            VENDOR_SPECIFIC_POWER_MODES_SIZE);
                }
                data.add(FrameworkStatsLog.buildStatsEvent(atomTag,
                        (long) (gnssPowerStats.getElapsedRealtimeUncertaintyNanos()),
                        (long) (gnssPowerStats.getTotalEnergyMilliJoule() * CONVERT_MILLI_TO_MICRO),
                        (long) (gnssPowerStats.getSinglebandTrackingModeEnergyMilliJoule()
                                * CONVERT_MILLI_TO_MICRO),
                        (long) (gnssPowerStats.getMultibandTrackingModeEnergyMilliJoule()
                                * CONVERT_MILLI_TO_MICRO),
                        (long) (gnssPowerStats.getSinglebandAcquisitionModeEnergyMilliJoule()
                                * CONVERT_MILLI_TO_MICRO),
                        (long) (gnssPowerStats.getMultibandAcquisitionModeEnergyMilliJoule()
                                * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[0] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[1] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[2] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[3] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[4] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[5] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[6] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[7] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[8] * CONVERT_MILLI_TO_MICRO),
                        (long) (otherModesEnergyMilliJoule[9] * CONVERT_MILLI_TO_MICRO)));
            } else {
                throw new UnsupportedOperationException("Unknown tagId = " + atomTag);
            }
            return StatsManager.PULL_SUCCESS;
            return StatsManager.PULL_SUCCESS;
        }
        }
    }
    }