Mobile Vitals
Monitor mobile app performance and responsiveness using automatically collected runtime metrics.
Understand Mobile Vitals metrics
Mobile Vitals measure the health and responsiveness of your mobile applications by tracking CPU, memory, rendering speed, and app start-up times.
The Coralogix mobile SDK automatically collects these metrics without additional instrumentation or setup.
The SDK samples the operating system every second and sends aggregated data approximately every 15 seconds, reporting the minimum, maximum, average, and 95th percentile for each vital.
Mobile Vitals are emitted as structured RUM events containing a cx_rum.mobile_vitals_context object.
You can query these events in Explore or DataPrime and build Custom Dashboards to visualize mobile performance across releases, devices, and platforms.
For query examples and field references, see Query RUM Logs – Mobile Vitals.
Metrics collected
The SDK automatically monitors the following vital categories:
| Metric | Description | Measured unit |
|---|---|---|
| ANR | Application Not Responding — triggered when the main thread is blocked for ~5 seconds or longer. Collected as part of Mobile Vitals on iOS only | Event count |
| Cold Start | Time from app launch (terminated state) to first screen render | ms |
| Warm Start | Time from returning to the foreground to ready state | ms |
| CPU | CPU utilization, total process time, and main-thread time deltas | %, ms |
| Memory | Physical footprint, resident memory size, and utilization percentage | MB, % |
| Frame rate (FPS) | Average frames per second measured via display link sampling | fps |
| Slow / Frozen Frames | Slow frames exceed refresh threshold (~16 ms for 60 Hz) Frozen frames exceed 700 ms | Frame count |
How it works
- Sampling: Sampling occurs roughly every 1 s.
- Aggregation: Every 15 s, the SDK calculates the
min,max,avg, andp95values and sends them to Coralogix. - Event structure: Each event contains:
cx_rum.mobile_vitals_context.name— the metric name (cpu_usage,fps,footprint_memory, etc.)cx_rum.mobile_vitals_context.value— the measured valuecx_rum.mobile_vitals_context.units— unit of measure (percentage,fps,mb,ms)- Device, app version, and user session metadata
All Mobile Vitals events can be queried by checking for the existence of the cx_rum.mobile_vitals_context field.
Example query:
Visualize Mobile Vitals
Create Custom Dashboard widgets to visualize mobile vitals metrics and trends.
Each metric can be charted by value, aggregated over time, and grouped by release, OS, or device.
The Mobile Vitals count by type widget displays the number of Mobile Vitals events emitted over time, grouped by metric type.
Use this visualization to confirm that the SDK reports metrics as expected and to compare event volume across different vitals.
Example DataPrime query:
source logs
| filter $d.cx_rum.event_context.type == 'mobile-vitals'
| filter $d.cx_rum.event_context.type != null
| filter $d.cx_rum.mobile_vitals_context.type != null
| groupby $m.timestamp / 153s as $d['timestamp'], $d.cx_rum.event_context.type as $d['cx_rum.event_context.type'], $d.cx_rum.mobile_vitals_context.type as $d['cx_rum.mobile_vitals_context.type'] agg count() as $d['count']
Build a Mobile Vitals widget
Use the Query Builder to create a simple overview of all Mobile Vitals metrics in one chart.
In the Filters panel, set a filter for RUM events
cx_rum.event_context.typeequal tomobile-vitals.In the Functions panel, group by:
cx_rum.event_context.typecx_rum.mobile_vitals_context.name
- Set the aggregation to
Averageand selectcx_rum.mobile_vitals_context.value
Example dashboard panels
| Use case | Lucene filter | Suggested aggregation |
|---|---|---|
| CPU usage (p95) | cx_rum.mobile_vitals_context.name:"cpu_usage" | p95 over 1–5 min intervals |
| Memory footprint (avg) | cx_rum.mobile_vitals_context.name:"footprint_memory" | avg / p95 grouped by app_version |
| Frame rate (FPS) | cx_rum.mobile_vitals_context.type:"fps" | avg by device_context.osVersion |
| Slow / Frozen frames | cx_rum.mobile_vitals_context.slow_frozen: * | sum per interval |
For step-by-step dashboard creation, see Create and Manage Custom Dashboards.
Review platform differences
- iOS and Android: Metrics rely on MetricKit for CPU, memory, and startup data.
- Android: Metrics use Android Vitals and system-level sampling.
- React Native: Metrics are collected from the native layer; lifecycle handling differs slightly.
- Cross-platform variance: CPU and memory values may differ because each OS uses its own APIs.
Understand Mobile Vitals behavior
- Android and iOS: Individual Mobile Vital metrics (CPU, memory, FPS, start times, FPS) can be enabled or disabled in the SDK configuration. See SDK installation guides for more details:
- React Native: Mobile Vitals can be configured from
JavaScriptand forwarded to the native SDKs. See React Native Plugin - Mobile Vitals. Sampling interval: Data is collected continuously and aggregated every 15 s.
Note
Sessions shorter than 15 s may not emit Mobile Vitals events, because the SDK reports aggregated data in 15 s intervals.
Learn more
For query examples and field references, see Query RUM Logs – Mobile Vitals.
