SWFProfiler をアップデートしました。
リリースノート
・モニタリングする対象 SWF をリストから選択出来るように機能を追加しました。
・不要なデータが混ざるのを防ぐため、サーバー <-> クライアント間のデータのやり取りをリモーティングからメッセージングを使ったものに変更しました。
・上記に伴い、サーバーを Jetty から自前サーバーに変更しました。
・サンプリングがおかしかった所を修正しました。
ダウンロード
SWFProfiler.zip (Ver. 0.0.3)
SWFProfiler.zip (Ver. 0.0.4)
使い方
・SWFProfiler.jar を実行します。
・監視したい対象 SWF をブラウザ上でもローカル上でもいいので開きます。
・リストから対象 SWF のファイル名を選択します。
以上の手順でプロファイリングが可能です。
使用に関して
・実行には JRE 1.6+ が必要です。
・FlashPlayer はデバックバージョンを使用する必要があります。
・SWF はデバッグリリースされている必要があります。
ソースコード
http://bitbucket.org/muta244/swfprofiler/ で bitbucket にて管理しています。
今回のアップデートでだいぶ使えるものになったんじゃないかと思います。ただ、バグやおかしな点もまだまだあるかと思いますので、これからもマイペースに更新していきます。ご意見・ご要望はコメント欄、もしくは bitbucket にチケット登録をお願いします。

先日リリースした SWFProfiler ですが、みなさん動いてなかったかと思います(ですよね?)。なので、修正版をリリースしました。ついでにモニター結果のフィルタリング機能と、定期的にガベージコレクションを自動で行う機能を追加しています。
ダウンロード
SWFProfiler.zip (Ver. 0.0.2)
* リンク先を間違えていたので修正しました。(’09.08.16)
SWFProfiler.zip (Ver. 0.0.4)
* バグ修正版。(’09.11.18)
あと、ブラウザ版にしろ、ローカル版にしろ、Flash Player はデバッグ版がインストールされている必要があります。それと、SWF 自体もデバッグモードで書き出されている必要がありますので、この点だけご注意下さい。
不明な点やバグ報告などありましたら、ぜひコメント欄へお願いします!
SWFProfiler のキャプチャ画像(nium さんの kujaku を勝手にプロファイリングw)
Flex Builder が無くてもデバッグ環境が必要だと思うので作りました。今の機能は Flex Builder プロファイラのライブオブジェクト相当のみです。Windows, Mac, Linux 全てで使用出来ますが、Swing で開発してるので JRE 1.6+ が必要です。
ダウンロード
SWFProfiler.zip (Ver. 0.0.1)
※ このバージョンは正しく動作しませんので、新しいバージョンをリリースしました。そちらをお使い下さい。
使い方
SWFProfiler.jar を起動した後、監視対象の SWF を開く(ブラウザ上でも可)と監視が始まります。現状では、複数の SWF を同時に開いているとおかしな事になるので、SWF は監視対象一つのみを開くようにして下さい。FlaProfiler とほぼ同じです。
今後の予定
・複数の SWF 対応
・モニター結果のフィルタリング機能
・コンソール機能
・メモリ使用状況のグラフ表示
・国際化
あとは Mac で文字列なカラムでソートすると、何故かちらつくんですよね。Win だと大丈夫。Swing の問題だとは思うんだけど、対処法がないか模索中。
さて、どこまで出来るかな。
Swing のメモ。
Swing を使ったアプリでは SingleFrameApplication#shutdown() をオーバーライドして終了処理を記述する。この時、Windows ではクローズボタンで終わろうが、Alt+F4 で終わろうが、強制終了で終わろうが、ちゃんと shutdown() が最後に呼び出される。しかし、Mac だと正しく shutdown() が呼び出されない時がある。File -> Exit で終了した時など GUI 上で終了させた時は問題ないが、Cmd+Q や強制終了で JVM ごと終わらせた時には shutdown() が呼び出されず、終了処理が行えない。
そんな時の対処法が以下。
Java
@Override
protected void startup()
{
Runtime.getRuntime().addShutdownHook(new Thread()
{
public void run()
{
if (!shutdowned) {
shutdown();
}
}
// 通常の起動処理
...
});
}
@Override
protected void shutdown()
{
if (shutdowned) {
return;
}
super.shutdown();
shutdowned = true;
}
このやり方が正しいのかは分からないけど、Runtime#addShutdownHook() なら Mac でも shutdown() を呼び出せるので終了処理がきちんと行える。Swing はシステム関係無くアプリ開発出来ることを謳ってるので、結構この問題はクリティカルだと思う。Sun さんの修正を期待。
こんなエントリー、ActionScript と関係無さそうだけど、Flash 開発のために必要なことをやっているのです…。
個人的なメモ。
Jar Bundler で .jar を .app にパッケージングする際の注意点。

この画面で “Use Macintosh Menu Bar” にチェック入れてても、Swing を使ったアプリケーションだとウインドウ上部にメニューが表示されず、フレーム内部に表示されてしまう。対処法は以下。

この画面の一番下でしているように、プロパティに “apple.laf.useScreenMenuBar” を true に設定して書き出せばスクリーン上部にメニューが表示されるようになる。