知りませんでした。symfonyのWebデバッグツールバーに表示されているメモリ使用量は、メモリの最大使用量ではなかったのです。現在の確保されたメモリ量というのが正しいです。これってsymfony使いの常識ですか?
当然、メモリの最大使用量を表示したいですよね。symfony 1.2以上であれば、簡単に実装できます。(symfony 1.0をお使いの方は、sfWebDebugで、より正確なメモリ使用量を見るには - Sooeyをご覧ください。)
symfonyのWebデバッグツールバーのカスタマイズ方法は、Cookbookにしっかりと載っているのです。今回参考にするのは、The symfony Cookbook | Webデバッグツールバーをカスタマイズする方法 | symfony | Web PHP Frameworkです。実際にやってみましょう。
まずはメモリの最大使用量を表示するためのsfWebDebugPanelクラスの派生クラスを作成します。sfWebDebugPanelMemoryクラスをほんの少しだけ変えただけのクラスです。libフォルダなどに作りましょう。
PHP:
-
<?php
-
-
/**
-
* sfWebDebugPanelPeakMemory adds a panel to the web debug toolbar with the peak memory used by the script.
-
*
-
* @package symfony
-
* @subpackage debug
-
*/
-
class sfWebDebugPanelPeakMemory extends sfWebDebugPanel
-
{
-
public function getTitle()
-
{
-
-
{
-
-
-
return '<img src="'.$this->webDebug->getOption('image_root_path').'/memory.png" alt="Peak Memory" /> peak:'.$totalMemory.' KB';
-
}
-
}
-
-
public function getPanelTitle()
-
{
-
}
-
-
public function getPanelContent()
-
{
-
}
-
}
お気づきかと思いますが、Webデバッグツールバーの1つ1つの項目はsfWebDebugPanelクラスの派生クラスです。構造化がうまくなされているので、追加も簡単という訳です。
次に、Webデバッグツールバーに登録します。今回はプロジェクト全体で適用したいので、ProjectConfiguration.class.phpを変更します。frontendConfiguration.class.phpでも同じコードで動きます。
PHP:
-
class ProjectConfiguration extends sfProjectConfiguration
-
{
-
public function setup()
-
{
-
// ...
-
$this->dispatcher->connect('debug.web.load_panels', array($this, 'configureWebDebugToolbar'));
-
}
-
-
public function configureWebDebugToolbar(sfEvent $event)
-
{
-
$webDebugToolbar = $event->getSubject();
-
$webDebugToolbar->setPanel('peak_memory', new sfWebDebugPanelPeakMemory($webDebugToolbar));
-
$webDebugToolbar->removePanel('memory');
-
}
-
-
}
字面でなんとなくわかるかもしれませんが、Webデバッグツールバーのロード時にconfigureWebDebugToolbar()メソッドを呼び出すように登録しています。メソッド内では、さきほど作成した最大使用量を表示するパネルを追加し、代わりに元々あったメモリ表示のパネルを削除しています。
実際に使用したときのWebデバッグツールバーがこのようになります。

上記sfWebDebugPanelPeakMemoryクラスの中で、わかりやすく「peak:」を表示するようにしています。
今一度、symfonyを見直してみるのもいいかもしれませんね。