Skip to content

Commit 81276af

Browse files
committed
Cache AppInfo and DeviceInfo to avoid redundant computation
1 parent 9614368 commit 81276af

File tree

3 files changed

+19
-21
lines changed

3 files changed

+19
-21
lines changed

Sources/Pulse/LoggerStore/LoggerStore+Info.swift

+13-15
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,13 @@ enum AppInfo {
7979
}
8080

8181
extension LoggerStore.Info.AppInfo {
82-
static func make() -> LoggerStore.Info.AppInfo {
83-
LoggerStore.Info.AppInfo(
84-
bundleIdentifier: AppInfo.bundleIdentifier,
85-
name: AppInfo.appName,
86-
version: AppInfo.appVersion,
87-
build: AppInfo.appBuild,
88-
icon: getAppIcon()?.base64EncodedString()
89-
)
90-
}
82+
static let current = LoggerStore.Info.AppInfo(
83+
bundleIdentifier: AppInfo.bundleIdentifier,
84+
name: AppInfo.appName,
85+
version: AppInfo.appVersion,
86+
build: AppInfo.appBuild,
87+
icon: getAppIcon()?.base64EncodedString()
88+
)
9189
}
9290

9391
private func getAppIcon() -> Data? {
@@ -110,7 +108,7 @@ func getDeviceId() -> UUID? {
110108

111109
extension LoggerStore.Info.DeviceInfo {
112110
@MainActor
113-
static func make() -> LoggerStore.Info.DeviceInfo {
111+
static let current: LoggerStore.Info.DeviceInfo = {
114112
let device = UIDevice.current
115113
return LoggerStore.Info.DeviceInfo(
116114
name: device.name,
@@ -119,7 +117,7 @@ static func make() -> LoggerStore.Info.DeviceInfo {
119117
systemName: device.systemName,
120118
systemVersion: device.systemVersion
121119
)
122-
}
120+
}()
123121
}
124122
#elseif os(watchOS)
125123
import WatchKit
@@ -131,7 +129,7 @@ func getDeviceId() -> UUID? {
131129

132130
extension LoggerStore.Info.DeviceInfo {
133131
@MainActor
134-
static func make() -> LoggerStore.Info.DeviceInfo {
132+
static let current: LoggerStore.Info.DeviceInfo = {
135133
let device = WKInterfaceDevice.current()
136134
return LoggerStore.Info.DeviceInfo(
137135
name: device.name,
@@ -140,22 +138,22 @@ static func make() -> LoggerStore.Info.DeviceInfo {
140138
systemName: device.systemName,
141139
systemVersion: device.systemVersion
142140
)
143-
}
141+
}()
144142
}
145143
#else
146144
import AppKit
147145

148146
extension LoggerStore.Info.DeviceInfo {
149147
@MainActor
150-
static func make() -> LoggerStore.Info.DeviceInfo {
148+
static let current: LoggerStore.Info.DeviceInfo = {
151149
return LoggerStore.Info.DeviceInfo(
152150
name: Host.current().name ?? "unknown",
153151
model: "unknown",
154152
localizedModel: "unknown",
155153
systemName: "macOS",
156154
systemVersion: ProcessInfo().operatingSystemVersionString
157155
)
158-
}
156+
}()
159157
}
160158

161159
@MainActor

Sources/Pulse/LoggerStore/LoggerStore.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public final class LoggerStore: @unchecked Sendable, Identifiable {
178178
var createSession = false
179179
if options.contains(.create) && !options.contains(.readonly) && configuration.isAutoStartingSession {
180180
perform { _ in
181-
self.saveEntity(for: self.session, info: .make())
181+
self.saveEntity(for: self.session, info: .current)
182182
}
183183
createSession = true
184184
}
@@ -791,7 +791,7 @@ extension LoggerStore {
791791
try? deleteEntities(for: LoggerMessageEntity.fetchRequest())
792792
try? deleteEntities(for: LoggerBlobHandleEntity.fetchRequest())
793793
try? deleteEntities(for: LoggerSessionEntity.fetchRequest())
794-
saveEntity(for: session, info: .make())
794+
saveEntity(for: session, info: .current)
795795

796796
try? Files.removeItem(at: blobsURL)
797797
Files.createDirectoryIfNeeded(at: blobsURL)
@@ -1133,7 +1133,7 @@ extension LoggerStore {
11331133
///
11341134
/// - important Thread-safe. But must NOT be called inside the `backgroundContext` queue.
11351135
public func info() async throws -> Info {
1136-
let deviceInfo = await LoggerStore.Info.DeviceInfo.make()
1136+
let deviceInfo = await LoggerStore.Info.DeviceInfo.current
11371137
return try await container.performBackgroundTask { context in
11381138
return try self._info(in: context, deviceInfo: deviceInfo)
11391139
}
@@ -1157,7 +1157,7 @@ extension LoggerStore {
11571157
totalStoreSize: try storeURL.directoryTotalSize(),
11581158
blobsSize: try getBlobsSize(),
11591159
blobsDecompressedSize: try getBlobsSize(isDecompressed: true),
1160-
appInfo: .make(),
1160+
appInfo: .current,
11611161
deviceInfo: deviceInfo
11621162
)
11631163
}

Sources/Pulse/RemoteLogger/RemoteLogger.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,8 @@ public final class RemoteLogger: ObservableObject, RemoteLoggerConnectionDelegat
450450
let body = PacketClientHello(
451451
version: Version.currentProtocolVersion.description,
452452
deviceId: getDeviceId() ?? getFallbackDeviceId(),
453-
deviceInfo: .make(),
454-
appInfo: .make(),
453+
deviceInfo: .current,
454+
appInfo: .current,
455455
session: store?.session
456456
)
457457
connection?.send(code: .clientHello, entity: body)

0 commit comments

Comments
 (0)