# SurfaceControlCompat.Transaction

Artifact: [androidx.graphics:graphics-core](https://developer.android.com/jetpack/androidx/releases/graphics) [View Source](https://cs.android.com/search?q=file:androidx/graphics/surface/SurfaceControlCompat.kt+class:androidx.graphics.surface.SurfaceControlCompat.Transaction) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

*** ** * ** ***


```
@RequiresApi(value = 29)
public final class SurfaceControlCompat.Transaction implements AutoCloseable
```

<br />

*** ** * ** ***

An atomic set of changes to a set of `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#Transaction()()` |

| ### Public methods |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 31) https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#addTransactionCommittedListener(java.util.concurrent.Executor,androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.TransactionCommittedListener listener )` Request to add a `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.TransactionCommittedListener`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#clearFrameRate(androidx.graphics.surface.SurfaceControlCompat)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl)` Clears the frame rate which was set for the surface SurfaceControl. |
| `void` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#close()()` Release the native transaction object, without committing it. |
| `final void` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#commit()()` Commit the transaction, clearing it's state, and making it usable as a new transaction. |
| `final void` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 33) https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#commitTransactionOnDraw(android.view.AttachedSurfaceControl)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/AttachedSurfaceControl.html attachedSurfaceControl )` Consume the passed in transaction, and request the View hierarchy to apply it atomically with the next draw. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 33) https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#reparent(androidx.graphics.surface.SurfaceControlCompat,android.view.AttachedSurfaceControl)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/AttachedSurfaceControl.html attachedSurfaceControl )` Re-parents a given `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to be a child of the `https://developer.android.com/reference/android/view/AttachedSurfaceControl.html`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#reparent(androidx.graphics.surface.SurfaceControlCompat,androidx.graphics.surface.SurfaceControlCompat)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat newParent )` Re-parents a given `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to a new parent. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setAlpha(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, float alpha)` Set the alpha for a given surface. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setBuffer(androidx.graphics.surface.SurfaceControlCompat,android.hardware.HardwareBuffer,androidx.hardware.SyncFenceCompat,kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, https://developer.android.com/reference/android/hardware/HardwareBuffer.html buffer, https://developer.android.com/reference/androidx/hardware/SyncFenceCompat fence, Function1<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/hardware/SyncFenceCompat, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> releaseCallback )` Updates the `https://developer.android.com/reference/android/hardware/HardwareBuffer.html` displayed for the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setBufferTransform(androidx.graphics.surface.SurfaceControlCompat,kotlin.Int)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, int transformation )` Sets the buffer transform that should be applied to the current buffer |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setCrop(androidx.graphics.surface.SurfaceControlCompat,android.graphics.Rect)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, https://developer.android.com/reference/android/graphics/Rect.html crop)` Bounds the surface and its children to the bounds specified. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setDamageRegion(androidx.graphics.surface.SurfaceControlCompat,android.graphics.Region)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, https://developer.android.com/reference/android/graphics/Region.html region )` Updates the region for the content on this surface updated in this transaction. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setDataSpace(androidx.graphics.surface.SurfaceControlCompat,kotlin.Int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, int dataSpace)` Set the `https://developer.android.com/reference/androidx/hardware/DataSpace` for the SurfaceControl. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 34) https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setExtendedRangeBrightness(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Float)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, @https://developer.android.com/reference/androidx/annotation/FloatRange(from = 1.0, fromInclusive = true) float currentBufferRatio, @https://developer.android.com/reference/androidx/annotation/FloatRange(from = 1.0, fromInclusive = true) float desiredRatio )` Sets the desired extended range brightness for the layer. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setFrameRate(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Int,kotlin.Int)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, float frameRate, int compatibility, int changeFrameRateStrategy )` Sets the intended frame rate for `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setLayer(androidx.graphics.surface.SurfaceControlCompat,kotlin.Int)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, int z)` Set the Z-order for a given `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`, relative to its siblings. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setOpaque(androidx.graphics.surface.SurfaceControlCompat,kotlin.Boolean)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, boolean isOpaque)` Indicates whether the surface must be considered opaque, even if its pixel format is set to translucent. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setPosition(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Float)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, float x, float y )` Sets the SurfaceControl to the specified position relative to the parent SurfaceControl |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setScale(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Float)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, float scaleX, float scaleY )` Sets the SurfaceControl to the specified scale with (0, 0) as the center point of the scale. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setVisibility(androidx.graphics.surface.SurfaceControlCompat,kotlin.Boolean)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl, boolean visible )` Sets the visibility of a given Layer and it's sub-tree. |

## Public constructors

### Transaction

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

```
public Transaction()
```

## Public methods

### addTransactionCommittedListener

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

```
@RequiresApi(value = 31)
public final @NonNull SurfaceControlCompat.Transaction addTransactionCommittedListener(
    @NonNull Executor executor,
    @NonNull SurfaceControlCompat.TransactionCommittedListener listener
)
```

Request to add a `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.TransactionCommittedListener`. The callback is invoked when transaction is applied and the updates are ready to be presented. Once applied, any callbacks added before the commit will be cleared from the Transaction. This callback does not mean buffers have been released! It simply means that any new transactions applied will not overwrite the transaction for which we are receiving a callback and instead will be included in the next frame. If you are trying to avoid dropping frames (overwriting transactions), and unable to use timestamps (Which provide a more efficient solution), then this method provides a method to pace your transaction application.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/concurrent/Executor.html executor` | `https://developer.android.com/reference/java/util/concurrent/Executor.html` to provide the thread the callback is invoked on. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.TransactionCommittedListener listener` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.TransactionCommittedListener` instance that is invoked when the transaction has been committed. |

### clearFrameRate

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

```
public final @NonNull SurfaceControlCompat.Transaction clearFrameRate(@NonNull SurfaceControlCompat surfaceControl)
```

Clears the frame rate which was set for the surface SurfaceControl.

This is equivalent to calling `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setFrameRate(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Int,kotlin.Int)` with 0 for the framerate and `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#FRAME_RATE_COMPATIBILITY_DEFAULT()`

Note that this only has an effect for surfaces presented on the display. If this surface is consumed by something other than the system compositor, e.g. a media codec, this call has no effect.

This is only supported on Android R and above. This is ignored on older Android versions.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to clear the frame rate |

### close

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

```
public void close()
```

Release the native transaction object, without committing it.

### commit

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

```
public final void commit()
```

Commit the transaction, clearing it's state, and making it usable as a new transaction. This will not release any resources and `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#close()` must be called to release the transaction.

### commitTransactionOnDraw

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

```
@RequiresApi(value = 33)
public final void commitTransactionOnDraw(
    @NonNull AttachedSurfaceControl attachedSurfaceControl
)
```

Consume the passed in transaction, and request the View hierarchy to apply it atomically with the next draw. This transaction will be merged with the buffer transaction from the ViewRoot and they will show up on-screen atomically synced. This will not cause a draw to be scheduled, and if there are no other changes to the View hierarchy you may need to call View.invalidate()

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/AttachedSurfaceControl.html attachedSurfaceControl` | `https://developer.android.com/reference/android/view/AttachedSurfaceControl.html` associated with the ViewRoot that will apply the provided transaction on the next draw pass |

### reparent

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

```
@RequiresApi(value = 33)
public final @NonNull SurfaceControlCompat.Transaction reparent(
    @NonNull SurfaceControlCompat surfaceControl,
    @NonNull AttachedSurfaceControl attachedSurfaceControl
)
```

Re-parents a given `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to be a child of the `https://developer.android.com/reference/android/view/AttachedSurfaceControl.html`. Children inherit transform (position, scaling) crop, visibility, and Z-ordering from their parents, as if the children were pixels within the parent `https://developer.android.com/reference/android/view/Surface.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` instance to reparent |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/AttachedSurfaceControl.html attachedSurfaceControl` | `https://developer.android.com/reference/android/view/AttachedSurfaceControl.html` instance that acts as the new parent of the provided `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` instance. |

### reparent

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

```
public final @NonNull SurfaceControlCompat.Transaction reparent(
    @NonNull SurfaceControlCompat surfaceControl,
    SurfaceControlCompat newParent
)
```

Re-parents a given `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to a new parent. Children inherit transform (position, scaling) crop, visibility, and Z-ordering from their parents, as if the children were pixels within the parent `https://developer.android.com/reference/android/view/Surface.html`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` instance to reparent |
| `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat newParent` | Parent `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` that the target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` instance is added to. This can be null indicating that the target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` should be removed from the scene. |

### setAlpha

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

```
public final @NonNull SurfaceControlCompat.Transaction setAlpha(@NonNull SurfaceControlCompat surfaceControl, float alpha)
```

Set the alpha for a given surface. If the alpha is non-zero the SurfaceControl will be blended with the Surfaces under it according to the specified ratio.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to set the alpha of. |
| `float alpha` | The alpha to set. Value is between 0.0 and 1.0 inclusive. |

### setBuffer

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

```
public final @NonNull SurfaceControlCompat.Transaction setBuffer(
    @NonNull SurfaceControlCompat surfaceControl,
    HardwareBuffer buffer,
    SyncFenceCompat fence,
    Function1<@NonNull SyncFenceCompat, Unit> releaseCallback
)
```

Updates the `https://developer.android.com/reference/android/hardware/HardwareBuffer.html` displayed for the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`. Note that the buffer must be allocated with `https://developer.android.com/reference/android/hardware/HardwareBuffer.html#USAGE_COMPOSER_OVERLAY` as well as `https://developer.android.com/reference/android/hardware/HardwareBuffer.html#USAGE_GPU_SAMPLED_IMAGE` as the surface control might be composited using either an overlay or using the GPU. A presentation fence may be passed to improve performance by allowing the buffer to complete rendering while it is waiting for the transaction to be applied. For example, if the buffer is being produced by rendering with OpenGL ES then a fence created with the eglDupNativeFenceFDANDROID EGL extension API can be used to allow the GPU rendering to be concurrent with the transaction. The compositor will wait for the fence to be signaled before the buffer is displayed. If multiple buffers are set as part of the same transaction, the presentation fences of all of them must signal before any buffer is displayed. That is, the entire transaction is delayed until all presentation fences have signaled, ensuring the transaction remains consistent.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to configure the provided buffer. |
| `https://developer.android.com/reference/android/hardware/HardwareBuffer.html buffer` | `https://developer.android.com/reference/android/hardware/HardwareBuffer.html` instance to be rendered by the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` instance. Use null to remove the current buffer that was previously configured on this `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` instance. |
| `https://developer.android.com/reference/androidx/hardware/SyncFenceCompat fence` | Optional `https://developer.android.com/reference/androidx/hardware/SyncFenceCompat` that serves as the presentation fence. If set, the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` will not apply until the fence signals. |
| `Function1<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/hardware/SyncFenceCompat, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> releaseCallback` | Optional callback invoked when the buffer is ready for re-use after being presented to the display. This also includes a `https://developer.android.com/reference/androidx/hardware/SyncFenceCompat` instance that consumers must wait on before consuming the buffer |

### setBufferTransform

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

```
public final @NonNull SurfaceControlCompat.Transaction setBufferTransform(
    @NonNull SurfaceControlCompat surfaceControl,
    int transformation
)
```

Sets the buffer transform that should be applied to the current buffer

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to update. This value cannot be null. |
| `int transformation` | The transform to apply to the buffer. Value is `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_IDENTITY()`, `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_MIRROR_HORIZONTAL()`, `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_MIRROR_VERTICAL()`, `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_ROTATE_90()`, `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_ROTATE_180()`, `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_ROTATE_270()`, `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_MIRROR_HORIZONTAL()` \| `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_ROTATE_90()`, or `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_MIRROR_VERTICAL()` \| `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#BUFFER_TRANSFORM_ROTATE_90()` Value is one of the following: - `0` - `1` - `2` - `3` - `4` - `7` <br /> |

### setCrop

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

```
public final @NonNull SurfaceControlCompat.Transaction setCrop(@NonNull SurfaceControlCompat surfaceControl, Rect crop)
```

Bounds the surface and its children to the bounds specified. Size of the surface will be ignored and only the crop and buffer size will be used to determine the bounds of the surface. If no crop is specified and the surface has no buffer, the surface bounds is only constrained by the size of its parent bounds.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | The `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to apply the crop to. This value cannot be null. |
| `https://developer.android.com/reference/android/graphics/Rect.html crop` | Bounds of the crop to apply. This value can be null. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if crop is not a valid rectangle. |

### setDamageRegion

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

```
public final @NonNull SurfaceControlCompat.Transaction setDamageRegion(
    @NonNull SurfaceControlCompat surfaceControl,
    Region region
)
```

Updates the region for the content on this surface updated in this transaction. The damage region is the area of the buffer that has changed since the previously sent buffer. This can be used to reduce the amount of recomposition that needs to happen when only a small region of the buffer is being updated, such as for a small blinking cursor or a loading indicator.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to set damage region of. |
| `https://developer.android.com/reference/android/graphics/Region.html region` | The region to be set. If null, the entire buffer is assumed dirty. This is equivalent to not setting a damage region at all. |

### setDataSpace

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

```
public final @NonNull SurfaceControlCompat.Transaction setDataSpace(@NonNull SurfaceControlCompat surfaceControl, int dataSpace)
```

Set the `https://developer.android.com/reference/androidx/hardware/DataSpace` for the SurfaceControl. This will control how the buffer set with `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setBuffer(androidx.graphics.surface.SurfaceControlCompat,android.hardware.HardwareBuffer,androidx.hardware.SyncFenceCompat,kotlin.Function1)` is displayed.

**NOTE** it is strongly recommended to verify that the display supports the corresponding `https://developer.android.com/reference/androidx/hardware/DataSpace` in advance before configuring the data space. For example, if `https://developer.android.com/reference/androidx/hardware/DataSpace#DATASPACE_DISPLAY_P3()` is desired, consumers should verify that `https://developer.android.com/reference/android/view/Window.html#isWideColorGamut()` returns true before proceeding.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | The SurfaceControl to update |
| `int dataSpace` | The `https://developer.android.com/reference/androidx/hardware/DataSpace` to set it to. Must be one of named `https://developer.android.com/reference/android/hardware/DataSpace.html` types. Value is either `0` or a combination of the following: - `4096` - `4098` - `4100` - `4101` - `0` - `406913024` - `142671872` - `411107328` - `143261696` - `168165376` - `163971072` - `151715840` - `146931712` - `281149440` - `281280512` - `147193856` - `281083904` - `155844608` - `138477568` <br /> |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | this |

| See also |
|---|---|
| `https://developer.android.com/reference/android/view/SurfaceControl.Transaction.html#setDataSpace(android.view.SurfaceControl, int)` |   |

### setExtendedRangeBrightness

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

```
@RequiresApi(value = 34)
public final @NonNull SurfaceControlCompat.Transaction setExtendedRangeBrightness(
    @NonNull SurfaceControlCompat surfaceControl,
    @FloatRange(from = 1.0, fromInclusive = true) float currentBufferRatio,
    @FloatRange(from = 1.0, fromInclusive = true) float desiredRatio
)
```

Sets the desired extended range brightness for the layer. This only applies for layers that are displaying `https://developer.android.com/reference/android/hardware/HardwareBuffer.html` instances with a DataSpace of `https://developer.android.com/reference/androidx/hardware/DataSpace#RANGE_EXTENDED()`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | The layer whose extended range brightness is being specified |
| `@https://developer.android.com/reference/androidx/annotation/FloatRange(from = 1.0, fromInclusive = true) float currentBufferRatio` | The current hdr/sdr ratio of the current buffer. For example if the buffer was rendered with a target SDR whitepoint of 100 nits and a max display brightness of 200 nits, this should be set to 2.0f. Default value is 1.0f. Transfer functions that encode their own brightness ranges, such as HLG or PQ, should also set this to 1.0f and instead communicate extended content brightness information via metadata such as CTA861_3 or SMPTE2086. Must be finite \&\&\>= 1.0f |
| `@https://developer.android.com/reference/androidx/annotation/FloatRange(from = 1.0, fromInclusive = true) float desiredRatio` | The desired hdr/sdr ratio. This can be used to communicate the max desired brightness range. This is similar to the "max luminance" value in other HDR metadata formats, but represented as a ratio of the target SDR whitepoint to the max display brightness. The system may not be able to, or may choose not to, deliver the requested range. While requesting a large desired ratio will result in the most dynamic range, voluntarily reducing the requested range can help improve battery life as well as can improve quality by ensuring greater bit depth is allocated to the luminance range in use. Default value is 1.0f and indicates that extended range brightness is not being used, so the resulting SDR or HDR behavior will be determined entirely by the dataspace being used (ie, typically SDR however PQ or HLG transfer functions will still result in HDR) Must be finite \&\&\>= 1.0f |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction` | this |

### setFrameRate

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

```
public final @NonNull SurfaceControlCompat.Transaction setFrameRate(
    @NonNull SurfaceControlCompat surfaceControl,
    float frameRate,
    int compatibility,
    int changeFrameRateStrategy
)
```

Sets the intended frame rate for `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`.

On devices that are capable of running the display at different refresh rates, the system may choose a display refresh rate to better match this surface's frame rate. Usage of this API won't directly affect the application's frame production pipeline. However, because the system may change the display refresh rate, calls to this function may result in changes to Choreographer callback timings, and changes to the time interval at which the system releases buffers back to the application.

This method is only supported on Android R+ and is ignored on older platform versions.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | The target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` that will have it's frame rate changed |
| `float frameRate` | The intended frame rate of this surface, in frames per second. 0 is a special value that indicates the app will accept the system's choice for the display frame rate, which is the default behavior if this function isn't called. Must be greater than or equal to 0. The frameRate param does not need to be a valid refresh rate for this device's display - e.g., it's fine to pass 30fps to a device that can only run the display at 60fps. |
| `int compatibility` | The frame rate compatibility of this surface. The compatibility value may influence the system's choice of display frame rate. This must be either `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#FRAME_RATE_COMPATIBILITY_DEFAULT()` or `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#FRAME_RATE_COMPATIBILITY_FIXED_SOURCE()` This parameter is ignored when frameRate is 0. Value is one of the following: - `0` - `1` <br /> |
| `int changeFrameRateStrategy` | Whether display refresh rate transitions should be seamless. A seamless transition does not have any visual interruptions, such as a black screen for a second or two. Must be either `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#CHANGE_FRAME_RATE_ALWAYS()` or `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat#CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS()`. This parameter is only supported on Android S and when `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setFrameRate(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Int,kotlin.Int)` is not 0. This is ignored on older Android versions and when `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat.Transaction#setFrameRate(androidx.graphics.surface.SurfaceControlCompat,kotlin.Float,kotlin.Int,kotlin.Int)` is 0. Value is one of the following: - `0` - `1` <br /> |

### setLayer

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

```
public final @NonNull SurfaceControlCompat.Transaction setLayer(@NonNull SurfaceControlCompat surfaceControl, int z)
```

Set the Z-order for a given `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat`, relative to its siblings. If two siblings share the same Z order the ordering is undefined. `https://developer.android.com/reference/android/view/Surface.html`s with a negative Z will be placed below the parent `https://developer.android.com/reference/android/view/Surface.html`.

### setOpaque

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

```
public final @NonNull SurfaceControlCompat.Transaction setOpaque(@NonNull SurfaceControlCompat surfaceControl, boolean isOpaque)
```

Indicates whether the surface must be considered opaque, even if its pixel format is set to translucent. This can be useful if an application needs full RGBA 8888 support for instance but will still draw every pixel opaque. This flag only determines whether opacity will be sampled from the alpha channel. Plane-alpha from calls to setAlpha() can still result in blended composition regardless of the opaque setting. Combined effects are (assuming a buffer format with an alpha channel):

OPAQUE + alpha(1.0) == opaque composition OPAQUE + alpha(0.x) == blended composition OPAQUE + alpha(0.0) == no composition !OPAQUE + alpha(1.0) == blended composition !OPAQUE + alpha(0.x) == blended composition !OPAQUE + alpha(0.0) == no composition If the underlying buffer lacks an alpha channel, it is as if setOpaque(true) were set automatically.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to change the opaque flag for |
| `boolean isOpaque` | Flag indicating if the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` should be fully opaque or transparent |

### setPosition

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

```
public final @NonNull SurfaceControlCompat.Transaction setPosition(
    @NonNull SurfaceControlCompat surfaceControl,
    float x,
    float y
)
```

Sets the SurfaceControl to the specified position relative to the parent SurfaceControl

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | The `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to change position. This value cannot be null |
| `float x` | the X position |
| `float y` | the Y position |

### setScale

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

```
public final @NonNull SurfaceControlCompat.Transaction setScale(
    @NonNull SurfaceControlCompat surfaceControl,
    float scaleX,
    float scaleY
)
```

Sets the SurfaceControl to the specified scale with (0, 0) as the center point of the scale.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | The `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to change scale. This value cannot be null. |
| `float scaleX` | the X scale |
| `float scaleY` | the Y scale |

### setVisibility

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

```
public final @NonNull SurfaceControlCompat.Transaction setVisibility(
    @NonNull SurfaceControlCompat surfaceControl,
    boolean visible
)
```

Sets the visibility of a given Layer and it's sub-tree.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat surfaceControl` | Target `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` to change the visibility |
| `boolean visible` | `true` to indicate the `https://developer.android.com/reference/androidx/graphics/surface/SurfaceControlCompat` should be visible, `false` otherwise |