Skip to content

Commit

Permalink
chore(insights): Update docs for new Mobile Vitals insights module (#…
Browse files Browse the repository at this point in the history
…12366)

* chore(insights): Update docs for upcoming mobile screens GA

* Update links and redirects

* Add screenshot for mobile-screens, add frames delay section

* Update docs/product/insights/mobile/mobile-screens/screen-loads.mdx

Co-authored-by: Karl Heinz Struggl <[email protected]>

* Apply suggestions from code review

Co-authored-by: Alex Krawiec <[email protected]>

* Update index.mdx

* Rename Mobile Screens to Mobile Vitals

* Fix CI errors

* Refine docs based on feedback

* Address PR feedback

---------

Co-authored-by: Karl Heinz Struggl <[email protected]>
Co-authored-by: Alex Krawiec <[email protected]>
  • Loading branch information
3 people authored Mar 4, 2025
1 parent 95ed5f4 commit c371429
Show file tree
Hide file tree
Showing 33 changed files with 126 additions and 107 deletions.
8 changes: 4 additions & 4 deletions docs/concepts/search/searchable-properties/events.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -342,13 +342,13 @@ Returns results with a matching maximum value for the field entered.

### `measurements.app_start_cold`

A [cold start](/product/insights/mobile-vitals/#app-start) refers to when the app launches for the first time after a reboot or update. The app is not in memory and no process exists.
A [cold start](/product/insights/mobile/mobile-vitals/app-starts/) refers to when the app launches for the first time after a reboot or update. The app is not in memory and no process exists.

- **Type:** duration

### `measurements.app_start_warm`

A [warm start](/product/insights/mobile-vitals/#app-start) refers to when the app has already launched at least once and is partially in memory. For instance, the user backs out of your app, but then re-launches it. The process may have continued to run, but the app must recreate the activity from scratch.
A [warm start](/product/insights/mobile/mobile-vitals/app-starts/) refers to when the app has already launched at least once and is partially in memory. For instance, the user backs out of your app, but then re-launches it. The process may have continued to run, but the app must recreate the activity from scratch.

- **Type:** duration

Expand Down Expand Up @@ -378,7 +378,7 @@ A [warm start](/product/insights/mobile-vitals/#app-start) refers to when the ap

### `measurements.frames_frozen`

[Slow and frozen frames](/product/insights/mobile-vitals/#slow-and-frozen-frames) measure the responsiveness of your app.
[Slow and frozen frames](/product/insights/mobile/mobile-vitals/#slow-and-frozen-frames) measure the responsiveness of your app.

- **Type:** number

Expand All @@ -390,7 +390,7 @@ Returns results with a matching rate of frozen frames. That is, `measurements.fr

### `measurements.frames_slow`

[Slow and frozen frames](/product/insights/mobile-vitals/#slow-and-frozen-frames) measure the responsiveness of your app.
[Slow and frozen frames](/product/insights/mobile/mobile-vitals/#slow-and-frozen-frames) measure the responsiveness of your app.

- **Type:** number

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ You can opt out of Activity Instrumentation and App Start Instrumentation using
</application>
```

Cold and warm start are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Cold and warm start are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).

### Slow and Frozen Frames

Expand All @@ -159,7 +159,7 @@ Supported on Android OS version `7.0` and above.

Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are _slow frames_ and _frozen frames_. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the [Activity](/platforms/android/tracing/instrumentation/automatic-instrumentation/#activity-instrumentation) transactions.

Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).

### Trace Propagation Targets

Expand Down
2 changes: 1 addition & 1 deletion docs/platforms/android/tracing/instrumentation/perf-v2.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Supported in Sentry's Android SDK version `7.4.0` and above.

</Alert>

Performance V2 is a set of features which enrich your existing instrumentation, giving you more insights into potential performance bottlenecks. These features tightly integrate with [Mobile Vitals](/product/insights/mobile-vitals/).
Performance V2 is a set of features which enrich your existing instrumentation, giving you more insights into potential performance bottlenecks. These features tightly integrate with the [Mobile Vitals](/product/insights/mobile/mobile-vitals/) insights module.

### Enabling Performance V2

Expand Down
2 changes: 1 addition & 1 deletion docs/platforms/apple/common/features/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ The SDK builds a crash report that persists to disk. While it attempts to send t
- Rendering of UIViewControllers
- Performance of HTTP requests
- Distributed tracing
- <Link to="/product/insights/mobile-vitals">Mobile Vitals</Link>
- <Link to="/product/insights/mobile/mobile-vitals">Insights for Mobile Vitals</Link>
- Cold and warm start
- Slow and frozen frames
- <PlatformLink to="/tracing/instrumentation/automatic-instrumentation/#prewarmed-app-start-tracing">Prewarmed App Start Tracing</PlatformLink>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Before [sentry-cocoa 8.18.0](https://github.com/getsentry/sentry-cocoa/releases/
- **UIKit and Application Init**: from pre main initializers to [`didFinishLaunchingNotification`][didfinishlaunching].
- **Initial Frame Render**: from the [`didFinishLaunchingNotification`][didfinishlaunching] to [`UIWindowDidBecomeVisibleNotification`][uiwindow].
Cold and warm start are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Cold and warm start are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).
### Prewarmed App Start Tracing
Expand Down Expand Up @@ -170,7 +170,7 @@ The detail view of the transaction displays the slow, frozen, and total frames:
![Slow and Frozen Frames](./img/slow-frozen-frames.png)
Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).
## Network Tracking
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Learn more in our [App Start Instrumentation](/platforms/flutter/integrations/ap

Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are slow frames and frozen frames. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the transactions you capture.

Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).

Learn more how to set it up in our [Slow and Frozen Frames Instrumentation](/platforms/flutter/integrations/slow-and-frozen-frames-instrumentation/) docs.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ If you don't [wrap your root component with Sentry](#wrap-your-root-component),

The SDK differentiates between a cold and a warm start, but doesn't track hot starts or resumes. The measurements are available under `measurements.app_start_warm` and `measurements.app_start_cold`.

Cold and warm start are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Cold and warm start are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).

### Slow and Frozen Frames

Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are slow frames and frozen frames. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the transactions you capture.

Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile-vitals).
Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/insights/mobile/mobile-vitals).

<Alert>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ sdk: sentry.javascript.react-native
description: "Learn how to measure time to display with the Sentry React Native SDK."
---

Sentry's React Native SDK package ships with a tracing feature that allows you to measure your application's [Time to Display](/product/insights/mobile-vitals/#time-to-initial-display-and-time-to-full-display). This guide will show you how to use Sentry's React Native SDK to measure Time to Display in your application.
Sentry's React Native SDK package ships with a tracing feature that allows you to measure your application's [Time to Display](/product/insights/mobile/mobile-vitals/#time-to-initial-display-and-time-to-full-display). This guide will show you how to use Sentry's React Native SDK to measure Time to Display in your application.

Time to Display consists of two parts, Time To Initial Display (TTID) and Time To Full Display (TTFD). TTID measures the time it takes to display the first frame, while TTFD measures the time it takes to display the full content for the user to interact with.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ The amount of heap memory used by the application is recorded every 100 ms using

## GPU Information

In addition to counting the number of [slow and frozen UI frame renders](/product/insights/mobile-vitals/#slow-and-frozen-frames) for Mobile Vitals, Sentry now records the timestamp for every frame and overlays it on top of profiling flame charts:
In addition to counting the number of [slow and frozen UI frame renders](/product/insights/mobile/mobile-vitals/#slow-and-frozen-frames) for Mobile Vitals Insights, Sentry now records the timestamp for every frame and overlays it on top of profiling flame charts:

![Sentry displays slow and frozen frames above the flamechart of a particular profile.](./img/flamechart-with-gpu-overlay.png)

Expand Down
Binary file modified docs/product/insights/img/mobile-performance-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file removed docs/product/insights/mobile/img/app-starts.png
Binary file not shown.
Binary file not shown.
Binary file removed docs/product/insights/mobile/img/screen-loads.png
Binary file not shown.
64 changes: 2 additions & 62 deletions docs/product/insights/mobile/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,66 +10,6 @@ The [**Mobile Performance**](https://sentry.io/orgredirect/organizations/:orgslu

![Mobile performance overview page.](../img/mobile-performance-overview.png)

## App Start
## Learn More

App start metrics track how long your mobile application takes to launch. For this, Sentry measures _cold starts_ and _warm starts_.

The definitions of cold start and warm start change slightly depending on the operating system. On iOS, Apple recommends your app take at most 400ms to render the first frame. On Android, the [Google Play console](https://developer.android.com/topic/performance/vitals/launch-time#av) warns you when a cold start takes longer than five seconds or a warm start longer than two seconds. For definitions by operating system, check out the corresponding SDK docs:

- [Android](/platforms/android/tracing/instrumentation/automatic-instrumentation/#app-start-instrumentation)
- [Flutter](/platforms/flutter/tracing/instrumentation/automatic-instrumentation/#app-start-instrumentation)
- [iOS](/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation/#app-start-tracking)
- [React Native](/platforms/react-native/tracing/instrumentation/automatic-instrumentation/#app-start-instrumentation)

In the example below, the detail view of a transaction displays the warm start measurement in the right sidebar.

![The event detail of a transaction with a warm start measurement.](./img/app-start-transaction.png)

While the SDKs differentiate between a cold and a warm start, they don't track hot starts or resumes. To get more insight into your cold and warm start metrics, you can use the [App Starts](/product/insights/mobile-vitals/app-starts/) feature.

## Slow and Frozen Frames

To track the responsiveness of the user interface, Sentry measures _slow frames_ and _frozen frames_. Typically, a phone or tablet renders 60 frames per second (fps). At 60 fps, every frame has 16 or 16.67 ms to render.

- **Slow Frames**: Using 60 fps, slow frames are frames that take more than 16 ms (Android) or 16.67 ms (iOS) to render.
- **Frozen Frames**: Frozen frames are frames that take longer than 700 ms to render.

For Apple, the frame rate can be higher, especially as 120 fps displays are becoming more popular. For these apps, Sentry detects the frame rate and adjusts the slow frame calculation accordingly.

In the example below, the detail view of the transaction displays the slow, frozen, and total frames in an iOS application:

![The event detail of a transaction with slow and frozen frames measurements.](./img/slow-frozen-frames.png)

You can track slow and frozen frames for:

- [Android](/platforms/android/tracing/instrumentation/automatic-instrumentation/#slow-and-frozen-frames)
- [Flutter](/platforms/flutter/tracing/instrumentation/automatic-instrumentation/#slow-and-frozen-frames)
- [iOS](/platforms/apple/guides/ios/tracing/instrumentation/automatic-instrumentation/#slow-and-frozen-frames)
- [React Native](/platforms/react-native/tracing/instrumentation/automatic-instrumentation/#slow-and-frozen-frames)

## Time to Initial Display and Time to Full Display

To track how long it takes your application to produce its first frame and then how long it takes to produce its first frame with all the content, Sentry measures time to initial display and time to full display, respectively.

- **Time to initial display**: tracks how long it takes for your mobile application to produce its first frame. This includes app start time on the first screen loaded. It doesn’t include any content loaded lazily after the first frame is drawn. Time to initial display is automatic and enabled by default.
- **Time to full display**: tracks how long it takes for your mobile application to produce its first frame with full content. This includes content loaded asynchronously after the first frame, for example, after loading content from the network. Time to full display is opt-in and requires you to manually call the API to report that the screen has loaded all of its content and is fully displayed.

In the example below, the detail view of the transaction displays the time-to-initial-display span in an Android application:

![The event detail of a transaction with time to initial display and time to full display spans.](./img/time-to-initial-full-display.png)

You can track time to initial display for:

- [Android](/platforms/android/tracing/instrumentation/automatic-instrumentation/#time-to-initial-display)
- [Apple](/platforms/apple/tracing/instrumentation/automatic-instrumentation/#time-to-initial-display)
- [Flutter](/platforms/flutter/integrations/routing-instrumentation/#time-to-initial-display)
- [React Native](/platforms/react-native/performance/instrumentation/time-to-display/#automatic-time-to-initial-display-for-react-navigation)

You can track time to full display for:

- [Android](/platforms/android/tracing/instrumentation/automatic-instrumentation/#time-to-full-display)
- [Apple](/platforms/apple/tracing/instrumentation/automatic-instrumentation/#time-to-full-display)
- [Flutter](/platforms/flutter/integrations/routing-instrumentation/#time-to-full-display)
- [React Native](/platforms/react-native/performance/instrumentation/time-to-display/#time-to-full-display)

To get more insight into the performance of your time to initial display and time to full display metrics, use the [Screen Loads](/product/insights/mobile-vitals/screen-loads/) feature.
<PageGrid />
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ The **App Starts** page shows an overview of the amount of time it takes for you
**For Android:**

- `>=7.4.0` for automatic instrumentation of app start spans and app start profiling
- [Performance-V2](/platforms/android/performance/instrumentation/perf-v2) feature flag and [App Start Profiling](/platforms/android/profiling/#app-start-profiling) must also be enabled in the SDK, e.g.:
- [Performance-V2](/platforms/android/performance/instrumentation/perf-v2) feature flag (`<8.0.0`) and [App Start Profiling](/platforms/android/profiling/#app-start-profiling) must also be enabled in the SDK, e.g.:

```java {filename:MyApplication.java}
import io.sentry.android.core.SentryAndroid;
Expand Down Expand Up @@ -59,23 +59,15 @@ The charts display the following metrics (using cold starts as an example):

- Average Cold Start
- The overall time it takes your application to start, compared by release.
- Top Screen Cold Start
- The time it takes for individual screens to start, compared by release. This chart syncs with the sort order in the table below it.
- Count
- The number of starts occurring in the selected time range for the releases. This gives you an idea of how statistically significant the aggregated data is.
- Cold Start Device Distribution
- The average cold start time grouped by [device class](/concepts/search/searchable-properties/#device-classification) (high, medium, low, or unknown).

**Reasons Why You Might Not Be Seeing Any Data:**

- You don’t have any transactions with op `ui.load`
- Your SDKs don’t meet the minimum SDK requirements

## Screen Summary Page

![Example of Screen Summary](./img/app-starts-screen-summary.png)

To get additional information about any of your application’s screens, click on them to get to the **Screen Summary** page. Here, you’ll see your average start duration broken down by release and [device class](/concepts/search/searchable-properties/#device-classification) (high, medium, low, or unknown). This will help you understand how users with different device performance levels are being affected.

The table below the chart shows spans that have changed from one release to the next and allows you to filter for specific span operations and device classes. Being able to narrow down to specific event samples helps debug slow starts.
The table at the bottom shows spans that have changed from one release to the next and allows you to filter for specific span operations and device classes. Being able to narrow down to specific event samples helps debug slow starts.

Clicking the "By Event" toggle in the top right corner of this table will show you events split by release and you'll be able to see overall changes in start times between the two releases you've selected.

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit c371429

Please sign in to comment.