---
title: "withFrameNanos"
description: "Suspends until a new frame is requested, immediately invokes [onFrame] with the frame time in
nanoseconds in the calling context of frame dispatch, then resumes with the result from
[onFrame].

`frameTimeNanos` should be used when calculating animation time deltas from frame to frame as it
may be normalized to the target time for the frame, not necessarily a direct, \"now\" value.

The time base of the value provided by [withFrameNanos] is implementation defined. Time values
provided are strictly monotonically increasing; after a call to [withFrameNanos] completes it
must not provide the same value again for a subsequent call.

This function will invoke [MonotonicFrameClock.withFrameNanos] using the calling
[CoroutineContext]'s [MonotonicFrameClock] and will throw an [IllegalStateException] if one is
not present in the [CoroutineContext]."
type: "function"
---

<div class='type'>Function</div>


<a id='references'></a>
<div class='sourceset sourceset-common'>Common</div>


```kotlin
public suspend fun <R> withFrameNanos(onFrame: (frameTimeNanos: Long) -> R): R
```


Suspends until a new frame is requested, immediately invokes `onFrame` with the frame time in
nanoseconds in the calling context of frame dispatch, then resumes with the result from
`onFrame`.

`frameTimeNanos` should be used when calculating animation time deltas from frame to frame as it
may be normalized to the target time for the frame, not necessarily a direct, "now" value.

The time base of the value provided by `withFrameNanos` is implementation defined. Time values
provided are strictly monotonically increasing; after a call to `withFrameNanos` completes it
must not provide the same value again for a subsequent call.

This function will invoke `MonotonicFrameClock.withFrameNanos` using the calling
`CoroutineContext`'s `MonotonicFrameClock` and will throw an `IllegalStateException` if one is
not present in the `CoroutineContext`.



