Open serzmerz opened 5 months ago
Hi @serzmerz, thank you for the detailed information and the code snipped,
we will investigate it.
Currently you can work around this by using the manual TTID instrumentation in the tabs.
<Sentry.TimeToInitialDisplay record={true} />
Hello @krystofwoldrich, manual TTID instrumentation also doesn't work
this happening because event will not be emitted from native side for android for tabs here https://github.com/getsentry/sentry-react-native/blob/main/src/js/tracing/reactnavigation.ts#L236 and transaction will be cancelled by timeout
@serzmerz Thank you for the details. If I understand this correctly the native events (https://github.com/getsentry/sentry-react-native/blob/main/src/js/tracing/reactnavigation.ts?rgh-link-date=2024-05-10T12%3A31%3A17Z#L236) are also not emitting for the manual instrumentation?
yes, for some reason is not emitted with manual instrumentation as well
Could you confirm does it happen both in emulator and on device?
Good catch, I checked on real device and manual instrumentation works, thanks.
DEBUG Sentry Logger [debug]: [TimeToDisplay] onDrawNextFrame: {"newFrameTimestampInSeconds":1715846467.9390001,"type":"initialDisplay" DEBUG Sentry Logger [debug]: [TimeToDisplay] Found existing ui.load.initial_display span. DEBUG Sentry Logger [debug]: [TimeToDisplay] MessagesTab initial display span updated with end timestamp.
Also, I'm checking TimeToFullDisplay
and it doesn't work on Tab on real device, only TimeToInitialDisplay
works.
To make it work I need to have first: <Sentry.TimeToInitialDisplay record={true} />
And : <Sentry.TimeToFullDisplay record={true} />
With that I managed to record both: initial and full display on the tab
Thank you for the confirmation.
OS:
Platform:
SDK:
@sentry/react-native
(>= 1.0.0)react-native-sentry
(<= 0.43.2)SDK version: 5.22.2
react-native
version: 0.73.6Are you using Expo?
Are you using sentry.io or on-premise?
If you are using sentry.io, please post a link to your issue so we can take a look:
[Link to issue]
Configuration:
(
@sentry/react-native
)I have the following issue:
On Android, when
enableTimeToInitialDisplay
flag is active, sentry doesn't capture initial time on screens from Tab navigator (react-navigation). It is happening in@sentry/react-native/android/src/main/java/io/sentry/react/RNSentryReactFragmentLifecycleTracer.java
because:com.swmansion.rnscreens.ScreenFragment
, notcom.swmansion.rnscreens.ScreenStackFragment
and it doesnt subscribe toeventDispatcher
.com.swmansion.rnscreens.events.ScreenAppearEvent
event, since this event(transitionEnd) only available for Stack screens.My navigation setup is next: Root stack navigator and one of the screens is TabNavigator
Steps to reproduce:
Actual result:
On android you will get
deadline_exceeded
forui.load.initial_display
span. (Note: first default screen will be reported correctly, since router fireScreenAppearEvent
for this stack screen). It works as expected on ios with both tab and stack screens.Expected result:
ui.load.initial_display
span captured correctly for tab screens for AndroidNext steps:
Have you considered any other options how to trigger navigation end for tab screens? Maybe you know any workarounds? I can help investigate or provide demo if it will be helpful. Tabs usually is the most heaviest screens, so we would like to track performance of them, especially for android(which is more slower platform for our app)