XMPlayerについてNative Clientでのデバッグ用のログ出力を実装してみた。Native ClientからJavaScriptのメソッドに直接ログを送るものと、一旦キューにログを貯めてJavaScript側から後で取り出すものの2種類である。
ドキュメントのどこかに書いてあったような気がするのだが、オーディオコールバックはメインスレッド(UIスレッド)とは別のスレッドとなっている。またメインスレッド以外からのJavaScript呼び出しなどは現在のリリースではNGである。
http://code.google.com/intl/ja/chrome/nativeclient/docs/releasenotes.html
実際にやってみるとフリーズする。のでオーディオ・コールバックのログ出力は一旦キューに溜めてメインスレッド側から取り出すように(JavaScriptから呼び出すように)した。JavaScript側からは定期的にログをチェックをして画面に出力するようにする。
Native Clientではpthreadが使える。キューはメインスレッドとオーディオコールバックスレッド両方からアクセスするためmutexを使ってロックしている。
JavaScriptとC++のデータ交換やメソッドの呼び出しは思いのほか簡単に実装できる。まだまだ手探りの状態だが、今のところ楽しくプログラミングできている。