0

私の前の多くの人々と同じように、私は Flash が CPU コア全体をダウンさせる問題を抱えています (具体的には、スレッドの 1 つが常に 100% の CPU を使用しています)。

Flash はおそらく複数のページで実行されています (私は多くのタブを使用しています) が、この CPU 使用率を開始したように見えたのは、映画のストリーミングを開始した少し後でした。しばらくはうまくいきましたが、ある時点で再生がスキップし始めたので、調査することにしました。

Xcode の Instruments.app を使用して CPU サンプリングを調査してみましたが、サンプリングされたコール スタックをたどって奇妙なことに気付いたのは、CPU 使用率の約 80% が怪しいように見え、NP_Initialize(これが起こった 2 つの呼び出しサイトの 1 つの写真を参照してください)。これが発生している両方のサイト (他にはあまりありませんか?) は、0x10fb8ec66 > 0x10fb93947(このサンプルでは) のスタック ツリー内にあります。跡もつけます。

最初の呼び出しサイト

2 番目の呼び出しサイト

これは不自然だと思いました。特に、NPAPI について読んだことからNP_Initialize、ブラウザーによって一度だけ呼び出されることを意図しているためです。では、なぜこれが起こるのかについて、あえて提案したい人はいますか?

OSX Mountain Lion 10.8.2 で最新の Firefox Beta 20.0 を使用しています。Shockwave Flash のバージョンは 11.6.602.167 です。

http://www.sendspace.com/file/h12wteの計測器トレース

4

1 に答える 1

2

あなたが見ているのは、ストリップされたバイナリ作品からスタックをシンボル化しようとする方法のアーティファクトです。

ほとんどのリリース バイナリと同様に、Flash は削除されています。つまり、バイナリの大部分に関するシンボル情報はありません。ただし、NP_Initialize シンボルは、プラグインをロードするためにエクスポートする必要があるため、バイナリに存在する数少ないシンボルの 1 つです。デバッガーの UI は、ストリップされていないバイナリ用に設計されており、実際のアドレスから最初に見つかった関数名までさかのぼって動作します。多くの場合、リリース Flash バイナリでは、アドレスに関係なく NP_Initialize になります。

したがって、再帰呼び出しはありません。「NP_Initialize」と表示されている場合は、ランダムな 16 進アドレスの場合と同じように、「それが何であるかわからない関数」と読む必要があります。

于 2013-02-24T19:37:17.563 に答える