1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import os
@MainActor
enum LaunchMetrics {
static let signposter = OSSignposter(subsystem: "social.grain.grain", category: "AppLaunch")
private static var tfpState: OSSignpostIntervalState?
private static var preBodyState: OSSignpostIntervalState?
private static var preBodyEnded = false
private static var tfpEnded = false
static func beginTFP() {
tfpState = signposter.beginInterval("TFP", id: signposter.makeSignpostID())
}
static func endTFPOnce() {
guard !tfpEnded, let state = tfpState else { return }
tfpEnded = true
signposter.endInterval("TFP", state)
tfpState = nil
}
static func beginPreBody() {
preBodyState = signposter.beginInterval("PreBody", id: signposter.makeSignpostID())
}
static func endPreBodyOnce() {
guard !preBodyEnded, let state = preBodyState else { return }
preBodyEnded = true
signposter.endInterval("PreBody", state)
preBodyState = nil
}
}