Skip to content

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:
MetricDescriptionMeasured unit
ANRApplication Not Responding — triggered when the main thread is blocked for ~5 seconds or longer. Collected as part of Mobile Vitals on iOS onlyEvent count
Cold StartTime from app launch (terminated state) to first screen renderms
Warm StartTime from returning to the foreground to ready statems
CPUCPU utilization, total process time, and main-thread time deltas%, ms
MemoryPhysical footprint, resident memory size, and utilization percentageMB, %
Frame rate (FPS)Average frames per second measured via display link samplingfps
Slow / Frozen FramesSlow frames exceed refresh threshold (~16 ms for 60 Hz) Frozen frames exceed 700 msFrame count

How it works

  • Sampling: Sampling occurs roughly every 1 s.
  • Aggregation: Every 15 s, the SDK calculates the min, max, avg, and p95 values 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 value
    • cx_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:

cx_rum.mobile_vitals_context:*

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.

image.png

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.

  1. In the Filters panel, set a filter for RUM events cx_rum.event_context.type equal to mobile-vitals.

  2. In the Functions panel, group by:

    • cx_rum.event_context.type
    • cx_rum.mobile_vitals_context.name
  3. Set the aggregation to Average and select cx_rum.mobile_vitals_context.value

Example dashboard panels

Use caseLucene filterSuggested 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 framescx_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 JavaScript and 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.