Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Mixpanel/AutomaticEvents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class AutomaticEvents: NSObject, SKPaymentTransactionObserver, SKProductsRequest
var hasAddedObserver = false
var automaticPushTracking = true
var firstAppOpen = false
let awaitingTransactionsWriteLock = DispatchQueue(label: "com.mixpanel.awaiting_transactions_writeLock")
let awaitingTransactionsWriteLock = DispatchQueue(label: "com.mixpanel.awaiting_transactions_writeLock", qos: .utility)

func initializeEvents() {
let firstOpenKey = "MPFirstOpen"
Expand Down
2 changes: 1 addition & 1 deletion Mixpanel/Flush.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class Flush: AppLifecycle {

required init(basePathIdentifier: String) {
self.flushRequest = FlushRequest(basePathIdentifier: basePathIdentifier)
flushIntervalReadWriteLock = DispatchQueue(label: "com.mixpanel.flush_interval.lock", attributes: .concurrent)
flushIntervalReadWriteLock = DispatchQueue(label: "com.mixpanel.flush_interval.lock", qos: .utility, attributes: .concurrent)
}

func flushEventsQueue(_ eventsQueue: Queue, automaticEventsEnabled: Bool?) -> Queue? {
Expand Down
30 changes: 23 additions & 7 deletions Mixpanel/Mixpanel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,12 @@ class MixpanelManager {
static let sharedInstance = MixpanelManager()
private var instances: [String: MixpanelInstance]
private var mainInstance: MixpanelInstance?
private let readWriteLock: ReadWriteLock

init() {
instances = [String: MixpanelInstance]()
Logger.addLogging(PrintLogging())
readWriteLock = ReadWriteLock(label: "com.mixpanel.instance.manager.lock")
}

#if !os(OSX) && !WATCH_OS
Expand All @@ -152,7 +154,9 @@ class MixpanelManager {
automaticPushTracking: automaticPushTracking,
optOutTrackingByDefault: optOutTrackingByDefault)
mainInstance = instance
instances[instanceName] = instance
readWriteLock.write {
instances[instanceName] = instance
}

return instance
}
Expand All @@ -166,14 +170,20 @@ class MixpanelManager {
name: instanceName,
optOutTrackingByDefault: optOutTrackingByDefault)
mainInstance = instance
instances[instanceName] = instance
readWriteLock.write {
instances[instanceName] = instance
}

return instance
}
#endif // os(OSX)

func getInstance(name instanceName: String) -> MixpanelInstance? {
guard let instance = instances[instanceName] else {
var instance: MixpanelInstance? = nil
readWriteLock.read {
instance = instances[instanceName]
}
if instance == nil {
Logger.warn(message: "no such instance: \(instanceName)")
return nil
}
Expand All @@ -185,17 +195,23 @@ class MixpanelManager {
}

func setMainInstance(name instanceName: String) {
guard let instance = instances[instanceName] else {
var instance: MixpanelInstance? = nil
readWriteLock.read {
instance = instances[instanceName]
}
if instance == nil {
return
}
mainInstance = instance
}

func removeInstance(name instanceName: String) {
if instances[instanceName] === mainInstance {
mainInstance = nil
readWriteLock.write {
if instances[instanceName] === mainInstance {
mainInstance = nil
}
instances[instanceName] = nil
}
instances[instanceName] = nil
}

}
8 changes: 4 additions & 4 deletions Mixpanel/MixpanelInstance.swift
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ open class MixpanelInstance: CustomDebugStringConvertible, FlushDelegate, AEDele
self.apiToken = apiToken
}
self.name = name
self.readWriteLock = ReadWriteLock(label: "globalLock")
self.readWriteLock = ReadWriteLock(label: "com.mixpanel.globallock")
flushInstance = Flush(basePathIdentifier: name)
#if DECIDE
decideInstance = Decide(basePathIdentifier: name, lock: self.readWriteLock)
Expand Down Expand Up @@ -356,16 +356,16 @@ open class MixpanelInstance: CustomDebugStringConvertible, FlushDelegate, AEDele
self.apiToken = apiToken
}
self.name = name
self.readWriteLock = ReadWriteLock(label: "globalLock")
self.readWriteLock = ReadWriteLock(label: "com.mixpanel.globallock")
flushInstance = Flush(basePathIdentifier: name)
let label = "com.mixpanel.\(self.apiToken)"
trackingQueue = DispatchQueue(label: label)
trackingQueue = DispatchQueue(label: label, qos: .utility)
sessionMetadata = SessionMetadata(trackingQueue: trackingQueue)
trackInstance = Track(apiToken: self.apiToken,
lock: self.readWriteLock,
metadata: sessionMetadata)
flushInstance.delegate = self
networkQueue = DispatchQueue(label: label)
networkQueue = DispatchQueue(label: label, qos: .utility)
distinctId = defaultDistinctId()
people = People(apiToken: self.apiToken,
serialQueue: trackingQueue,
Expand Down
2 changes: 1 addition & 1 deletion Mixpanel/ObjectIdentityProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class ObjectIdentityProvider {
}

class SequenceGenerator {
private var queue = DispatchQueue(label: "com.mixpanel.sequence.generator")
private var queue = DispatchQueue(label: "com.mixpanel.sequence.generator", qos: .utility)
private(set) var value: Int32 = 0

init() {
Expand Down
2 changes: 1 addition & 1 deletion Mixpanel/ReadWriteLock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class ReadWriteLock {
let concurentQueue: DispatchQueue

init(label: String) {
self.concurentQueue = DispatchQueue(label: label, attributes: .concurrent)
self.concurentQueue = DispatchQueue(label: label, qos: .utility, attributes: .concurrent)
}

func read(closure: () -> ()) {
Expand Down
2 changes: 1 addition & 1 deletion Mixpanel/TweakPersistency.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ private final class TweakDiskPersistency {
.appendingPathExtension("db")
}

private let queue = DispatchQueue(label: "org.khanacademy.swift_tweaks.disk_persistency", attributes: [])
private let queue = DispatchQueue(label: "org.khanacademy.swift_tweaks.disk_persistency", qos: .utility, attributes: [])

init(identifier: String) {
self.fileURL = TweakDiskPersistency.fileURLForIdentifier(identifier)
Expand Down
2 changes: 1 addition & 1 deletion Mixpanel/WebSocketWrapper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class WebSocketWrapper: WebSocketDelegate {
open = false
connected = false
session = [String: Any]()
sessionObjectLock = DispatchQueue(label: "com.mixpanel.session_object_lock", attributes: .concurrent)
sessionObjectLock = DispatchQueue(label: "com.mixpanel.session_object_lock", qos: .utility, attributes: .concurrent)
self.url = url
self.connectCallback = connectCallback
self.disconnectCallback = disconnectCallback
Expand Down
2 changes: 1 addition & 1 deletion MixpanelDemo/MixpanelDemoTests/MixpanelDemoTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -858,7 +858,7 @@ class MixpanelDemoTests: MixpanelBaseTests {
func testReadWriteLock() {
var array = [Int]()
let lock = ReadWriteLock(label: "test")
let queue = DispatchQueue(label: "concurrent", attributes: .concurrent)
let queue = DispatchQueue(label: "concurrent", qos: .utility, attributes: .concurrent)
for _ in 0..<10 {
queue.async {
lock.write {
Expand Down