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

`frameTimeMillis` 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 [MonotonicFrameClock.withFrameMillis] is implementation
defined. Time values provided are monotonically increasing; after a call to [withFrameMillis]
completes it must not provide a smaller value for a subsequent call."
type: "function"
---

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


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


```kotlin
public suspend inline fun <R> MonotonicFrameClock.withFrameMillis(
    crossinline onFrame: (frameTimeMillis: Long) -> R
): R
```


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

`frameTimeMillis` 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 `MonotonicFrameClock.withFrameMillis` is implementation
defined. Time values provided are monotonically increasing; after a call to `withFrameMillis`
completes it must not provide a smaller value for a subsequent call.



<div class='sourceset sourceset-common'>Common</div>


```kotlin
public suspend fun <R> withFrameMillis(onFrame: (frameTimeMillis: Long) -> R): R
```


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

`frameTimeMillis` 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 `MonotonicFrameClock.withFrameMillis` is implementation
defined. Time values provided are monotonically increasing; after a call to `withFrameMillis`
completes it must not provide a smaller value 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`.



