# AbstractTraceSink

Artifact: [androidx.tracing:tracing](https://developer.android.com/jetpack/androidx/releases/tracing) [View Source](https://cs.android.com/search?q=file:androidx/tracing/AbstractTraceSink.kt+class:androidx.tracing.AbstractTraceSink) Added in [2.0.5](https://developer.android.com/jetpack/androidx/releases/tracing#2.0.5)

*** ** * ** ***


```
public abstract class AbstractTraceSink implements AutoCloseable
```

<br />

Known direct subclasses [InMemoryRingBufferTraceSink](https://developer.android.com/reference/androidx/tracing/wire/InMemoryRingBufferTraceSink), [TraceSink](https://developer.android.com/reference/androidx/tracing/wire/TraceSink)

|---|---|
| `https://developer.android.com/reference/androidx/tracing/wire/InMemoryRingBufferTraceSink` | A `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink` that stores `https://developer.android.com/reference/androidx/tracing/TraceEvent`s in a fixed-size ring buffer to minimize allocations. |
| `https://developer.android.com/reference/androidx/tracing/wire/TraceSink` | The trace sink that writes `https://lysine.dev/okio/3.x/okio/okio/-buffered-sink/index.html`, to a new file per trace session. |

*** ** * ** ***

Receives `https://developer.android.com/reference/androidx/tracing/PooledTracePacketArray`s from `https://developer.android.com/reference/androidx/tracing/Track`s and asynchronously serializes them to a file or buffer, depending on implementation.

Note that while serialized trace events are typically written as Perfetto TracePacket protos so that they may be read by [ui.perfetto.dev](https://ui.perfetto.dev/) and queried with the corresponding `TraceProcessor` tools, the final serialization format is up to the AbstractTraceSink's implementation.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink#AbstractTraceSink()()` |

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink#close()()` Close the `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink`, completing any enqueued writes. |
| `abstract void` | `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink#enqueue(androidx.tracing.PooledTracePacketArray)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/tracing/PooledTracePacketArray pooledPacketArray)` Enqueue a `https://developer.android.com/reference/androidx/tracing/PooledTracePacketArray` to be written to the trace. |
| `abstract void` | `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink#flush()()` Flush any enqueued trace events to the `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink`. |
| `abstract void` | `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink#onDroppedTraceEvent()()` Called when the `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink` cannot keep up with incoming trace events from `https://developer.android.com/reference/androidx/tracing/Track`s. |

## Public constructors

### AbstractTraceSink

Added in [2.0.5](https://developer.android.com/jetpack/androidx/releases/tracing#2.0.5)

```
public AbstractTraceSink()
```

## Public methods

### close

Added in [2.0.5](https://developer.android.com/jetpack/androidx/releases/tracing#2.0.5)

```
public abstract void close()
```

Close the `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink`, completing any enqueued writes.

This function may be called from any thread.

### enqueue

Added in [2.0.5](https://developer.android.com/jetpack/androidx/releases/tracing#2.0.5)

```
public abstract void enqueue(@NonNull PooledTracePacketArray pooledPacketArray)
```

Enqueue a `https://developer.android.com/reference/androidx/tracing/PooledTracePacketArray` to be written to the trace.

This function may be called from any thread.

### flush

Added in [2.0.5](https://developer.android.com/jetpack/androidx/releases/tracing#2.0.5)

```
public abstract void flush()
```

Flush any enqueued trace events to the `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink`.

If the trace sink writes to persistent storage, this forces any buffered events to be written immediately. For in-memory sinks, this is typically a no-op because they do not have an underlying persistent storage destination by default.

This function may be called from any thread.

### onDroppedTraceEvent

Added in [2.0.5](https://developer.android.com/jetpack/androidx/releases/tracing#2.0.5)

```
public abstract void onDroppedTraceEvent()
```

Called when the `https://developer.android.com/reference/androidx/tracing/AbstractTraceSink` cannot keep up with incoming trace events from `https://developer.android.com/reference/androidx/tracing/Track`s.

This function may be called from any thread.