<!--
{
  "availability" : [
    "macOS: 26.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CompositorServices",
  "identifier" : "/documentation/CompositorServices/LayerRenderer/Frame/Timing/optimalInputTime",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Property",
  "symbol" : {
    "kind" : "Instance Property",
    "modules" : [
      "Compositor Services",
      "CompositorServices"
    ],
    "preciseIdentifier" : "s:So17cp_frame_timing_tV18CompositorServicesE16optimalInputTimeSo010CP_OBJECT_A15_layer_rendererCACE5ClockV7InstantVvp"
  },
  "title" : "optimalInputTime"
}
-->

# optimalInputTime

The optimal time to start the frame submission process.

```
var optimalInputTime: LayerRenderer.Clock.Instant { get }
```

## Discussion

The optimal input time is the time at which to call the [`startSubmission()`](/documentation/CompositorServices/LayerRenderer/Frame/startSubmission()) function and begin encoding your Metal command buffers. Use the time before the input time to update your app’s data structures and prepare for rendering. Call [`wait(until:tolerance:)`](/documentation/CompositorServices/LayerRenderer/Clock/wait(until:tolerance:)) to suspend your app until the optimal time arrives. When it does, fetch the current device pose and finish rendering and the frame and commit your Metal command buffers.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)