chromium/components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java

// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.net;

import java.util.concurrent.Executor;

/**
 * Watches observations of various round trip times (RTTs) at various layers of the network stack.
 * These include RTT estimates by QUIC and TCP, as well as the time between when a URL request is
 * sent and when the first byte of the response is received.
 */
public abstract class NetworkQualityRttListener {
    /**
     * The executor on which this listener will be notified. Set as a final field, so it can be
     * safely accessed across threads.
     */
    private final Executor mExecutor;

    /** @param executor The executor on which the observations are reported. */
    public NetworkQualityRttListener(Executor executor) {
        if (executor == null) {
            throw new IllegalStateException("Executor must not be null");
        }
        mExecutor = executor;
    }

    public Executor getExecutor() {
        return mExecutor;
    }

    /**
     * Reports a new round trip time observation.
     *
     * @param rttMs the round trip time in milliseconds.
     * @param whenMs milliseconds since the Epoch (January 1st 1970, 00:00:00.000).
     * @param source the observation source from {@code NetworkQualityObservationSource}.
     */
    public abstract void onRttObservation(int rttMs, long whenMs, int source);
}