Skip to content

Commit 3d1f534

Browse files
authored
Merge branch 'main' into antonis/bump-picomatch
2 parents da77305 + 125aa36 commit 3d1f534

11 files changed

Lines changed: 86 additions & 59 deletions

File tree

.github/workflows/e2e-v2.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ jobs:
205205
MATCH_USERNAME: ${{ secrets.MATCH_USERNAME }}
206206
- name: Collect apps metrics
207207
if: ${{ steps.platform-check.outputs.skip != 'true' }}
208-
uses: getsentry/action-app-sdk-overhead-metrics@ecce2e2718b6d97ad62220fca05627900b061ed5
208+
uses: getsentry/action-app-sdk-overhead-metrics@44fb5489ac4ac252c87d84811972dc93a1e490b8
209209
with:
210210
name: ${{ matrix.name }} (${{ matrix.rn-architecture }})
211211
config: ./performance-tests/metrics-${{ matrix.platform }}.yml

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66
> make sure you follow our [migration guide](https://docs.sentry.io/platforms/react-native/migration/) first.
77
<!-- prettier-ignore-end -->
88
9+
## Unreleased
10+
11+
### Fixes
12+
13+
- Fix iOS crash (EXC_BAD_ACCESS) in time-to-initial-display when navigating between screens ([#5887](https://github.com/getsentry/sentry-react-native/pull/5887))
14+
15+
### Dependencies
16+
17+
- Bump Android SDK from v8.36.0 to v8.37.1 ([#5884](https://github.com/getsentry/sentry-react-native/pull/5884))
18+
- [changelog](https://github.com/getsentry/sentry-java/blob/main/CHANGELOG.md#8371)
19+
- [diff](https://github.com/getsentry/sentry-java/compare/8.36.0...8.37.1)
20+
921
## 8.6.0
1022

1123
### Fixes

packages/core/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ android {
5555
dependencies {
5656
compileOnly files('libs/replay-stubs.jar')
5757
implementation 'com.facebook.react:react-native:+'
58-
api 'io.sentry:sentry-android:8.36.0'
59-
debugImplementation 'io.sentry:sentry-spotlight:8.36.0'
58+
api 'io.sentry:sentry-android:8.37.1'
59+
debugImplementation 'io.sentry:sentry-spotlight:8.37.1'
6060
}

packages/core/android/expo-handler/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ android {
1616

1717
dependencies {
1818
compileOnly project(':expo-modules-core')
19-
compileOnly 'io.sentry:sentry-android:8.36.0'
19+
compileOnly 'io.sentry:sentry-android:8.37.1'
2020
}
0 Bytes
Binary file not shown.

packages/core/android/replay-stubs/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ tasks.named('jar', Jar) {
1818
}
1919

2020
dependencies {
21-
compileOnly 'io.sentry:sentry:8.36.0'
21+
compileOnly 'io.sentry:sentry:8.37.1'
2222
}

packages/core/ios/RNSentryTimeToDisplay.m

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#import <QuartzCore/QuartzCore.h>
33
#import <React/RCTLog.h>
44

5+
// All static state below is accessed from the main thread (CADisplayLink, UI) and from the
6+
// React Native bridge / JS thread (setActiveSpanId, pop). Synchronize every access.
57
@implementation RNSentryTimeToDisplay {
68
CADisplayLink *displayLink;
79
RCTResponseSenderBlock resolveBlock;
@@ -13,6 +15,37 @@ @implementation RNSentryTimeToDisplay {
1315

1416
static NSString *activeSpanId;
1517

18+
+ (void)putTimeToDisplayForLocked:(NSString *)screenId value:(NSNumber *)value
19+
{
20+
if (!screenId) {
21+
return;
22+
}
23+
24+
// If key already exists, just update the value,
25+
// this should never happen as TTD is recorded once per navigation
26+
// We avoid updating the age to avoid the age array shift
27+
if ([screenIdToRenderDuration objectForKey:screenId]) {
28+
[screenIdToRenderDuration setObject:value forKey:screenId];
29+
return;
30+
}
31+
32+
// If we haven't reached capacity yet, just append
33+
if (screenIdAge.count < TIME_TO_DISPLAY_ENTRIES_MAX_SIZE) {
34+
[screenIdToRenderDuration setObject:value forKey:screenId];
35+
[screenIdAge addObject:screenId];
36+
} else {
37+
// Remove oldest entry, in most case will already be removed by pop
38+
NSString *oldestKey = screenIdAge[screenIdCurrentIndex];
39+
[screenIdToRenderDuration removeObjectForKey:oldestKey];
40+
41+
[screenIdToRenderDuration setObject:value forKey:screenId];
42+
screenIdAge[screenIdCurrentIndex] = screenId;
43+
44+
// Update circular index, point to the new oldest
45+
screenIdCurrentIndex = (screenIdCurrentIndex + 1) % TIME_TO_DISPLAY_ENTRIES_MAX_SIZE;
46+
}
47+
}
48+
1649
+ (void)initialize
1750
{
1851
if (self == [RNSentryTimeToDisplay class]) {
@@ -27,51 +60,34 @@ + (void)initialize
2760

2861
+ (void)setActiveSpanId:(NSString *)spanId
2962
{
30-
activeSpanId = spanId;
63+
@synchronized([RNSentryTimeToDisplay class]) {
64+
activeSpanId = spanId != nil ? [spanId copy] : nil;
65+
}
3166
}
3267

3368
+ (NSNumber *)popTimeToDisplayFor:(NSString *)screenId
3469
{
35-
NSNumber *value = screenIdToRenderDuration[screenId];
36-
[screenIdToRenderDuration removeObjectForKey:screenId];
37-
return value;
70+
@synchronized([RNSentryTimeToDisplay class]) {
71+
NSNumber *value = screenIdToRenderDuration[screenId];
72+
[screenIdToRenderDuration removeObjectForKey:screenId];
73+
return value;
74+
}
3875
}
3976

4077
+ (void)putTimeToInitialDisplayForActiveSpan:(NSNumber *)value
4178
{
42-
if (activeSpanId != nil) {
43-
NSString *prefixedSpanId = [@"ttid-navigation-" stringByAppendingString:activeSpanId];
44-
[self putTimeToDisplayFor:prefixedSpanId value:value];
79+
@synchronized([RNSentryTimeToDisplay class]) {
80+
if (activeSpanId != nil) {
81+
NSString *prefixedSpanId = [@"ttid-navigation-" stringByAppendingString:activeSpanId];
82+
[self putTimeToDisplayForLocked:prefixedSpanId value:value];
83+
}
4584
}
4685
}
4786

4887
+ (void)putTimeToDisplayFor:(NSString *)screenId value:(NSNumber *)value
4988
{
50-
if (!screenId)
51-
return;
52-
53-
// If key already exists, just update the value,
54-
// this should never happen as TTD is recorded once per navigation
55-
// We avoid updating the age to avoid the age array shift
56-
if ([screenIdToRenderDuration objectForKey:screenId]) {
57-
[screenIdToRenderDuration setObject:value forKey:screenId];
58-
return;
59-
}
60-
61-
// If we haven't reached capacity yet, just append
62-
if (screenIdAge.count < TIME_TO_DISPLAY_ENTRIES_MAX_SIZE) {
63-
[screenIdToRenderDuration setObject:value forKey:screenId];
64-
[screenIdAge addObject:screenId];
65-
} else {
66-
// Remove oldest entry, in most case will already be removed by pop
67-
NSString *oldestKey = screenIdAge[screenIdCurrentIndex];
68-
[screenIdToRenderDuration removeObjectForKey:oldestKey];
69-
70-
[screenIdToRenderDuration setObject:value forKey:screenId];
71-
screenIdAge[screenIdCurrentIndex] = screenId;
72-
73-
// Update circular index, point to the new oldest
74-
screenIdCurrentIndex = (screenIdCurrentIndex + 1) % TIME_TO_DISPLAY_ENTRIES_MAX_SIZE;
89+
@synchronized([RNSentryTimeToDisplay class]) {
90+
[self putTimeToDisplayForLocked:screenId value:value];
7591
}
7692
}
7793

packages/core/plugin/src/withSentryAndroidGradlePlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export interface SentryAndroidGradlePluginOptions {
1313
includeSourceContext?: boolean;
1414
}
1515

16-
export const sentryAndroidGradlePluginVersion = '6.2.0';
16+
export const sentryAndroidGradlePluginVersion = '6.3.0';
1717

1818
/**
1919
* Adds the Sentry Android Gradle Plugin to the project.

samples/react-native/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ buildscript {
1616
classpath("com.android.tools.build:gradle")
1717
classpath("com.facebook.react:react-native-gradle-plugin")
1818
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
19-
classpath("io.sentry:sentry-android-gradle-plugin:6.2.0")
19+
classpath("io.sentry:sentry-android-gradle-plugin:6.3.0")
2020
}
2121
}
2222

scripts/update-android.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ set-version)
2727
newContent=$(echo "$newContent" | sed -E "s/(io\.sentry:sentry-spotlight:)([0-9\.]+)/\1$2/g")
2828
echo "$newContent" >$file
2929

30+
# Update expo-handler to match
31+
expoHandlerFile='expo-handler/build.gradle'
32+
expoHandlerContent=$(cat $expoHandlerFile)
33+
expoHandlerContent=$(echo "$expoHandlerContent" | sed -E "s/(io\.sentry:sentry-android:)([0-9\.]+)/\1$2/g")
34+
echo "$expoHandlerContent" >$expoHandlerFile
35+
3036
# Update replay-stubs to match
3137
cd $ORIGINAL_DIR
3238
./update-android-stubs.sh set-version $2

0 commit comments

Comments
 (0)