# PercentileTimeToFirstByteEstimator

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator.java+class:androidx.media3.exoplayer.upstream.experimental.PercentileTimeToFirstByteEstimator)

*** ** * ** ***


```
@UnstableApi
public final class PercentileTimeToFirstByteEstimator implements TimeToFirstByteEstimator
```

<br />

*** ** * ** ***

Implementation of `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/TimeToFirstByteEstimator` that returns a configured percentile of a sliding window of collected response times.

## Summary

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#DEFAULT_MAX_SAMPLES_COUNT() = 10` The default maximum number of samples. |
| `static final float` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#DEFAULT_PERCENTILE() = 0.5f` The default percentile to return. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#PercentileTimeToFirstByteEstimator()()` Creates an instance that keeps up to `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#DEFAULT_MAX_SAMPLES_COUNT()` samples and returns the `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#DEFAULT_PERCENTILE()` percentile. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#PercentileTimeToFirstByteEstimator(int,float)( int numberOfSamples, float percentile )` Creates an instance. |

| ### Public methods |
|---|---|
| `long` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#getTimeToFirstByteEstimateUs()()` Returns the estimated time to first byte of the response body, in microseconds, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if no estimate is available. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#onTransferInitializing(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Called when a transfer is being initialized. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#onTransferStart(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Called when a transfer starts. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#reset()()` Resets the estimator. |

## Constants

### DEFAULT_MAX_SAMPLES_COUNT

```
public static final int DEFAULT_MAX_SAMPLES_COUNT = 10
```

The default maximum number of samples.

### DEFAULT_PERCENTILE

```
public static final float DEFAULT_PERCENTILE = 0.5f
```

The default percentile to return.

## Public constructors

### PercentileTimeToFirstByteEstimator

```
public PercentileTimeToFirstByteEstimator()
```

Creates an instance that keeps up to `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#DEFAULT_MAX_SAMPLES_COUNT()` samples and returns the `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/PercentileTimeToFirstByteEstimator#DEFAULT_PERCENTILE()` percentile.

### PercentileTimeToFirstByteEstimator

```
public PercentileTimeToFirstByteEstimator(
    int numberOfSamples,
    float percentile
)
```

Creates an instance.

| Parameters |
|---|---|
| `int numberOfSamples` | The maximum number of samples to be kept in the sliding window. |
| `float percentile` | The percentile for estimating the time to the first byte. |

## Public methods

### getTimeToFirstByteEstimateUs

```
public long getTimeToFirstByteEstimateUs()
```

Returns the estimated time to first byte of the response body, in microseconds, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if no estimate is available.

### onTransferInitializing

```
public void onTransferInitializing(DataSpec dataSpec)
```

Called when a transfer is being initialized.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Describes the data for which the transfer is initialized. |

### onTransferStart

```
public void onTransferStart(DataSpec dataSpec)
```

Called when a transfer starts.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Describes the data being transferred. |

### reset

```
public void reset()
```

Resets the estimator.