sentry-java icon indicating copy to clipboard operation
sentry-java copied to clipboard

Add Fragment Transactions

Open romtsn opened this issue 1 year ago • 2 comments

Description

In the light of #1810, we're still not really there yet with the Manual Screens API and only-spans, so this might be a interim solution to support single-activity apps and create transactions bound to scope automatically for our fragment integration. This has several tricky things to figure out:

  • What is considered a screen when fragments are used?
    • If androidx.navigation is used we could use our integration to create transaction whenever a route changes
    • otherwise we could by default always create transaction and then provide a lambda/function to customize this behavior (e.g. shouldCreateTx: (Fragment) -> Boolean
  • If there's an active Activity transaction, should we keep it or should we replace it with the Fragment one?
    • I think we should keep it and make the fragment integration create a span instead
  • Should inherit most of the behavior from the ActivityLifecycleIntegration, so it would makes sense to commonize that code
    • TTID/TTFD
    • ...
  • ViewPager?

romtsn avatar Sep 25 '24 13:09 romtsn

Some more considerations:

  • For ViewPager we could determine if a fragment is visible or not based on the .getGlobalVisibleRect() API
  • If a fragment takes up most of the screen space, it's considered a "screen fragment"
  • Add an option to enable this feature
  • Keep the underlying APIs for generating screen txn generic, so we could use it for the manual screens API

markushi avatar Sep 25 '24 13:09 markushi

Just leaving a note here that we had some recent interactions with customers that requested this

kahest avatar Oct 08 '24 09:10 kahest

Let's also think about a way to split the Activity and Fragments span data in the UI, so that we can have slow/frozen frames separated between Activity and Fragment

stefanosiano avatar Jan 08 '25 15:01 stefanosiano

One thing to consider: We should have a flag that disable Fragment tracing completely (even a new trace generation if perf is disabled), because RN is using Fragments for navigation sometimes, and we may be overriding their trace: https://github.com/getsentry/sentry-java/pull/4137#discussion_r1949378349

romtsn avatar Feb 10 '25 16:02 romtsn