-
Notifications
You must be signed in to change notification settings - Fork 0
Signposter 기반 벤치마크 코드 만들기
Jinwon Choi edited this page Jan 23, 2025
·
3 revisions
작성자: 허혜민, 최진원
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) 붙여주기
- 하나의 메서드에서 여러 개의 start end 짝이 있으면 어떻게 짝지어 줄 수 있을까?
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를 자동으로 생성해주는 역할을 하는 코드로 만듦
- 기존에 존재하는 로그 시스템이 있기 때문에 통합