@@ -11,6 +11,11 @@ class WaitingTimeTracker {
1111 private let analyticsService : Analytics
1212 private let waitingStartedTimestamp : TimeInterval
1313
14+ enum TrackingUnit {
15+ case seconds
16+ case milliseconds
17+ }
18+
1419 init ( trackScenario: WooAnalyticsEvent . WaitingTime . Scenario ,
1520 analyticsService: Analytics = ServiceLocator . analytics,
1621 currentTimestampSeconds: @escaping ( ) -> TimeInterval = { Date ( ) . timeIntervalSince1970 }
@@ -21,21 +26,27 @@ class WaitingTimeTracker {
2126 waitingStartedTimestamp = currentTimestampSeconds ( )
2227 }
2328
24- /// End the waiting time by evaluating the elapsed time from the init,
25- /// and sending it as an analytics event, in seconds.
29+ /// Default `end()` method to preserve interface compatibility. By default, tracks in `.seconds`
2630 ///
2731 func end( ) {
28- let elapsedTime = currentTimestampSeconds ( ) - waitingStartedTimestamp
29- let analyticsEvent = WooAnalyticsEvent . WaitingTime. waitingFinished ( scenario: trackScenario, elapsedTime: elapsedTime)
30- analyticsService. track ( event: analyticsEvent)
32+ end ( using: . seconds)
3133 }
3234
3335 /// End the waiting time by evaluating the elapsed time from the init,
34- /// and sending it as an analytics event, in milliseconds
36+ /// and sending it as an analytics event.
3537 ///
36- func endInMilliseconds( ) {
37- let elapsedTimeMs = ( currentTimestampSeconds ( ) - waitingStartedTimestamp) * 1000
38- let analyticsEvent = WooAnalyticsEvent . WaitingTime. waitingFinished ( scenario: trackScenario, elapsedTime: elapsedTimeMs)
38+ /// - Parameter trackingUnit: Defines whether the elapsed time should be tracked in `.seconds` or `.milliseconds` (default is `.seconds`).
39+ ///
40+ func end( using trackingUnit: TrackingUnit = . seconds) {
41+ let elapsedTime = calculateElapsedTime ( in: trackingUnit)
42+ let analyticsEvent = WooAnalyticsEvent . WaitingTime. waitingFinished ( scenario: trackScenario, elapsedTime: elapsedTime)
3943 analyticsService. track ( event: analyticsEvent)
4044 }
45+
46+ /// Calculates elapsed time in the specified tracking unit.
47+ ///
48+ private func calculateElapsedTime( in trackingUnit: TrackingUnit ) -> TimeInterval {
49+ let elapsedTime = currentTimestampSeconds ( ) - waitingStartedTimestamp
50+ return trackingUnit == . milliseconds ? elapsedTime * 1000 : elapsedTime
51+ }
4152}
0 commit comments