Posted at

Instrumentsを使ってみた

More than 3 years have passed since last update.


はじめに

以前から、ふんわりと存在は知っていたけど、殆ど使ったことがなかったInstrumentsを使って遊んでみました。


そもそもInstrumentsって?

Instrumentsでは、instrumentと呼ばれる各種の専用ツールを使って、プロセスの振る舞いをさまざまな視点からトレースできます。また、OS Xユーザインターフェイス上の一連の操作を記録しておき、 これを繰り返し再現しつつ、instrumentをいくつか使ってデータを収集することも可能です。

参考:

https://developer.apple.com/jp/documentation/InstrumentsUserGuide.pdf


実際に使ってみた


前準備

まず、Xcodeで何かプロジェクトを開きます。(とりあえず、InstrumentsTestというプロジェクトを作ってみました。)

instruments_ss_1

次に、一度そのプロジェクトを検証したい実機またはシミュレータにビルドします。(私はシミュレータに入れました。)


Instruments起動

Xcodeから起動するには、

"Xcode">"Open Developer Tool">"Instruments"

と辿っていって下さい。

instruments_ss_2

Instrumentsを起動すると、以下のようなウィンドウが開きます。

instruments_ss_3

とりあえず、よく名前を目にする"Time Profiler"を使ってみることにしました。

※"Time Profiler"はシステムのCPUがどのプロセスを実行しているか、時間軸に沿って調べることができます。オーバーヘッドもあまりありません。

起動したら、以下のように先程プロジェクトをビルドした実機またはシミュレータを設定します。

instruments_ss_4


トレースしてみよう

みなさん、すでに気になっていると思いますが、Instrumentsウィンドウの左上にある赤い「●」。これをクリックすると、検証端末の中のアプリが起動し、トレースがはじまります。

instruments_ss_6

ちなみに、とりあえず作ったアプリはこんな感じです。(ただラベルを表示しているだけ。)

instruments_ss_7

何度か起動すると、こんな感じで過去ログも見れます。

instruments_ss_8

これだけではあまり面白くないので、他にも何かトレースしてみましょう。


ちなみに

InstrumentsをXcodeでデバッグしつつ使いたい場合は、以下のように、

"Product">"Profile"

を実行して下さい。

instruments_ss_5


新たなLibraryを追加してみよう

Instrumentsは一度に複数のデータを計測することができます。

Instrumentsウィンドウの右上にある「+」ボタンをクリックすると、Libraryリストが表示されます。

instruments_ss_9

個人的にメモリ関連が気になるので、"Allocations"と"Leaks"を追加してみました。(追加したいLibraryをダブルクリックする。)

※"Allocations"はヒープメモリの使用量を、割り当て処理(クラスによるオブジェクトの割り当てを含む)を追跡することにより測定します。また、仮想メモリの状況も、その統計情報をリージョンごとに記録します。

※"Leaks"はメモリ総使用量を計測し、メモリリークが起こっていないか確認し、クラスによるオブジェクト割り当ての統計情報を提供し、さらに、アクティブな割り当てやリークしたブロックすべてのアドレス履歴を示します。

instruments_ss_10

一度にCPUだけでなく、ヒープメモリの使用量とメモリリークの確認ができるようになりました。だいぶ便利そうです。


せっかくだし、もっと遊んでみよう

ただラベルを表示させているだけではつまらないので、ちょっと無茶してみました。


プロジェクトの修正

こんな感じなら、表示が面白くなるはずです。

instruments_ss_11


実行してみた

ヒープメモリの使用量ががんがん上がっていっています。

instruments_ss_12


まとめ

Instrumentsは、CPUやメモリ使用量などのデータを可視化し、アプリのパフォーマンス改善に役立つツール群です。

今回はメジャーな"Time Profiler"と"Allocations"と"Leaks"しか使いませんでしたが、他にも様々なLibraryがあるので、興味のある方は調べてみて下さい。

今回の例だけではまだなんとも言えませんが、大きなプロジェクトで使ってみたらもっと恩恵に与れると感じました。