はじめに
これまでメソッドの処理時間を計測するには、
Date 関数の timeIntervalSince メソッドを以下のように利用する場面が度々ありました。
1 2 3 4 5 | |
しかし実は iOS12 から os.signpost を利用してもっと便利に処理時間を計測することができるようになりました。
本日は os.signpost を利用したことをメモとして記録しておきます。
os.signpostのメリット・デメリット
os.signpost を利用すると何が良いかと言うと、
- 最小/最大/平均の処理時間が自動で計測できる
- CPU使用率など
Instrumentsによる他の計測結果と並行して状況を把握できる
などが上げられます。
一方でデメリットは os.signpost がiOS12以降でしか利用できないということです。
よって、iOS11以下をサポートするアプリの場合、
1 2 3 | |
の条件分岐をした上で os.signpost を利用する必要があります。
しかし、これは時間が解決してくれるでしょう。
(あまり気にするデメリットではないということです。)
os.signpostの使い方
それでは早速、 os.signpost を使ってみましょう。
os.signpost は特にSDKを追加することなく、 import が可能です。
① import os.signpost を追加する
② OSLogオブジェクトを初期化する
Apple Developer Document: OSLog – initに記載のある通り、初期化をします。
1
| |
subsystem には com.your_company.your_subsystem_name の形で定義するようにと例として書かれています。
category はログのカテゴリ分けに利用できるため、カテゴリ種別で命名すると良いでしょう。
③ 計測開始時に OSSignpostType に .begin を指定した os_signpost メソッドを呼び出す
Apple Developer Document: os_signpostに記載のあるメソッドを呼び出します。
1
| |
④ 計測完了時に OSSignpostType に .end を指定した os_signpost メソッドを呼び出す
③と同じメソッドですが、計測完了時には OSSignpostType に end を指定します。
1
| |
これで、後は Instruments を起動して、os_signpost を追加して計測すればOKです。
今回は、下記のようなサンプルを用意して計測してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
os.signpostでの計測結果
Instruments で計測した結果は下記のように見ることができます。

上記結果から、計測処理が 平均88.97 [ms] かかっていることがわかります。
またこの処理の実行中はCPUが100%に張り付いていることも見て取れます。
今回はサンプルなので print で1万回出力するメソッドを計測しました。
本物のアプリではボトルネックとなる処理を見つけ、如何にして処理を改善できないか検討することになるでしょう。
まとめ
いかがでしたでしょうか。
iOS13のリリースが近づいてきた(iOS12の普及が十分に達しつつある)今だからこそ改めて signpost を積極的に利用していきましょう。
といったところで本日はここまで。