~ knotless Search/
↑↓ move↵ open⇧↵ all results

grain.social/grain-ios

1 collaborator
0
1
main
33 lines · 1007 B Raw History
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
    }
}