Performance Overhead

Learn about how enabling Session Replay impacts the performance of your application.

If you're considering enabling Session Replay, it's important to first understand the potential performance impact to your app. While accurate metrics require realistic testing where you apply typical access patterns and correlate the results with your business metrics, to provide a baseline, we measured the overhead using the open-source Pocket Casts app.

You can learn more about the various performance overhead optimizations implemented in the iOS Replay SDK in the Replay Performance Overhead docs.

The Pocket Casts app offers a diverse mix of components making it an ideal candidate for testing. Here's how the benchmarks were conducted:

  • Configuration: Full masking was enabled, and optimized release builds were used.
  • User Flow: The same flow was executed 10 times to ensure consistency.
  • Real-World Representation: This approach closely mirrors performance in real-world scenarios.

The benchmarks were run on an iPhone 14 Pro. Note that active Session Replay recording can introduce slow frames on older lower-end iOS devices (for example iPhone 8).

Below are the results of the benchmarking tests, presented as median values to reflect typical overhead.

MetricSentry SDK onlySentry + Replay SDK
FPS55 fps53 fps
Memory102 MB121 MB
CPU4%13%
App Startup Time (Cold)1264.80 ms1265 ms
Main Thread Timen/a43ms
Network Bandwidthn/a10 KB/s of recording

To minimize the performance impact of the Replay SDK, consider the following steps:

Lowering the quality of captured screenshots and videos can significantly reduce CPU, memory, and network bandwidth usage. Here's how you can do it:

Copied
SentrySDK.start(configureOptions: { options in
  // this will reduce screenshot compression to 10 and bitrate to 50kbps
  options.sessionReplay.quality = .low // defaults to .medium
})

If the Replay SDK causes performance issues on lower-end devices (for example, this is how Sentry determines the device class), you can disable it specifically for those devices:

Copied
SentrySDK.start(configureOptions: { options in
  options.dsn = "https://examplePublicKey@o0.ingest.sentry.io/0"
  options.debug = true

  options.sessionReplay.onErrorSampleRate = if isLowEnd() { 0.0 } else { 1.0 }
  options.sessionReplay.sessionSampleRate = if isLowEnd() { 0.0 } else { 0.1 }
})

Starting with v8.47.0 you can enable the up-to-5x-faster new view renderer, reducing the impact of Session Replay on the main thread and potential frame drops.

While we do recommend the new view renderer, it's currently considered an experimental feature to further evaluate its stability. After the evaluation phase we are going to enable it by default.

Copied
SentrySDK.start(configureOptions: { options in
  options.sessionReplay.enableExperimentalViewRenderer = true
})
Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").