# CachedRegionTracker

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/CachedRegionTracker.java+class:androidx.media3.exoplayer.upstream.CachedRegionTracker)

*** ** * ** ***


```
@UnstableApi
public final class CachedRegionTracker implements Cache.Listener
```

<br />

*** ** * ** ***

Utility class for efficiently tracking regions of data that are stored in a `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache` for a given cache key.

## Summary

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#CACHED_TO_END() = -2` |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#NOT_CACHED() = -1` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#CachedRegionTracker(androidx.media3.datasource.cache.Cache,java.lang.String,androidx.media3.extractor.ChunkIndex)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/java/lang/String.html cacheKey, https://developer.android.com/reference/androidx/media3/extractor/ChunkIndex chunkIndex)` |

| ### Public methods |
|---|---|
| `synchronized int` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#getRegionEndTimeMs(long)(long byteOffset)` When provided with a byte offset, this method locates the cached region within which the offset falls, and returns the approximate end position in milliseconds of that region. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#onSpanAdded(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan span)` Called when a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is added to the cache. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#onSpanRemoved(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan span)` Called when a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is removed from the cache. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#onSpanTouched(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan,androidx.media3.datasource.cache.CacheSpan)(https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan oldSpan, https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan newSpan)` Called when an existing `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is touched, causing it to be replaced. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#release()()` |

## Constants

### CACHED_TO_END

```
public static final int CACHED_TO_END = -2
```

### NOT_CACHED

```
public static final int NOT_CACHED = -1
```

## Public constructors

### CachedRegionTracker

```
public CachedRegionTracker(Cache cache, String cacheKey, ChunkIndex chunkIndex)
```

## Public methods

### getRegionEndTimeMs

```
synchronized public int getRegionEndTimeMs(long byteOffset)
```

When provided with a byte offset, this method locates the cached region within which the offset falls, and returns the approximate end position in milliseconds of that region. If the byte offset does not fall within a cached region then `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#NOT_CACHED()` is returned. If the cached region extends to the end of the stream, `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#CACHED_TO_END()` is returned.

| Parameters |
|---|---|
| `long byteOffset` | The byte offset in the underlying stream. |

| Returns |
|---|---|
| `int` | The end position of the corresponding cache region, `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#NOT_CACHED()`, or `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CachedRegionTracker#CACHED_TO_END()`. |

### onSpanAdded

```
synchronized public void onSpanAdded(Cache cache, CacheSpan span)
```

Called when a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is added to the cache.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache` | The source of the event. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan span` | The added `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan`. |

### onSpanRemoved

```
synchronized public void onSpanRemoved(Cache cache, CacheSpan span)
```

Called when a `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is removed from the cache.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache` | The source of the event. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan span` | The removed `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan`. |

### onSpanTouched

```
public void onSpanTouched(Cache cache, CacheSpan oldSpan, CacheSpan newSpan)
```

Called when an existing `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is touched, causing it to be replaced. The new `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan` is guaranteed to represent the same data as the one it replaces, however `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan#file()` and `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan#lastTouchTimestamp()` may have changed.

Note that for span replacement, `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache.Listener#onSpanAdded(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan)` and `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache.Listener#onSpanRemoved(androidx.media3.datasource.cache.Cache,androidx.media3.datasource.cache.CacheSpan)` are not called in addition to this method.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/cache/Cache cache` | The source of the event. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan oldSpan` | The old `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan`, which has been removed from the cache. |
| `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan newSpan` | The new `https://developer.android.com/reference/androidx/media3/datasource/cache/CacheSpan`, which has been added to the cache. |

### release

```
public void release()
```