Skip to content

Signposter 기반 벤치마크 코드 만들기

Jinwon Choi edited this page Jan 23, 2025 · 3 revisions

작성자: 허혜민, 최진원

벤치마크 해야 할 것들

소요 시간

SNMLogger 내부에 구현할 것인가?

SRP 측면에서 분리하는 게 좋아보인다.

private static let logger: Logger = Logger(subsystem: "SniffMeet", category: "SNMLogger"
private static let logger: Logger = Logger(subsystem: "SniffMeet.측정용", category: "SNMBenchMarker"

구현 방식

start/end point 메서드 vs 클로저

  • 현재 앱 코드가 동기식으로 작동하지 않으니까 start end가 되게 부정확할수도 있다고 생각한다.
  • start / end point의 문제
    • 하나의 메서드에서 여러 개의 start end 짝이 있으면 어떻게 짝지어 줄 수 있을까?
      • 이름(identifier) 붙여주기

최종 코드

enum SNMLogger {
    ...
    private static let poster: OSSignposter = OSSignposter(logger: logger)
    ...
}

extension SNMLogger {
    /// 주의: 프로세스 bound를 넘어 사용하지 마세요
    static func begin(name: StaticString) -> OSSignpostIntervalState {
        let id = poster.makeSignpostID()
        return poster.beginInterval(name, id: id)
    }
    /// 주의: 프로세스 bound를 넘어 사용하지 마세요
    static func end(name: StaticString, state: OSSignpostIntervalState) {
        poster.endInterval(name, state)
    }
    static func emitEvent(name: StaticString) {
        let id = poster.makeSignpostID()
        poster.emitEvent(name, id: id)
    }
}

OSSignposter를 한번 래핑하고 ID를 자동으로 생성해주는 역할을 하는 코드로 만듦

  • 기존에 존재하는 로그 시스템이 있기 때문에 통합
Screenshot 2025-01-17 at 10 53 02 AM

레퍼런스

Recording Performance Data | Apple Developer Documentation

Clone this wiki locally