getsentry / getsentry/sentry-react-native

Add standalone long task detection integration

Offen
#6,185 1 Kommentar 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Feature React-Native
Vorherrschende Sprache
TypeScript
Sterne
1.8k
Forks
366
Ø Merge
1 T. 5 Std.
Gemergte PRs (30 T.)
93

Beschreibung

## Summary

React Native exposes a [`PerformanceObserver` API](https://reactnative.dev/docs/global-PerformanceObserver) 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?

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, die bestehende stallTrackingIntegration zu lesen und die minimale React Native-Version zu überprüfen, die PerformanceObserver longtask-Einträge unterstützt. Kläre, ob die Integration das Stall-Tracking ergänzt oder ersetzt und ob sie ausschließlich Metriken ausgibt; definiere anschließend Tests für die immer aktive Berichterstattung, konfigurierbares Sampling und konfigurierbare Schwellenwerte, Dauerangaben und vom Benutzer festgelegte Filterattribute.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
react-native, typescript
Bereich
mobile-dev, observability
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.