-
[iOS] OSSignpost > 특정 작업의 duration 측정하기iOS 2024. 7. 1. 20:41
앱의 성능을 측정해 보려고 합니다.
그 중에서도 특정 작업이 완료되기까지 시간이 얼마나 걸렸는지를 측정해 보려고 합니다.
주로 네트워크 통신이나 이미지 랜더링 같은 작업이 오래 걸리는 시간을 측정해볼 때 유용하게 사용될 수 있을 것 같습니다.# OSSignposter
Signposts allow you to record meaningful information about the duration of your app’s tasks using the same subsystems and categories that you use for logging.
Signposts는 특정 작업의 응답 시간을 측정하는 도구입니다.
아이디어는 시작과 끝에 트리거를 주고 얼마나 걸렸는지 체크하는 것입니다.
그리고 이걸 instruments 를 이용해서 확인합니다.참고로 iOS 15부터 지원합니다.
# 코드에 로그 심기
먼저 몇 가지 준비가 필요합니다.
os.signpost를 import 하고 OSSignposter를 생성합니다.
OSSignposter 를 만들 때 subsystem과 category를 직접 지정해줄 수도 있습니다.그리고 로그가 될 OSSignposterID를 준비합니다.
makeSignpostID() 를 사용해 OSSignpostID를 만들거나 OSLog 를 사용해 직접 만들 수도 있습니다.import os.signpost let signposter = OSSignposter() let signpostID = signposter.makeSignpostID() // or OSSignpostID(log: <#T##OSLog#>)
다음은 측정하려는 작업을 시작할 때
beginInterval 를 사용해 interval을 시작하고작업이 끝날 때
endInterval 를 사용해 종료합니다.let state = signposter.beginInterval("begin task", id: signpostID) DispatchQueue.global().async { ... signposter.endInterval("end task", state) completion() }
코드 작업이 끝났다면 Product > Profile 을 누르거나 cmd I 를 눌러서 프로파일링 할 수 있도록 컴파일 해줍니다.
# 로그 확인
위에 심어둔 로그는 instruments를 사용해 확인할 수 있습니다.
먼저 Instruments를 열어줍니다.
그리고 Blank를 열어줍니다.
그리고 원하는 타겟(프로젝트)을 선택하고 + 버튼을 눌러서 os_signpost를 열어줍니다.
그리고 record 눌러서 앱을 실행하면 됩니다.앱에서 로그가 심어진 작업을 실행하면
아래처럼 작업이 얼마나 걸렸는지 확인할 수 있습니다.OSSignposter 를 만들 때 별도로 위처럼 subsystem이나 category를 지정하지 않으면 subsystem은 Target 명을 따라가고 category는 Default로 표시됩니다.
지정하면 아래처럼 표기됨.
이때 begin, end Interval시에 name은 동일해야 합니다!!
# Reference
https://developer.apple.com/documentation/os/logging/recording_performance_data
'iOS' 카테고리의 다른 글
Preference (PreferenceKey) (0) 2024.11.24 이미지의 크기를 줄인다. 리사이징 ? 압축 ? 해상도? 품질? (0) 2024.05.10 pixel 과 points, dp의 관계 그리고 UIImage (0) 2024.05.10 SwiftLint SPM으로 설치하기 (using Swift Package Build Tool Plugin) (0) 2024.03.22 swift concurrency 사용해 이미지 권한 얻기 (0) 2023.11.29