[Symfony2]プロファイラーのタイムラインへの独自項目追加方法
Symfony2 では xdebug を導入しなくても、簡易なプロファイラーを利用できます。
"タイムライン"で各処理が消費した時間を見ることができるのですが、コントローラーから呼び出された各処理については自動で時間を取得してはくれません。
・・・というわけで独自項目をタイムラインへ追加する方法について調査しました。
タイムラインへの追加手順は次の通り。
残念ながらドキュメントにはこのあたり書いてないのですよね。。。
以下、調査メモ
各コンポーネントの時間の集計についてはこちらの StopWatch を利用している模様。
時間を取得するコンポーネントから利用して、プロファイラに渡す必要がありそう。
StopWatch の利用はこんな感じの模様。
プロファイラにデータを渡す部分は見えないが、恐らく StopWatch は DI でセットされるので、同様に Symfony がサービスとして用意してくれている StopWatch サービスを利用すれば問題なさそう。
"debug.stopwatch" という id で定義している。
やはり "debug.stopwatch" を DI している。
データコレクターについては詳しくはこちら
実際に使う場合の実装としてはこの方法のほうが扱いやすいかも。
https://github.com/symfony/symfony/blob/2.4/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php
https://github.com/doctrine/DoctrineBundle/blob/master/Resources/config/dbal.xml#L31
"タイムライン"で各処理が消費した時間を見ることができるのですが、コントローラーから呼び出された各処理については自動で時間を取得してはくれません。
![]() |
Symfonyで提供しているプロファイラーのタイムライン |
- タイムラインに追加したい処理を行うオブジェクトに "debug.stopwatch" を DI
- $stopWatch = $this->get('debug.stopwatch'); $event = $stopWatch->start('hogehoge'); ...(任意の処理)...; $event->stop()
![]() |
こんな感じになります |
以下、調査メモ
StopWatch コンポーネント
https://github.com/symfony/symfony/tree/51c6d7696c2fb98f7720d842c502662e6451f925/src/Symfony/Component/Stopwatch各コンポーネントの時間の集計についてはこちらの StopWatch を利用している模様。
時間を取得するコンポーネントから利用して、プロファイラに渡す必要がありそう。
TraceableEventDispatcher コンポーネント
https://github.com/symfony/symfony/blob/master/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php#L125StopWatch の利用はこんな感じの模様。
1 2 3 | $event = $stopWatch ->start(); ... $event ->stop(); |
StopWatch サービス定義
https://github.com/symfony/symfony/blob/2.4/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml#L15"debug.stopwatch" という id で定義している。
データコレクター定義
https://github.com/symfony/symfony/blob/2.4/src/Symfony/Bundle/FrameworkBundle/Resources/config/collectors.xml#L46やはり "debug.stopwatch" を DI している。
データコレクターについては詳しくはこちら
その他
Propel や Doctrine では StopWatch を Logger 中で扱っているようです。実際に使う場合の実装としてはこの方法のほうが扱いやすいかも。
https://github.com/symfony/symfony/blob/2.4/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php
https://github.com/doctrine/DoctrineBundle/blob/master/Resources/config/dbal.xml#L31
コメント
コメントを投稿