Skip to content

Commit eedbe44

Browse files
Merge pull request #589 from mixpanel/jared-multi-pr-pick
Various Community PRs
2 parents e1bf4b2 + 80ea619 commit eedbe44

File tree

5 files changed

+25
-19
lines changed

5 files changed

+25
-19
lines changed

Sources/AutomaticEvents.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class AutomaticEvents: NSObject, SKPaymentTransactionObserver, SKProductsRequest
4545
var sessionStartTime: TimeInterval = Date().timeIntervalSince1970
4646
var hasAddedObserver = false
4747

48-
let awaitingTransactionsWriteLock = DispatchQueue(label: "com.mixpanel.awaiting_transactions_writeLock", qos: .userInitiated)
48+
let awaitingTransactionsWriteLock = DispatchQueue(label: "com.mixpanel.awaiting_transactions_writeLock", qos: .userInitiated, autoreleaseFrequency: .workItem)
4949

5050
func initializeEvents(instanceName: String) {
5151
let legacyFirstOpenKey = "MPFirstOpen"

Sources/Flush.swift

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class Flush: AppLifecycle {
4444

4545
required init(basePathIdentifier: String) {
4646
self.flushRequest = FlushRequest(basePathIdentifier: basePathIdentifier)
47-
flushIntervalReadWriteLock = DispatchQueue(label: "com.mixpanel.flush_interval.lock", qos: .utility, attributes: .concurrent)
47+
flushIntervalReadWriteLock = DispatchQueue(label: "com.mixpanel.flush_interval.lock", qos: .utility, attributes: .concurrent, autoreleaseFrequency: .workItem)
4848
}
4949

5050
func flushQueue(_ queue: Queue, type: FlushType) {
@@ -56,17 +56,18 @@ class Flush: AppLifecycle {
5656

5757
func startFlushTimer() {
5858
stopFlushTimer()
59-
if flushInterval > 0 {
60-
DispatchQueue.main.async { [weak self] in
61-
guard let self = self else {
62-
return
63-
}
59+
DispatchQueue.main.async { [weak self] in
60+
guard let self = self else {
61+
return
62+
}
6463

64+
if self.flushInterval > 0 {
65+
self.timer?.invalidate()
6566
self.timer = Timer.scheduledTimer(timeInterval: self.flushInterval,
66-
target: self,
67-
selector: #selector(self.flushSelector),
68-
userInfo: nil,
69-
repeats: true)
67+
target: self,
68+
selector: #selector(self.flushSelector),
69+
userInfo: nil,
70+
repeats: true)
7071
}
7172
}
7273
}

Sources/Mixpanel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ final class MixpanelManager {
166166
instances = [String: MixpanelInstance]()
167167
Logger.addLogging(PrintLogging())
168168
readWriteLock = ReadWriteLock(label: "com.mixpanel.instance.manager.lock")
169-
instanceQueue = DispatchQueue(label: "com.mixpanel.instance.manager.instance", qos: .utility)
169+
instanceQueue = DispatchQueue(label: "com.mixpanel.instance.manager.instance", qos: .utility, autoreleaseFrequency: .workItem)
170170
}
171171

172172
func initialize(token apiToken: String,

Sources/MixpanelInstance.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,8 @@ open class MixpanelInstance: CustomDebugStringConvertible, FlushDelegate, AEDele
231231
)
232232
#endif
233233
let label = "com.mixpanel.\(self.apiToken)"
234-
trackingQueue = DispatchQueue(label: "\(label).tracking)", qos: .utility)
235-
networkQueue = DispatchQueue(label: "\(label).network)", qos: .utility)
234+
trackingQueue = DispatchQueue(label: "\(label).tracking)", qos: .utility, autoreleaseFrequency: .workItem)
235+
networkQueue = DispatchQueue(label: "\(label).network)", qos: .utility, autoreleaseFrequency: .workItem)
236236
self.name = name
237237

238238
mixpanelPersistence = MixpanelPersistence.init(instanceName: name)
@@ -1164,7 +1164,12 @@ extension MixpanelInstance {
11641164
- parameter event: the name of the event to be tracked that was passed to time(event:)
11651165
*/
11661166
public func eventElapsedTime(event: String) -> Double {
1167-
if let startTime = self.timedEvents[event] as? TimeInterval {
1167+
var timedEvents = InternalProperties()
1168+
self.readWriteLock.read {
1169+
timedEvents = self.timedEvents
1170+
}
1171+
1172+
if let startTime = timedEvents[event] as? TimeInterval {
11681173
return Date().timeIntervalSince1970 - startTime
11691174
}
11701175
return 0

Sources/ReadWriteLock.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@
88
import Foundation
99

1010
class ReadWriteLock {
11-
let concurentQueue: DispatchQueue
11+
private let concurrentQueue: DispatchQueue
1212

1313
init(label: String) {
14-
self.concurentQueue = DispatchQueue(label: label, qos: .utility, attributes: .concurrent)
14+
concurrentQueue = DispatchQueue(label: label, qos: .utility, attributes: .concurrent, autoreleaseFrequency: .workItem)
1515
}
1616

1717
func read(closure: () -> Void) {
18-
self.concurentQueue.sync {
18+
concurrentQueue.sync {
1919
closure()
2020
}
2121
}
2222
func write(closure: () -> Void) {
23-
self.concurentQueue.sync(flags: .barrier, execute: {
23+
concurrentQueue.sync(flags: .barrier, execute: {
2424
closure()
2525
})
2626
}

0 commit comments

Comments
 (0)