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

Commit de0a2c47 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Log the last GnssMeasurementsEvent summary in dumpsys" into main

parents b39ed828 97fc6f5e
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.android.server.location.gnss.GnssManagerService.TAG;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppOpsManager;
import android.location.GnssMeasurement;
import android.location.GnssMeasurementRequest;
import android.location.GnssMeasurementsEvent;
import android.location.IGnssMeasurementsListener;
@@ -33,6 +34,7 @@ import android.os.IBinder;
import android.stats.location.LocationStatsEnums;
import android.util.Log;

import com.android.internal.annotations.GuardedBy;
import com.android.server.location.gnss.GnssConfiguration.HalInterfaceVersion;
import com.android.server.location.gnss.hal.GnssNative;
import com.android.server.location.injector.AppOpsHelper;
@@ -40,6 +42,8 @@ import com.android.server.location.injector.Injector;
import com.android.server.location.injector.LocationUsageLogger;
import com.android.server.location.injector.SettingsHelper;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Collection;

/**
@@ -91,6 +95,9 @@ public final class GnssMeasurementsProvider extends
    private final LocationUsageLogger mLogger;
    private final GnssNative mGnssNative;

    @GuardedBy("mMultiplexerLock")
    private GnssMeasurementsEvent mLastGnssMeasurementsEvent;

    public GnssMeasurementsProvider(Injector injector, GnssNative gnssNative) {
        super(injector);
        mAppOpsHelper = injector.getAppOpsHelper();
@@ -264,5 +271,46 @@ public final class GnssMeasurementsProvider extends
                return null;
            }
        });
        synchronized (mMultiplexerLock) {
            mLastGnssMeasurementsEvent = event;
        }
    }

    @Override
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        super.dump(fd, pw, args);
        pw.print("last measurements=");
        pw.println(getLastMeasurementEventSummary());
    }

    /**
     * Returns a string of GnssMeasurementsEvent summary including received time, satellite count
     * and average baseband C/No.
     */
    private String getLastMeasurementEventSummary() {
        synchronized (mMultiplexerLock) {
            if (mLastGnssMeasurementsEvent == null) {
                return null;
            }
            StringBuilder builder = new StringBuilder("[");
            builder.append("elapsedRealtimeNs=").append(
                    mLastGnssMeasurementsEvent.getClock().getElapsedRealtimeNanos());
            builder.append(" measurementCount=").append(
                    mLastGnssMeasurementsEvent.getMeasurements().size());

            float sumBasebandCn0 = 0;
            int countBasebandCn0 = 0;
            for (GnssMeasurement measurement : mLastGnssMeasurementsEvent.getMeasurements()) {
                if (measurement.hasBasebandCn0DbHz()) {
                    sumBasebandCn0 += measurement.getBasebandCn0DbHz();
                    countBasebandCn0++;
                }
            }
            if (countBasebandCn0 > 0) {
                builder.append(" avgBasebandCn0=").append(sumBasebandCn0 / countBasebandCn0);
            }
            builder.append("]");
            return builder.toString();
        }
    }
}