post Image
Signposts と Instruments でパフォーマンスを計測する:入門編

iOS アプリのパフォーマンスチューニングにおいて、Signposts を使用する方法について書きます。コード中に仕込んだ最も簡単なマーカーを Instruments で表示させるところまでを、初心者でも分かるように順を追って説明していきます。

Signposts とは

パフォーマンスを計測するためのマーカーで、Xcode 10 で導入されました。パフォーマンスを調査したいコード中にマーカーを入れて、プロファイリングすることにより、その計測結果を Instruments 上にグラフィカルに表示することができます。
自分の気になるところをフォーカスして解析できるので、パフォーマンスチューニングが捗るはかどると思います。

確認事項

Xcode 10 で導入されたものなので、iOS 12 以上でないと動きません。
Instruments_step0.png

マーカーの使い方

import os.signpost

まずは、os.signpost をインポートします。

let bootLog = OSLog(subsystem: "com.example.your-app", category: "BootOperations")

それから、計測したい箇所で、ログのハンドルを取得します。 subsystem にはアプリの Bundle ID などを適当に指定し、category はこのログのグループ名を自由に考えて指定します。ここでは、起動時のパフォーマンスを計測するとして、BootOperations と指定しています。

os_signpost(.begin, log: bootLog, name: "fetch something")
fetchSomething()
os_signpost(.end, log: bootLog, name: "fetch something")

最後に、作成したログのインスタンスを使いながら、計測したい箇所を os_signpost().begin.end で囲みます。ここでは、 fetchSomething() の時間を測り、 fetch something として表示するように設定しました。

計測方法

コードの準備が整ったら、実際に計測してみます。Instruments の Time Profiler を使う手順とほとんど同じなので、Time Profiler を使ったことがない人は、まず下記を参照して下さい。初めての人でも分かりやすくまとまっています。

Instruments Time Profiler の使い方
https://qiita.com/okamotoke/items/daac6645fc44daadf1dd

signpost を使うには、まず、Instruments を Time Profiler を選択して起動させます。
Instruments_step2.png
起動させたら、右上の「+」ボタンをクリックし、「Filter」のところで「sign」と入力すると、「os_signpost」が絞り込まれて表示されます。
Instruments_step3.png
この「os_signpost」をダブルクリックして追加します。
Instruments_step4.png
これで準備完了です。赤丸ボタンを押して計測をスタートし、マーカーを仕込んだコードが実行されたら、ストップしてみましょう。
Instruments_step5.png
無事に BootOperations グループの中で fetch something の実行時間が記録され、グラフィカルに表示することができました。

まとめ

Signposts の簡単なマーカーをコード中に仕込み、Instruments で表示させる方法を説明しました。Signposts ではさらにいろいろなことができるので、興味ある方は下記をご覧下さい。

Signposts と Instruments でパフォーマンスを計測する:基礎編
https://qiita.com/hsawada/items/1358ebc9aa1a82ac4f12

参考文献

Measuring Performance Using Logging
https://developer.apple.com/videos/play/wwdc2018/405

Xcode Time Profiler の使い方
https://qiita.com/okamotoke/items/daac6645fc44daadf1dd


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。