@@ -7,15 +7,15 @@ import AppKit
7
7
#endif
8
8
9
9
@available ( watchOS 7 . 0 , * )
10
- final class DurationSignalTracker : @unchecked Sendable {
10
+ @MainActor
11
+ final class DurationSignalTracker {
11
12
static let shared = DurationSignalTracker ( )
12
13
13
14
private struct CachedData : Sendable {
14
15
let startTime : Date
15
16
let parameters : [ String : String ]
16
17
}
17
18
18
- private let queue = DispatchQueue ( label: " com.telemetrydeck.DurationSignalTracker " )
19
19
private var startedSignals : [ String : CachedData ] = [ : ]
20
20
private var lastEnteredBackground : Date ?
21
21
@@ -24,19 +24,15 @@ final class DurationSignalTracker: @unchecked Sendable {
24
24
}
25
25
26
26
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)
30
28
}
31
29
32
30
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
36
33
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)
40
36
}
41
37
42
38
private func setupAppLifecycleObservers( ) {
@@ -87,25 +83,21 @@ final class DurationSignalTracker: @unchecked Sendable {
87
83
88
84
@objc
89
85
private func handleDidEnterBackgroundNotification( ) {
90
- self . queue. sync {
91
- self . lastEnteredBackground = Date ( )
92
- }
86
+ self . lastEnteredBackground = Date ( )
93
87
}
94
88
95
89
@objc
96
90
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)
100
93
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
+ )
109
99
}
100
+
101
+ self . lastEnteredBackground = nil
110
102
}
111
103
}
0 commit comments