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

Commit 90cbc5b4 authored by Hugo Benichi's avatar Hugo Benichi
Browse files

Fix missing IpConnectivity metrics

The IpConnectivityLog class looks up MetricsLoggerService once only
at creation. If a IpConnectivityLog user instantiates this class too
early during the boot process, the MetricsLoggerService is not found
and no event can be recorded.

This patch makes IpConnectivityLog attempt to look up
MetricsLoggerService as long as it hasn't found it yet.

This allows IpManager and ConnectivityService to upload
android.net.metrics events.

Bug: 30490301
Change-Id: I97102b95a775ea9e90351b9887ae4661fddc2af9
parent 37818360
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -46,11 +46,12 @@ public class ConnectivityMetricsLogger {

    public static final String DATA_KEY_EVENTS_COUNT = "count";

    /** {@hide} */ protected final IConnectivityMetricsLogger mService;
    /** {@hide} */ protected IConnectivityMetricsLogger mService;
    /** {@hide} */ protected volatile long mServiceUnblockedTimestampMillis;
    private int mNumSkippedEvents;

    public ConnectivityMetricsLogger() {
        // TODO: consider not initializing mService in constructor
        this(IConnectivityMetricsLogger.Stub.asInterface(
                ServiceManager.getService(CONNECTIVITY_METRICS_LOGGER_SERVICE)));
    }
@@ -61,6 +62,18 @@ public class ConnectivityMetricsLogger {
        mService = service;
    }

    /** {@hide} */
    protected boolean checkLoggerService() {
        if (mService != null) {
            return true;
        }
        // Two threads racing here will write the same pointer because getService
        // is idempotent once MetricsLoggerService is initialized.
        mService = IConnectivityMetricsLogger.Stub.asInterface(
                ServiceManager.getService(CONNECTIVITY_METRICS_LOGGER_SERVICE));
        return mService != null;
    }

    /**
     * Log a ConnectivityMetricsEvent.
     *
+3 −3
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ import com.android.internal.annotations.VisibleForTesting;
 */
public class IpConnectivityLog extends ConnectivityMetricsLogger {
    private static String TAG = "IpConnectivityMetricsLogger";
    private static final boolean DBG = false;
    private static final boolean DBG = true;

    public IpConnectivityLog() {
        // mService initialized in super constructor.
@@ -52,9 +52,9 @@ public class IpConnectivityLog extends ConnectivityMetricsLogger {
     * @return true if the event was successfully logged.
     */
    public boolean log(long timestamp, Parcelable data) {
        if (mService == null) {
        if (!checkLoggerService()) {
            if (DBG) {
                Log.d(TAG, CONNECTIVITY_METRICS_LOGGER_SERVICE + " service not ready");
                Log.d(TAG, CONNECTIVITY_METRICS_LOGGER_SERVICE + " service was not ready");
            }
            return false;
        }