Skip to content

Commit 50d030e

Browse files
authored
Merge 91197a6 into 1d75738
2 parents 1d75738 + 91197a6 commit 50d030e

File tree

5 files changed

+48
-17
lines changed

5 files changed

+48
-17
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
- Expo Updates Context is passed to native after native init to be available for crashes ([#4808](https://github.com/getsentry/sentry-react-native/pull/4808))
1414

15+
### Changes
16+
17+
- Renames `enableExperimentalViewRenderer` to `enableViewRendererV2` which is enabled by default for up to 5x times more performance in Session Replay on iOS ([#4815](https://github.com/getsentry/sentry-react-native/pull/4815))
18+
1519
### Dependencies
1620

1721
- Bump CLI from v2.43.1 to v2.44.0 ([#4804](https://github.com/getsentry/sentry-react-native/pull/4804))

packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ final class RNSentryReplayOptions: XCTestCase {
5555
XCTAssertNotNil(replayOptions["maskAllText"])
5656
XCTAssertNotNil(replayOptions["maskedViewClasses"])
5757
XCTAssertNotNil(replayOptions["sdkInfo"])
58-
XCTAssertNotNil(replayOptions["enableExperimentalViewRenderer"])
58+
XCTAssertNotNil(replayOptions["enableViewRendererV2"])
5959
XCTAssertNotNil(replayOptions["enableFastViewRendering"])
6060
}
6161

@@ -166,8 +166,8 @@ final class RNSentryReplayOptions: XCTestCase {
166166
XCTAssertEqual(actualOptions.sessionReplay.maskAllText, false)
167167
XCTAssertEqual(actualOptions.sessionReplay.maskedViewClasses.count, 0)
168168
}
169-
170-
func testEnableExperimentalViewRendererDefault() {
169+
170+
func testEnableViewRendererV2Default() {
171171
let optionsDict = ([
172172
"dsn": "https://[email protected]/1234567",
173173
"replaysOnErrorSampleRate": 0.75
@@ -177,35 +177,35 @@ final class RNSentryReplayOptions: XCTestCase {
177177

178178
let actualOptions = try! Options(dict: optionsDict as! [String: Any])
179179

180-
XCTAssertFalse(actualOptions.sessionReplay.enableExperimentalViewRenderer)
180+
XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2)
181181
}
182-
183-
func testEnableExperimentalViewRendererTrue() {
182+
183+
func testEnableViewRendererV2True() {
184184
let optionsDict = ([
185185
"dsn": "https://[email protected]/1234567",
186186
"replaysOnErrorSampleRate": 0.75,
187-
"mobileReplayOptions": [ "enableExperimentalViewRenderer": true ]
187+
"mobileReplayOptions": [ "enableViewRendererV2": true ]
188188
] as NSDictionary).mutableCopy() as! NSMutableDictionary
189189

190190
RNSentryReplay.updateOptions(optionsDict)
191191

192192
let actualOptions = try! Options(dict: optionsDict as! [String: Any])
193193

194-
XCTAssertTrue(actualOptions.sessionReplay.enableExperimentalViewRenderer)
194+
XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2)
195195
}
196-
197-
func testEnableExperimentalViewRendererFalse() {
196+
197+
func testEnableViewRendererV2False() {
198198
let optionsDict = ([
199199
"dsn": "https://[email protected]/1234567",
200200
"replaysOnErrorSampleRate": 0.75,
201-
"mobileReplayOptions": [ "enableExperimentalViewRenderer": false ]
201+
"mobileReplayOptions": [ "enableViewRendererV2": false ]
202202
] as NSDictionary).mutableCopy() as! NSMutableDictionary
203203

204204
RNSentryReplay.updateOptions(optionsDict)
205205

206206
let actualOptions = try! Options(dict: optionsDict as! [String: Any])
207207

208-
XCTAssertFalse(actualOptions.sessionReplay.enableExperimentalViewRenderer)
208+
XCTAssertFalse(actualOptions.sessionReplay.enableViewRendererV2)
209209
}
210210

211211
func testEnableFastViewRenderingDefault() {

packages/core/ios/RNSentryReplay.mm

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ + (void)updateOptions:(NSMutableDictionary *)options
2727
@"errorSampleRate" : options[@"replaysOnErrorSampleRate"] ?: [NSNull null],
2828
@"maskAllImages" : replayOptions[@"maskAllImages"] ?: [NSNull null],
2929
@"maskAllText" : replayOptions[@"maskAllText"] ?: [NSNull null],
30-
@"enableExperimentalViewRenderer" : replayOptions[@"enableExperimentalViewRenderer"]
31-
?: [NSNull null],
30+
@"enableViewRendererV2" : replayOptions[@"enableViewRendererV2"] ?: @YES,
3231
@"enableFastViewRendering" : replayOptions[@"enableFastViewRendering"] ?: [NSNull null],
3332
@"maskedViewClasses" : [RNSentryReplay getReplayRNRedactClasses:replayOptions],
3433
@"sdkInfo" :

packages/core/src/js/replay/mobilereplay.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,24 @@ export interface MobileReplayOptions {
4040
*
4141
* - Experiment: This is an experimental feature and is therefore disabled by default.
4242
*
43-
* @default false
43+
* @deprecated Use `enableViewRendererV2` instead.
4444
*/
4545
enableExperimentalViewRenderer?: boolean;
4646

47+
/**
48+
* Enables up to 5x faster new view renderer used by the Session Replay integration on iOS.
49+
*
50+
* Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing
51+
* interruptions and visual lag. [Our benchmarks](https://github.com/getsentry/sentry-cocoa/pull/4940) have shown a significant improvement of
52+
* **up to 4-5x faster rendering** (reducing `~160ms` to `~36ms` per frame) on older devices.
53+
*
54+
* - Experiment: In case you are noticing issues with the new view renderer, please report the issue on [GitHub](https://github.com/getsentry/sentry-cocoa).
55+
* Eventually, we will remove this feature flag and use the new view renderer by default.
56+
*
57+
* @default true
58+
*/
59+
enableViewRendererV2?: boolean;
60+
4761
/**
4862
* Enables up to 5x faster but incomplete view rendering used by the Session Replay integration on iOS.
4963
*
@@ -63,9 +77,23 @@ const defaultOptions: Required<MobileReplayOptions> = {
6377
maskAllImages: true,
6478
maskAllVectors: true,
6579
enableExperimentalViewRenderer: false,
80+
enableViewRendererV2: true,
6681
enableFastViewRendering: false,
6782
};
6883

84+
function mergeOptions(initOptions: Partial<MobileReplayOptions>): Required<MobileReplayOptions> {
85+
const merged = {
86+
...defaultOptions,
87+
...initOptions,
88+
};
89+
90+
if (initOptions.enableViewRendererV2 === undefined && initOptions.enableExperimentalViewRenderer !== undefined) {
91+
merged.enableViewRendererV2 = initOptions.enableExperimentalViewRenderer;
92+
}
93+
94+
return merged;
95+
}
96+
6997
type MobileReplayIntegration = Integration & {
7098
options: Required<MobileReplayOptions>;
7199
};
@@ -100,7 +128,7 @@ export const mobileReplayIntegration = (initOptions: MobileReplayOptions = defau
100128
return mobileReplayIntegrationNoop();
101129
}
102130

103-
const options = { ...defaultOptions, ...initOptions };
131+
const options = mergeOptions(initOptions);
104132

105133
async function processEvent(event: Event): Promise<Event> {
106134
const hasException = event.exception && event.exception.values && event.exception.values.length > 0;

samples/react-native/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Sentry.init({
100100
maskAllImages: true,
101101
maskAllVectors: true,
102102
maskAllText: true,
103-
enableExperimentalViewRenderer: true,
103+
enableViewRendererV2: true,
104104
enableFastViewRendering: true,
105105
}),
106106
Sentry.appStartIntegration({

0 commit comments

Comments
 (0)