Add standalone long task detection integration

Open
#6,185 1 comment 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
react-native, typescript

Research direction

Start by reading the existing stallTrackingIntegration and verifying the minimum React Native version that supports PerformanceObserver longtask entries. Resolve whether the integration complements or replaces stall tracking and whether it emits only metrics, then define tests for always-on reporting, configurable sampling and thresholds, durations, and user-set filtering attributes.

Written by the indexing model from the issue text.

Description

Feature React-Native

Summary

React Native exposes a PerformanceObserver API that supports longtask entry types. We should add a new integration that uses this to detect and report JS thread long tasks independently of tracing.

Motivation

Customer request. They want visibility into JS thread blocking at scale across their fleet — frequency, duration, and the ability to filter by custom attributes (userId, orgId, etc). Current stall tracking only attaches measurements to active transactions, so it misses long tasks that happen outside traced operations.

Requirements

  • Always-on reporting — must work independently of active traces/transactions, with a configurable sample rate
  • Configurable threshold — default 50ms from RN is too low for mobile; allow users to set their own (e.g. 200ms)
  • Emit as metrics — report long task occurrences and durations via Sentry.metrics so they're queryable/aggregatable in Dashboards, with user-set tags for filtering
  • Code origin (stretch)PerformanceObserver does not provide stack traces. Correlating with continuous profiling would be the path here, but depends on continuous profiling support landing first. Out of scope for v1.

Technical Notes

  • RN's PerformanceObserver.supportedEntryTypes includes longtask — need to verify minimum RN version
  • Existing stallTrackingIntegration uses a setTimeout-based watchdog for similar detection but is transaction-scoped. Consider whether to extend it or build a separate integration
  • The JS SDK's browser long task instrumentation creates spans; our use case is different (metrics, not spans) since it needs to work outside transactions

Open Questions

  • Should we also emit long tasks as standalone spans (not tied to a root transaction) or strictly as metrics?
  • Should this replace or complement the existing stall tracking integration?
Dominant language
TypeScript
Stars
1.8k
Forks
367
Avg merge
1d 6h
Merged PRs (30d)
94

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from getsentry/sentry-react-native

All issues in getsentry/sentry-react-native

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.