Skip to content

Commit 9d3c212

Browse files
committed
[RUM-16486] Diff account, context, featureFlags, and usr in RUMViewUpdateEvent
1 parent 211330b commit 9d3c212

2 files changed

Lines changed: 8 additions & 9 deletions

File tree

DatadogRUM/Sources/RUMMonitor/Scopes/RUMViewEvent+Update.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,22 @@ extension RUMViewEvent {
1717
/// - Fields equal between `self` and `event` are set to `nil` (meaning "unchanged").
1818
/// `self.dd.documentVersion` is incremented by one.
1919
///
20-
/// Fields containing `[String: Encodable]` (account, context, featureFlags, usr)
21-
/// cannot be cheaply compared and are always forwarded from `event`.
2220
func update(from event: RUMViewEvent) -> RUMViewUpdateEvent {
2321
RUMViewUpdateEvent(
2422
dd: .init(documentVersion: dd.documentVersion + 1, from: event.dd),
25-
account: event.account,
23+
account: diff(account, event.account),
2624
application: .init(event.application),
2725
buildId: diff(buildId, event.buildId),
2826
buildVersion: diff(buildVersion, event.buildVersion),
2927
ciTest: diff(ciTest, event.ciTest),
3028
connectivity: diff(connectivity, event.connectivity),
3129
container: diffMap(container, event.container, RUMViewUpdateEvent.Container.init),
32-
context: event.context,
30+
context: diff(context, event.context),
3331
date: event.date,
3432
ddtags: diff(ddtags, event.ddtags),
3533
device: diff(device, event.device),
3634
display: diffMap(display, event.display, RUMViewUpdateEvent.Display.init),
37-
featureFlags: event.featureFlags.map { .init($0) },
35+
featureFlags: diffMap(featureFlags, event.featureFlags, RUMViewUpdateEvent.FeatureFlags.init),
3836
os: diff(os, event.os),
3937
privacy: diffMap(privacy, event.privacy, RUMViewUpdateEvent.Privacy.init),
4038
service: diff(service, event.service),
@@ -43,7 +41,7 @@ extension RUMViewEvent {
4341
stream: diffMap(stream, event.stream, RUMViewUpdateEvent.Stream.init),
4442
synthetics: diff(synthetics, event.synthetics),
4543
tab: diffMap(tab, event.tab, RUMViewUpdateEvent.TAB.init),
46-
usr: event.usr,
44+
usr: diff(usr, event.usr),
4745
version: diff(version, event.version),
4846
view: .init(old: view, new: event.view)
4947
)

DatadogRUM/Tests/RUMMonitor/Scopes/RUMViewScope_Tests.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class RUMViewScope_Tests: XCTestCase {
109109
DDTAssertValidRUMUUID(update.view.id)
110110
XCTAssertEqual(update.view.url, "UIViewController")
111111
XCTAssertEqual(update.dd.documentVersion, 2)
112-
XCTAssertEqual(update.context?.contextInfo as? [String: String], ["foo": "bar"])
112+
XCTAssertNil(update.context) // context unchanged between full event and stop → diffed to nil
113113

114114
// Delta fields that changed.
115115
XCTAssertFalse(try XCTUnwrap(update.view.isActive))
@@ -264,12 +264,13 @@ class RUMViewScope_Tests: XCTestCase {
264264
"The command should be ignored."
265265
)
266266

267-
// context is always forwarded in update events — attributes must be the initial ones.
267+
// Full view events always carry context.
268268
writer.events(ofType: RUMViewEvent.self).forEach {
269269
XCTAssertEqual($0.context?.contextInfo as? [String: String], initialAttributes)
270270
}
271+
// Update events diff context — unchanged between full event and stop → nil.
271272
writer.events(ofType: RUMViewUpdateEvent.self).forEach {
272-
XCTAssertEqual($0.context?.contextInfo as? [String: String], initialAttributes)
273+
XCTAssertNil($0.context)
273274
}
274275
}
275276

0 commit comments

Comments
 (0)