Skip to content

Commit 52ed682

Browse files
committed
Make DurationSignalTracker run in main thread rather than private one
1 parent 41dfe21 commit 52ed682

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

Sources/TelemetryDeck/Helpers/DurationSignalTracker.swift

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import AppKit
77
#endif
88

99
@available(watchOS 7.0, *)
10-
final class DurationSignalTracker: @unchecked Sendable {
10+
@MainActor
11+
final class DurationSignalTracker {
1112
static let shared = DurationSignalTracker()
1213

1314
private struct CachedData: Sendable {
1415
let startTime: Date
1516
let parameters: [String: String]
1617
}
1718

18-
private let queue = DispatchQueue(label: "com.telemetrydeck.DurationSignalTracker")
1919
private var startedSignals: [String: CachedData] = [:]
2020
private var lastEnteredBackground: Date?
2121

@@ -24,19 +24,15 @@ final class DurationSignalTracker: @unchecked Sendable {
2424
}
2525

2626
func startTracking(_ signalName: String, parameters: [String: String]) {
27-
self.queue.sync {
28-
self.startedSignals[signalName] = CachedData(startTime: Date(), parameters: parameters)
29-
}
27+
self.startedSignals[signalName] = CachedData(startTime: Date(), parameters: parameters)
3028
}
3129

3230
func stopTracking(_ signalName: String) -> (duration: TimeInterval, parameters: [String: String])? {
33-
self.queue.sync {
34-
guard let trackingData = self.startedSignals[signalName] else { return nil }
35-
self.startedSignals[signalName] = nil
31+
guard let trackingData = self.startedSignals[signalName] else { return nil }
32+
self.startedSignals[signalName] = nil
3633

37-
let duration = Date().timeIntervalSince(trackingData.startTime)
38-
return (duration, trackingData.parameters)
39-
}
34+
let duration = Date().timeIntervalSince(trackingData.startTime)
35+
return (duration, trackingData.parameters)
4036
}
4137

4238
private func setupAppLifecycleObservers() {
@@ -87,25 +83,21 @@ final class DurationSignalTracker: @unchecked Sendable {
8783

8884
@objc
8985
private func handleDidEnterBackgroundNotification() {
90-
self.queue.sync {
91-
self.lastEnteredBackground = Date()
92-
}
86+
self.lastEnteredBackground = Date()
9387
}
9488

9589
@objc
9690
private func handleWillEnterForegroundNotification() {
97-
self.queue.sync {
98-
guard let lastEnteredBackground else { return }
99-
let backgroundDuration = Date().timeIntervalSince(lastEnteredBackground)
91+
guard let lastEnteredBackground else { return }
92+
let backgroundDuration = Date().timeIntervalSince(lastEnteredBackground)
10093

101-
for (signalName, data) in self.startedSignals {
102-
self.startedSignals[signalName] = CachedData(
103-
startTime: data.startTime.addingTimeInterval(backgroundDuration),
104-
parameters: data.parameters
105-
)
106-
}
107-
108-
self.lastEnteredBackground = nil
94+
for (signalName, data) in self.startedSignals {
95+
self.startedSignals[signalName] = CachedData(
96+
startTime: data.startTime.addingTimeInterval(backgroundDuration),
97+
parameters: data.parameters
98+
)
10999
}
100+
101+
self.lastEnteredBackground = nil
110102
}
111103
}

0 commit comments

Comments
 (0)